最近项目处于前期阶段,对项目的架构进行了一些探讨,对PetShop架构与ORM架构进行简单的对比分析,抛砖引玉之作,欢迎大家参与讨论。
相关术语:
软件架构:是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。
软件架构模式:捕获了软件架构中的核心元素,并难以改变的提供了系统结构方面的支持。
三层架构:微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层。数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问;业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关;表示层:是系统的UI部分,负责使用者与整个系统的交互。
ORM:Object-Relational Mapping,对象关系映射,在维基百科上对ORM的解释如下:是一种用于转换在面向对象编程语言之间的不兼容的类型系统的数据编程技术。
业界目前流行的企业应用软件架构模式:基于分层架构、SOA、针对表现层的MVC、针对业务逻辑层的领域驱动模型和服务层等。在目前企业应用的架构中,分层式结构是最常见,也是最重要的一种结构,这种架构的典型代表是PetShop和基于ORM的架构。除此之外,还有很多开源架构也是分层架构,如Nhibernate、Spring.Net、Castel Windsor、Nbear、Ibatis.Net等等。
说明:
PetShop是一个范例项目,不是一个具体架构,但是为.Net平台下进行企业应用开发提供了一个模板,这里我们认为这个模板就是一套应用架构。
ORM实际上是数据访问层的一个架构,但是这里我们并不严格对此界定,而更多的认为ORM是企业应用的一种架构。
这里的PetShop和ORM各代表了一种应用架构。
PetShop是微软为了同SUN(现已被Oracle收购)的J2EE平台下的Pet StoreShop实例项目进行比较而开发的一个案例项目,是微软为了展现.Net平台的开发能力而做的一个范例。
PetShop最早是基于.Net Framework1.1来开发的,后来随着Framework2.0的发布升级到PetShop 3.0,在2006年,使用Visual Studio 2005进行了重构,完成了目前为止PetShop的最新版本PetShop4.0,本文对PetShop架构的分析都是基于此版本来进行的。
PetShop的项目结构如下图所示:
图 PetShop项目结构
PetShop4.0基本上延续了3.0的结构,但在性能上作了一定的改进,引入了缓存和异步处理机制,同时又充分利用了ASP.Net 2.0的新功能MemberShip,在设计模式上,PetShop4.0的系统架构如下图所示:
图 PetShop体系结构
表示层 (WEB) 包含各种用户界面元素。业务逻辑层 (BLL) 包含应用程序逻辑和业务组件。数据访问层 (DAL) 负责与数据库交互,进行数据存储和检索。
PetShop架构有以下技术特点:
(1)面向接口编程,在业务逻辑层使用IBllStrategy,在数据访问层使用IDAL、IProfileDAL、IMessaging。
(2)使用分层架构,从整体架构上来说,分成四层:业务实体层(Model)、数据访问层(DAL)、业务逻辑层(BLL)、显示层(UI),但实际上还是一个典型的三层架构。
(3)抽象工厂模式,.NET Pet Shop 4 使用抽象工厂设计模式,该模式中的接口用于创建一系列相关或依赖的对象,而无需指定其具体类。数据访问层中有一个该模式的示例,其中包括针对 IDAL、DAL 工厂、Oracle DAL 和 SQL Server DAL 的项目。为缓存、库存和定单数据访问、消息处理,以及配置文件数据访问创建抽象工厂。
(4)使用缓存技术,PetShop 4.0则引入了SqlCacheDependency特性,使得系统对缓存的处理较之以前大为改观。
(5)使用异步,使用了Microsoft Messaging Queue(MSMQ)技术来完成异步处理,利用消息队列临时存放要插入的数据,使得数据访问因为不需要访问数据库从而提供了访问性能,至于队列中的数 据,则等待系统空闲的时候再进行处理,将其最终插入到数据库中。
PetShop架构的优势/劣势分析
PetShop |
|
优势 |
1. 采用三层架构,层次清晰,简单; 2. 整个系统代码量不大,运行效率高; 3. 使用面向接口编程、工厂模式、缓存技术、异步以及其它一些Framework2.0的技术,如母版页、Membership等 4. 大部分开发者都有所了解,学习成本低,容易上手; 5. 可以结合代码生成工具来生成Model、DAL、BLL的基本代码 |
劣势 |
1. 对程序员的数据库水平有要求,在数据访问层需要程序员能够编写SQL语句和存储过程等 2. 在Model、DAL、BLL需要编写代码,降低了开发效率 |
对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
常用的ORM工具有:
ORM工具 |
参考 |
Entity Framework |
|
EntitySpaces |
|
Genome |
|
LINQ to SQL |
|
llblgen pro |
|
NHibernate |
ORM架构具有以下特点:
(1) 使用ORM框架自动完成数据库的CRUD操作,节省了开发的工作量,提高了工作效率。
(2) 职责分离,把程序员从数据库里解放出来,数据库的分析、设计、维护这些工作可以交给DBA来做,虽然一些项目中并没有专职的DBA,但是至少使开发团队成员的大部分人不用再写SQL了。
(3) 更加OO(面向对象),使开发人员把主要精力放在业务逻辑及其处理上,这将会使开发人员运用领域驱动开发。
(4) 目前有比较成熟的框架可以使用,如NHibernate、LINQ To SQL、Entity Framework,也可以自主开发ORM框架。
ORM |
|
优势 |
1. 具有更多的OO特征 2. 开发人员对SQL的关注减少,对业务逻辑关注增多 3. 通过使用ORM框架,可以自动生成代码,提高了开发效率 4. 适合于企业应用架构 |
劣势 |
1. 应用程序运行性能有所降低,因为ORM大量使用了反射技术,在实例化的时候会占用大量资源。 2. 大部分开发人员需要学习ORM的相关技术,有一个学习的成本和时间 |
|
PetShop |
ORM |
开发速度 |
中等 |
比PetShop高 |
开发人员能力 |
熟悉.Net平台即可 |
更高一些,需要所有团队成员掌握ORM的相关技术 |
面向对象的支持 |
面向对象 |
面向对象 |
程序性能 |
比ORM高 |
中,可能会有性能问题 |
灵活性 |
中 |
比PetShop高一些 |
复杂程度 |
简单 |
比PetShop复杂 |
应用级别 |
项目级-适合任何项目级开发 |
企业级-适合大型项目或大型应用 |
由上面的比较可以看出,PetShop适合任何项目级的开发,有开发人员的基础,但是需要开发人员具有数据库的一些基本功;ORM更适合大型项目开发,开发效率相对更高一些,但是需要开发人员掌握ORM的相关技术,而目前大多数程序员并不具备此项能力,而且大量使用了对象(可能是复杂对象),实例化大量对象以及大量的使用反射技术必定会占用更多资源,从而可能导致系统性能下降。
结合当前具体项目来说,使用PetShop和ORM架构都能解决问题,如果ORM架构在程序性能上能够解决高并发的问题,使用现有的ORM架构无疑会降低工作量,加快开发进度。