征管综合资料信息化档案管理系统软件评述

来源:互联网 发布:java防止url链接注入 编辑:程序博客网 时间:2024/04/29 15:06
该系统主要是采用Visual.net C#开发工具和sybase数据库实现的一个B/S系统。系统目标是:
建立征管综合资料信息化档案管理系统。落实国家税务总局、省地方税务局关于强化税收征管科学化、精细化管理。使各级领导和全体税干能够及时快捷查询基层分局的资料信息,方便基层分局及时更新资料内容,充分利用信息化手段对征管综合资料实行科学化管理,做到形式上统一,内容上规范。同时,通过对征管综合资料数据的自动分析和加工处理,形成一系列衡量征管质量的指标体系,形成征管质量的综合考评指标,完成对各分局(局)征管质量的自动考评。
系统的主要设计的物理架构如下:
三层结构是B/S的必然。也就是说,采用了B/S结构,采用的系统架构至少是三层。但是,功能业务层在一般的程序员手中,很难真正的实现和用户界面层的脱离。黄山的征管综合资料信息化档案管理系统,在实现的时候并没有真正的按照原来的设计意图进行代码设计。导致了业务修改的烦琐和困难重重。
我们先来看看这个软件的实现中的一个部分:
可以看到,下面的图一可以看到,所有的类是散乱分布的,没有任何的类架构设计。每个类只和具体的页面相关联。所有的方法都写在了页面的附加类之中。这种杂乱的编码方式有两个危害:
1、              整个系统会有很多戎余代码。修改起来会出现“一个问题,要在每个页面的具体位置修改”。
2、              系统的业务层和界面表现层相互勾联。那就没有使用到非常好的C#的OOP特性,导致和ASP的开发毫无异样。这样做的危害不仅使系统的修改困难麻烦,无法实现良好的可维护性,可伸缩性。而且会很大的降低系统的性能。
1
  上面的类图是利用TOGETHER产生的。实际上是JCFORM1.CS.. JCFORM11.CS.这些类的对应的页面实际上都是类似的:

2
3
所以,这些页面应该有一个公共的类祖先。而不是所有的类都是散乱的。看不到这种关系的存在,是无法进入OOP程序员行列的。这个祖先类目前应该只有一个方法:
public infosubmit(String subminInfo);
而随着业务增加和变更。可能页面的功能需要增加。比如“删除”或“选择”功能。这是,在祖先类中加入两个方法,然后在所有的类中简单的调用就可以了。我打个比方:对方要求有“写日志的功能”;那么,以前面原来的散乱类作为实现方式的话,就会非常麻烦的要修改所有的代码。而现在,只要在infosubmit(String subminInfo)中修改,其他的11个页面自然的就修改完成了。
 
 
再看这种类型的页面(图4):
在整个系统中有很多同这个一样的类型页面:年月日的时间绑定。在原系统中的做法非常的古老。作者甚至在每个页面的每个同类型处写了同样的代码。在整个代码框架中有23处类似的东西。我不禁对作者的不爱动脑子的“勤快精神”表示佩服了。在.net中,他不爱写可以偷懒的控件,却在满堆堆的代码中打转。这样做不仅非常愚蠢,而且给系统带来了很大的不必要的负担。可以说,一旦要求界面元素的修改,比如要把年改为中文显示:‘2006’à‘二00六’。可能这个作者又要加个几天班来做这个事情了。实际上,这种工作可以在1个小时之内完成。
图表 4
这样的例子在系统中不胜枚举。
再看图表5。这种类型的页面在系统中大约也有20多张。这些类自然也是散乱而没有任何关系的。(再次对作者表示佩服)在每个页面有七个按钮:“前一页”,“后一页”,“保存成为EXECL”,“打印”,“页面设置”,“打印预览”,“考核”。这些个按钮,前六个基本上没有任何区别。但可爱的作者在每个页面都写了一段相同的代码(应该说使用的是“复制”/“粘贴”功能)。这样做实际上也是犯了同样的错误。
图表 5
这个的系统,可以说是非常失败的一个作品。就算可以在黄山使用,一旦在其他省市推广,将面临全面修改的问题。比如到了蚌埠,要求每个页面需要可以有个“保存为word”的功能,那么,又是昏天暗地的加班做“复制”/“粘贴”的事情。
下面简单谈谈什么是业务层和表示层的分离?
仍然以图五作为例子。这种页面可以说是这个系统最具有代表性的页面。说穿了,就是数据和显示的分离。这种分离如果你使用过EJB 就会有非常大的感受了。在EJB中,所有的业务规则必须写在每个BEAN里面。这些BEAN负责了业务逻辑的调配。而在页面表现层,只是简单的将页面和这个BEAN匹配就可以让整个页面显示所有的数据了。当需求发生变更的时候,如果客户对页面的显示表示不满(比如说想要每页显示8行而不是5行),那么只要将这个HTML的<table>多增加几个<tr>就可以了,BEAN不需要做任何的改动。如果客户对显示的数据表示要增加几个列了,那么,同样,只需要在BEAN中重新编译一下,HTML不用做任何的改动。在JSP中显示一个表使用的是循环调用<td>,所以很容易做到这点。而在.net中,如果只是图方便,那么,后一种数据不影响显示的效果是无法达到的。但是,显示不影响数据(代码)是三层结构必须做到的。但任何一个看的懂该电子档案系统的人都会发现,这个系统实际上没有达到这种分离。所以如果推广这样的一个系统,公司将面临非常巨大和昂贵的修改工作量。
最后谈谈这个系统的back模块。(系统分三个模块:mid,front,back。实际上我们前面的例子来源于mid和front模块)。这个模块是系统的后台管理功能模块,主要实现对一些后台数据的修改和影响。这种模块一般不建议使用B/S方式实现,最大的一个原因是太危险。可以想象,如果某个有企图的人在internet上破解了admin密码,这个系统就会任意这个黑客修改了。这样做的危险可想而知。推荐的做法是使用C/S的windows原生代码来实现。
   做一个程序就象建一座房子,如果在开始的时候没有规划好,整个房子就算能幸运的建设好了,那也不可能是一个非常美丽的艺术品。整天拆东墙补西墙的作品,没有几个人能看上眼,这样的房子谁都不会满意。美丽,应该由内而外,内部架构合理了,才能够让软件用户体验到前所未有的感觉。
原创粉丝点击