- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
实战工程分析
最近接到一个临时任务:帮外国某知名公司分析一个工程架构。这个工程是两年前开发的,并且经过了几次升级。主
要功能是管理客户、合作伙伴资料,提供在线业务等等,具体细节不用多说。
据客户说,他们在使用本系统的过程中发现了很多的问题,觉得已经不再满足他们的需求,希望我们能帮助他们评估一
下当前的系统有哪些架构上的问题,并帮助他们发现未来可能发生的问题,从而决定是否需要开发新的系统
客户提供了很详细的文档,包括业务说明,系统架构,技术要点,部署方案等等。看完文档,对系统和客户期望有了一定
的了解之后,开始干活儿!
系统是采用.Net技术构建的,基于.NetFramework2.0,使用了ASP.NET,WinForm,WebService等技术,并使用了
EnterpriseLibrary中的DataAccess,Cache,Log等功能。
我本人负责的是架构的分析。结合文档和源代码,没用1个小时,系统架构就很清晰了。其中发现了一些很普遍的问题,
在这里跟大家分享一下:
1.分层架构
分层架构是绝大局部企业软件都普遍采用的方案,但由于架构师水平的参差不齐,导致很简单的一个分层,出现了很大
的差异。
大家都知道“3层架构〞或者“多层架构〞。有点理论里分3层,有点理论里分5层,还有分7层的。其实,在我看来分
几层不重要,重要的是分层的目的。分层是为了什么的?简单的说就一句话:为了便于维护。
大家都知道,软件开发中“变化〞才是永恒的。开发周期是死的(尽管可以一拖再拖,但总有一个发布的截至日期吧!),
但后期的维护却是很不变得。不管是发布补丁也好,更新版本也好,其实都是为了能适应软件发布之后面临的各种各样的
“变化〞。
好,我们回到分层上来。分层,就是为了使系统结构更清晰,系统耦合性变小,使修改一处代码时,对其它的局部影响最
小,这样就能以最小的代价应对变化带来的麻烦!所以,分层的第一要素,就是各层之间屏蔽细节,降低依赖,使各层具体实
现变得透明(这也是SOA的其中一个重要思想)。我们可以通过各种方法来到达这个目的,面向接口编程,设计模式,架构
模式等等,都可以帮助我们。
而我在此工程中看到的第一个重要的问题就是,系统分层不清楚。下面是分层的简图:
1/6
由上图可见,系统共分了三层。但有一个问题,业务对象竟然贯穿了三层,这严重违反了分层的初衷。由于业务对象对
数据存取层和展现层都可见,导致如果我们的业务对象发生了变化,就要修改从数据存取、业务逻辑到展现层,这三个层
次的所有相关代码。而且这个方案违反了分层的两个设计原则:
a.下层对上层隐藏细节,只暴露接口。再此,本应属于业务逻辑层的业务对象被暴露到了展现层。
b.上层对下层不可见。即下层不知道上层的存在,只提供接口。这里业务逻辑层的业务对象被数据存取层操作,会导
致两个层之间纠缠不清,以至于会出现改动业务逻辑会影响数据存取方式的荒唐现象。
另外,强类型DataSet也有同样的问题(本应是属于数据存取层的,却被传递到业务逻辑层,甚至是展现层)
软件设计中有一个很重要的原则就是:依赖倒置原则(DIP)
依赖倒置的意思是:调用者依赖被调用者的接口,而不是实现。
具体到此处就是:业务逻辑层应该依赖数据存取层的接口,而不是具体实现(强类型DataSet)。由于被调用者编程了
抽象,而调用者变成了“实现〞,所以与普通的面向对象的观念来说,依赖关系被倒置了,因此被称作依赖倒置原则。
依赖倒置在分层结构中是很重要的原则。希望每一个设计者都时刻把它记在心间吧,呵呵。
2.面向接口编程
其实这跟上一个问题有密切联系。面向接口编程,是“依赖于抽象,而不是实现〞的具体手段。不管是模块内部,还是
个层次之间,面向接口是消除依赖的基础。
举一个简单的例子:本系统中业务逻辑层会调用数据存取层的方法,得到一些数据。比方调用一个PartnerAccess类
2/6
的GetPartner的方法。PartnerAccess是数据存取层的一个具体类,负责Patrner表的所有增删改查操作。而业务逻辑
层到处充满着这样的语法:PartnerAccesspartnerac=newPartnerAccess();partne
您可能关注的文档
最近下载
- 物理化学(下)(湖南科技大学)智慧树知到期末考试答案2024年.docx
- 部编版八年级道德与法治上册第十课《建设美好祖国 关心国家发展》课件.ppt
- 关于母子公司之间风险隔离、防范利益冲突 与输送及关联交.pdf
- _循环肿瘤细胞检测在胃肠道肿瘤诊疗中的应用中国专家共识(2023版).pdf
- 2024年5月18日阿克苏地直遴选面试真题及答案解析(上午卷).doc VIP
- XXXX《个人与团队管理》机考答案.pdf VIP
- 2023-2024年四年级上册科学(湘教版) 期末模拟试卷(一)(含解析).doc VIP
- 滚花螺栓标准(2016版)-STD3938.pdf
- LEICAX2数码相机说明书图文.pdf
- 一本正经玩科学.pptx VIP
文档评论(0)