- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?
面向对象设计和系统分层经验谈 ? 2008-2-29 作者:卢彦 出处:/ ? 面向对象系统设计经验谈
就像我在应用架构设计总结这篇BLOG中提到的那样,面向对象的系统设计就好象一群人翻越一座陡峭的悬崖,只要任何一个人没有翻越过去,那么就无法设计出真正的面向对象系统。
归结一下,在你打算进行面向对象的系统之前,你一定要考虑是否已经解决或能解决以下的问题:
一、对象的持久化
对象的持久化是最容易被想到的问题,同时也是最难解决的问题。由于关系型数据库模型和面向对象模型存在一些比较大的差异,如何将你的对象保存和快速的查询出来很是头痛。虽然采用面向对象数据库虽然可以最方便的解决这个问题,但是你会面临更多其它的问题,比如备份,报表和实施维护人员的培训等等。虽然有像NHibernate这样的ORM框架来帮助你做这个工作,不过你需要去多学习一门资料不全的新技术。另外,这些开源产品中有不少的BUG,你必须有做好调试别人代码的准备,如果你无法完全掌握这些代码的话,你会死得很惨。
如果你采用了面向对象来设计领域模型,又没有找到将对象直接关系化到你的数据库中的办法的话,最好不要采用面向对象的设计。否则你会被手工的ORM折磨疯的。比较好的选择是用强类型的DataSet,配合VS.NET的数据向导工具,非常快。(很有道理)
二、界面显示
由于界面无法直接的将复杂的对象显示出来,你在界面层又必须再做一次对象的平面化操作,将对象变成各种列表和文本框控件可以直接绑定的一维或二维数据结构。这方面目前还没有什么好的自动化方案,你必须手工做。所以我们的策略就是尽量减少这个转换步骤,就是在服务端就把面向对象转换成平面数据,然后在客户端直接绑定到控件上。在数据传输对象的选择上,可以用自定义对象,也可以用DataTable做传输对象,两者区别不是很大,各有各的好处。但是考虑到DataTable可以有一些绑定方面的优势和VS.Net的调试方面的支持,我们选择了DataTable。
如果你的对象是手工持久化的话,你做到这一步会感到很沮丧。因为平面的数据被你费了老大劲从数据库中转为对象,还没有怎么体会到面向对象的好处,又要再将对象还原成平面数据交给界面去显示,你可能会觉得非常的不值得。不如直接就把平面数据读出来交给界面去显示,既简单又方便。如果你已经产生了这个念头的话,恭喜你,你已经离全面放弃面向对象系统设计,完全退回到面向过程不远了。(再次暴露了ORM存在的一些问题,从数据库取回的DataSet转成Object集合后,到UI又得进行转化后与控件绑定,特别是CS应用)
三、远程调用
如果前面你还能坚持下来,到了这一步,很少人再能坚持了。面向对象对远程访问的问题考虑不足,使用面向对象开发系统的一个最大的优点是建模能力强,业务模型很清晰。比如你要找某个用户的公司名称,你可以简单的用User.Company.Name来得到该用户所属公司的名称。假如你用了多层结构,那么问题来了,你的对象是建在n层上的,而你需要在n+1层里对对象进行操作。而且n层和n+1层是远程调用。那么,如果你传个User过去,很明显用User.Company.Name是获取不到公司信息的。所以,如果你打算在n+1层做业务逻辑的话,你必须把整个对象树传递过去,这样做明显代价又太高。很多面向对象专业人士就提出了什么VO,BO,DTO,PO等等五花八门的贫血对象来企图解决这个问题,这样做的结果不仅是把问题给搞复杂化,更糟糕的是,这样一来,你当初所憧憬的面向对象系统其实已经是一个变相的Action Script系统了。
所以最好的方式是你就在领域模型层把业务处理完,中间层不要采用什么分布式系统设计。Martin Fowler说过:“分布式系统设计的第一原则是,不要使用分布式系统”。不知道有多少人能理解这句话的含义。
AF在解决这个问题上也提供了很大的帮助,我们利用了AF创造的统一编程模型,将逻辑尽量都放到领域层里。从而可以让更多的操作直接利用到领域模型的完全面向对象的业务逻辑处理的好处。
四、开发人员的面向对象思维
这一点最重要,如果开发人员无法认识到面向对象的好处,并且在思维模式上有很顽固的面向过程套路的话。在面对上述问题的时候会抱怨连连,不会尽全力的配合。如果整个的意见无法达成一致,那什么东西都做不出来,因为团结才是最重要的。所以你要么尽力说服你的团员,让他们真正的明白并理解为什么要这么做,要么你就趁早放弃。
最后一条建议:
要么就完全用面向对象的概念去设计,要么就完全用面向过程。如果当初是决定要走面向对象的道路,后来又在关键性问题上向面向过程做妥协。那么就干脆完全用面向过程的思维去解决问题比较好。否则面对一个四不象的怪物,你会发现维护起来更加麻烦。
翻越面向对象这座大山非常艰辛,但是你如果真正能
文档评论(0)