Nhibernate + WCF + ASP.NET MVC + NVelocity 对PetShop4.0重构(一)——架构设计
PetShop4.0是微软针对.NET企业系统推出的一个范例。业界有许多.NET与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来。这种争论不可避免带有浓厚的商业色彩,对于我们开发人员而言,没有必要过多关注。然而PetShop随着版本的不断更新,至现在基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,而且有很多可以借鉴之处。PetShop是一个小型的项目,系统架构与代码都比较简单,却也凸现了许多颇有价值的设计与开发理念。
然而PetShop4.0存在很多争议,我想园子里一定有很多PetShop4.0的“粉丝”,重构PetShop4.0会引发很多争议,我希望园子里的朋友以“交流技术”的心态来看待此问题。对于“重构”,我只是以我个人的观点阐述了PetShop4.0一些不合理的地方,并加以“修改”,同时引入了一些我“片面”的架构设计思想。
我个人认为PetShop4.0存在以下的弊端:
1、入门级别的架构,不完全适于中、高级开发人员学习。
PetShop4.0作为.NET三层的一种入门型架构。目前据我了解,大多数公司的架构模式都采用或者效仿PetShop4.0。对此我个人认为:作为.NET开发人员来说,这样并没有完全理解分层的真正意义,照搬PetShop4.0,而没有真正灵活应用PetShop4.0。我想,针对真正的大型项目,在扩展性,重用性,负载均衡上,PetShop4.0是很吃力的。对于服务器集群的分布式的应用来说是个空白。
2、错误的引导程序员对架构的深入了解。
很多.NET开发人员习惯认为:学会PetShop4.0以后就学会了大多数公司的架构。对此我个人认为这是.NE开发人员的悲哀。目前可以这么说,PetShop4.0影响了一代.NET程序员的架构思路,并把这代程序员的设计思路给限定“死”了。习惯性认为架构就是“DAL,BLL,UI”。我想,这样就会阻碍出架构设计。我认为PetShop4.0仅仅是一个“特列”,而不是一种通用型架构。
3、移植性和重用性偏弱。
对于SQLServerDAL和OracleDAL来说,在实际中增加第三种数据库就需要再写一个DAL,这样会增加我们的开发成本,我个人建议使用ORM框架来实现比较恰当。因为这样便于数据库的移植。在持久层中,基本上每个表都需要对应的CRUD,建议使用 Repository将代码内聚起来。PetShop4.0的SQL语句是写在类里的,这一点我比较反对,我倾向于把SQL语句写在配置文件或者模板文件里(如:ibatis.net),这样看上去会更灵活。
4、仅适用于展示.NET2.0的特性,在NET3.5以上环境却失去了优势。
PetShop4.0发布已经有好几年了,在新技术层出不穷的时代。PetShop4.0对于AJAX,Web Sericve、WCF、ASP.NET MVC的支持略有欠缺。对于ORM、IoC、AOP等编程思想的概括几乎为空白。
考虑到以上的问题,我个人准备对PetShop4.0进行重构,以便新技术发展的需要。
图1是重构后的架构图:
(图1)