领导让开会讨论 WEB开发模式,自己做这方面已经一年多了但总觉得水平不够,不敢发言,下面是我的总结,请大家看看在什么水平上,有没有必要提出来?
万分感谢
WEB开发模式心得
----------
我觉得要提高WEB开发效率,减少耦合度,眼下最好的办法莫过于使用WEB框架、轻型的J2EE框架以及集成开发环境了。
目前WEB框架比较多,但都是通用性的,使用起来相对罗嗦,不能完全满足我们产品的特殊要求,以我们公司的WEB开发的规模,可以实现自己的框架。也可以说是中间件吧。
我司的WEB开发大体上有这几个特殊点:
1,不同局点需求冲突,不可调和,照成基线分裂,代码维护费时费力。
2,同一个portal多科室开发,代码分散在多基线,集成困难。
3,强数据库移植性。
4,部分页面实现特别复杂,比如计费页面
5,国际化需求,现在用的fmt标签实现国际化特别不直观。
6,数据收集多,照成页面数据验证任务量大。
7,功能点较多,权限管理困难。
8,外围的接口多,集成困难。比如和接口机通信,集成测试的时候要花费很多的时间。
这些特殊需求,眼下流行的框架都不能完全的解决。
建议我们实现自己的框架:具体的特性有下面几点:
1,配置--零配置、多文件配置
我经历过SPMS开发,搭一个新环境后,发布业务的时候,非常痛苦,耦合度太强强,尤其是配置的问题。往往需要打开某个配置文件,找到某一行,然后把业务的配置信息拷贝过去。如果我们再次使用MVC的请求转发模型,势必还要遇到配置的问题。根据惯例来寻找转向的页面,可以大大的减少配置信息,有效的减少“同一个portal多科室开发,代码分散在多基线,集成困难”的问题。如果有些地方必须配置,或者觉得用配置更灵活的话,可以使用多个配置文件,这样集成的时候也只需要拷贝配置文件,不用在打开某个配置文件去寻找某一行那么痛苦了。
2,IOC--依赖注入
依赖注入是spring中非常重要的概念。简单的说就是对象只依赖接口,具体的实现类由配置决定。这对我们解决“不同局点需求冲突,不可调和,照成基线分裂,代码维护费时费力”的问题非常有用。举例来说:电信和网通的业务能力发布过程有些冲突,那么我们把他们的共同点抽象为一个类放到common目录里,电信的实现继承抽象类并将其放到CTC目录里,网通的同样放到CNC目录下。运行时根据当前环境设置(比如设置为电信环境),先到CTC目录里查找实现类,如果没有再到common目录查找实现类。这样有分歧的需求就能在一个基线里统一维护了,共同的部分不用重复开发。
3,响应页面动态查找
IOC只解决了冲突的业务逻辑共存的问题,不同厂商的页面同样是不同的。我们同样开发出公用的页面和特殊需求的页面分别放在不同的目录下,先去查找特殊需求的页面,如果没有就使用公用页面。如果约定好一定的规则,这是不需要配置的。
4,sql翻译
以前我们使用Hibernate来屏蔽数据库的差异,但因为性能问题我们抛弃了,现在ISMP则完全不考虑数据库的移植性,也不是合理的做法。
对于数据库的移植问题我有两个建议:一是,拼装sql语句的时候都使用标准的sql规范,然后使用翻译工具翻译为适应具体数据库的sql;二是,像国际化那样把不同的数据库的sql放到不同的文件里。
5,使用模板(Template)或者jsp+taglib封装ajax,以及自动化生成数据验证代码。
复杂页面的开发是很费精力的。复杂在于交互性强,数据处理量大,调试困难。
交互性的问题可以通过ajax有效的解决,不过ajax还是比较复杂的,需要通过封装来简化使用。
数据处理量大,验证的任务就大,自动化生成数据验证代码是非常重要的。
现在ISMP使用的模型,对于单表的应用开发相当容易,但对于涉及多张表密切协作的开发确很困难,原因是没有办法进行事物控制,每查询一次都要做一次错误处理,很麻烦。而且查询标签只能使用的ORACLE数据库上面,同事针对sqlserver做话单开发,直接在页面上写代码,又不好用集成开发环境,很费力。而且代码复用向当低。
6,新的国际化设计
使用fmt标签做国际化,jsp里面都是简称,很不直观,定位困难。如果使用模板技术,那么在html模板里可以直接写汉文,然后在输出前翻译为UNICODE编码,如果是英文环境,就直接以汉文做key来查找英文。采用jsp+taglib标签也能实现这样的功能吧。
7,制订权限管理的组件
spring中使用AOP的方式来处理权限问题,但因为AOP实现和使用都相对复杂,还是尽量不要使用。制订统一的权限Exception类,展示页面,和权限工具包,并将这些嵌入到框架中去,是能够有效的加快开发速度的。
8,定义基于xml通信协议
ISMP中和接口机交换数据多是使用共享数据库表的方式,这和ISMP的开发模型是有关联的。如果采用MVC模型,用java代码来实现逻辑的话,定义基于xml通信协议是非常有必要的。
9,提高代码的自动化的能力。
数据从web表单,到java对象再到数据库表,这其中有的转换相当机械,而且也挺费时间。如果将表单中控件的名字、java类中域的名字和数据库表字段的名字统一起来,再利用java中的反射,提高代码的自动化水平也不是一件难事。
提高WEB开发效率,实例代码、培训和文档也是很重要的部分。通用组件的开发,是一个长期的过程,应该不断的收集开发人员遇到的共性问题,然后封装起来,通过升级中间件的版本,持续的提高开发效率。
展示和逻辑彻底分离是不可能的,减少耦合的办法就是“依赖接口,不依赖具体的实现”。然后配合IOC,系统还是蛮灵活的。
比如:定义好接口后,可以做两套实现:一是测试实现(验证页面采集的数据是否符合规范,以及往页面传入一些数据),二是真正的逻辑实现。
页面开发人员可以使用测试实现。真正的逻辑实现可以用junit这样的单元测试工具脱离页面单独测试。
最后建议使用jdk 5.0 和 jsp2.1 的版本来提高开发效率。
web开发的技术门槛不高,关键是要有组织地持续积累出通用的东西。