设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 其他开发语言 >> [ZT]代码地震(作者:王咏刚 2004 年1 月)
精品推荐
其他开发语言点击TOP10
·数字小键盘指法练习
·用C语言编通讯录程序(初学者级别的)
·Modem 常用AT指令集
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
·Thinking in C++ 简体中文第二版
·debug和release的区别
·error LNK2001: unresolved external symbol __ftol2 错误解决
·C库函数手册
·一个简单的C语言编译器
编程开发点击TOP10
·数字小键盘指法练习
·ASP.NET 程序中常用的三十三种代码
·用C语言编通讯录程序(初学者级别的)
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·Modem 常用AT指令集
·java笔试题
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

[ZT]代码地震(作者:王咏刚 2004 年1 月)

作者: 来源:网络文章 时间:2005-12-17 18:48:43

[ZT]代码地震(作者:王咏刚 2004 年1 月)(6) 郝刚在一篇文章中谈到过另一种可行的解决方案,即,
使用XML 语言定义数据库结构,数据库系统直接根据
XML 定义创建表结构,数据访问控制代码(包括代码中的
数据结构定义)则由通用控件根据XML 定义自动生成②。
这种方法较难实现,但应能适用于大多数程序设计语言。
J2EE 体系中的CMP Entity Bean 技术综合了前两种方
案的优点:程序员在ejb-jar.xml 文件中定义表结构,同时
在Entity Bean 的实现代码中声明相应的操作接口(只声明
抽象的接口方法),应用服务提供的封装工具根据上述定义
自动生成数据库中的表结构和相关的操作代码。应当说,
J2EE 的CMP 技术,为我们解决类似问题提供了一个相当
出色的范例。
交易处理组件中的代码重复
“银证通”项目中,在两个服务程序的交易处理组件
之间,存在大量的代码重复问题。
两个服务程序中的交易处理组件是由不同的程序员开
发的。程序员在开发这些组件时,并没有意识到代码重复
的危险,也没有认真核对过两组代码之间是否存在相互重
复的部分。事实上,两个服务程序提供的尽管是完全不同
的业务功能,但二者中有许多基本的业务操作,如开销户、
币种转换、利率和汇率计算等,都是相互重复的。如果在
开发时不加注意,这些重复的业务逻辑就必然会产生重复
的代码。
在“银证通”系统的源代码里,交易处理组件的重复
现象包括描述业务属性的常量重复、与基本业务逻辑相关
的表达式重复、数据结构的重复定义、类成员的重复定义、
函数或方法内部代码的重复等等。《重构》一书给出的“提
炼函数”、“提炼类”等方法可以有效解决交易处理组件中
的代码重复问题。但现在的问题是,对于分布在不同服务
程序中的交易处理组件,我们该如何完成关键代码的“提
炼”呢?
这个问题可以归结为在不同程序或不同组件间提炼共
享组件的问题。例如,要解决“银证通”系统内不同服务
程序间的代码重复问题,通常的做法是把涉及相同或类似
业务逻辑的代码提炼出来,组成基本的业务操作或工具类,
并把这些类合并到一个公共的库中(对于C#语言,这里的
公共库就是指可以被不同程序共享的.NET Class Library),
由不同的服务程序共享。
不过,在软件开发完成后再去查找重复的代码并提炼
公共库,这充其量是一种亡羊补牢的方案。最好的做法当

然是在设计中尽可能多地甄别和提取不同组件间的公共特
性,在开发过程中随时注意不同的程序员是否在实现相同
的功能模块,并尽可能早地阻止代码重复的产生,提炼共
享的公共组件——不消说,这种高屋建瓴的工作理应由从
事总体设计的系统设计师全权负责。
通信接口中的代码重复
“银证通”系统的所有服务程序和客户程序之间均使
用Web Service 交换信息、完成交易。在Web Service 的两
端的接口代码中,也存在着比较严重的代码重复问题。例
如,在服务程序A 和服务程序B 提供的Web Service 接口
方法里,所有参数都平行地罗列在参数表中:
[WebMethod()]
public int GetTransactionsCount(string Code, string
RefCode, int RoleID, int OpNodeID, DateTime
Datetime);
因为几乎所有交易都和数据库相关,大多数参数都直
接对应于数据库中相关字段。和前面讲过的,数据库访问
控制组件的接口参数表重复问题类似,这种通信接口的设
计一样存在着重复和难于变更的问题。显然,客户端调用
Web Service 接口的代码必须以类似的方式传递所有参数,
客户端的更高层组件(如界面组件)在调用底层接口时,
多半也会重复这种冗长的参数表。一旦数据库结构需要调
整,那么,以Web Service 为中心,向客户端和服务端两
个方向延伸的每一层代码都必须修改方法的声明、定义和

共8页 9 7 [1] [2] [3] [4] [5] [6] [7] [88 :>

[ZT]代码地震(作者:王咏刚 2004 年1 月) 相关文章:
[ZT]代码地震(作者:王咏刚 2004 年1 月) 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com