很多企业已经有了一套自己的固定的业务流程,以及与之相配的信息系统,替这样的企业开发业务系统的时候往往数据库结构和业务流程都是已有的,开发的主要任务就是使得数据流符合已有的业务流程。这种系统开发我称之为以数据为中心的系统开发。这种系统也不是简单的curd的操作,本身的业务流程也非常复杂,由于业务的模块很多,很多内部的人员对不同业务之间的关系也不能准确的把握,企业内部本身也有很多不同的系统,相互之间也有数据交换,系统开发的过程本身也是一种系统进化的过程。所以这样的系统唯一稳定的就是数据库的结构。整个开发的过程也就围绕着数据流来进行。
首先是页面的开发,页面开发通常的流程是,按照客户要求画好HTML 让客户确认,客户确认后建立所有html元素和数据库表的对应关系(比如说客户code对应的数据库的那张表的哪个字段)。最后开始coding。Coding首先就是建立JSP页面,当页面元素很多的时候这的确是一件非常艰苦的工作。
1) 将html改造成相应的JSP的风格。
2) 将数据使用相应的MVC的tag 将数据对应的字段在JSP页面上展开。
3) 添加上相应的辅助信息(比如字段的最大长度,数据的格式信息(日期型?浮点数?字符串))。
4) 提交的时候需要做的一些基本的javascript进行验证,并且需要报错(出错信息需要国际化)。
5) 这些页面的元素提交后,后台提交的数据和相应的业务bean的转化也同样需要大量的工作。
当维护工作开始的时候以后这也个信息散落在巨大的JSP页面的哥哥tag中。并且也散落在javascript的各处。
可以说仅仅是对这写看似简单的页面工作就几乎占了整个工作量的一半不止,当页面复杂的时候更加明显。
如何才能减少这些个复杂工作的工作量呢?
我的想法是从库结构入手:
1) 通过库结构生成相应的javascript对象,每个对象对应一张表的表结构,每个字段对应一个field对象比方说:
User{
code :field{ type=float ,length=9,….. }
}
这样就可以参照CSS的做法 把数据的结构和数据的表现分离出去。把JSP页面分离成为一个数据结构描述和数据表现两个部分。当页面初次展现时候通过javascript 通过不同div中不同的命名规则,将javascript对象和对应的dom对象绑定。这样在做jsp页面的时候就不用考虑字段的辅助信息的内容,基本html原先的设定都不用修改。
2) 由于对象中有长度类型的信息,所以基本的数据验证就就可以通过共同的javascript函数来实现,同时也实现了报错的标准化。
3) 页面初始数据的填写和提交。
Struts 是通过bean的命名规则和tag中的命名规则来通过request进行数据传递的。这种方式的好处是通过form的映射在出错的时候能很好的保存数据。 缺点也很明显。当页面元素多的时候要手工写一大串string ,同时当有多行同名元素的时候只能采用数组的方式来处理,很不方便。
其实采用javascript的对象方式来根据页面上不同的div来收集对应的元素,通过ajax的方式上传到web服务器亦或通过json的方式在传回数据区,通过javasrip填回html。这样无论是数据的组织还是debug 都比较方便
4) 从工作量来说
【1】 javascript对象是自动生成的。几乎不需要工作量。
【2】 将对象binding到dom这应该有共同的函数来实现。
【3】 数据的填写和收集也可以由共同的函数来实现。
【4】 最后提交到web服务器上的数据已经是对象化的了。很容易进行数据的整理。
【5】 维护页面的数据信息都集中在数据区,维护起来非常的方便。
5) 难点就在于共通函数的整合,以及报错处理的共通话,和报错后页面的恢复。