Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1144045
  • 博文数量: 141
  • 博客积分: 3161
  • 博客等级: 中校
  • 技术积分: 3011
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-27 14:53
文章存档

2012年(28)

2011年(113)

分类: 嵌入式

2012-01-04 09:27:47

2.3  企业应用架构模式

    说起企业架构模式,Martin Flower的《企业应用架构模式》[1]一书提到的相关模式堪称经典。书中给出了在构建企业级应用时一直可以采用的模式和最佳实践原则。本节首先要阐述几个概念,然后开始简要介绍企业应用架构模式,更多的介绍会融合在本书后面的每一个章节中。

 

2.3.1 什么是企业架构   

 

    传统的企业架构通常是指一个机构或组织范围内的框架。这个框架用来整合业务流程、信息流、数据和基础设施,从而有效地支持组织的需要。

 

    从软件开发的角度来看,企业架构意味着定义了一个流程、框架和一系列有指导意义的设计方法和开发方式。同时企业架构也会关注如何将每个应用在不同层次分解为可以重用的模块。

 

    很多时候,我们忙于开发客户所需要的各种类型的软件项目,所关注的也只是目的:如何最终完成一个项目,以致很少甚至从来没有考虑过如何将项目中的功能通用化、模块化,以便在其他的项目中重用。企业架构会关注如何将每个应用在不同层次分解为可以重用的模块。

 

    企业架构通过定义一个坚实的代码基础和实践方式,从而在多变的软件环境中提供帮助,并起到促进作用,它主要是通过提供软件项目的开发工具(不只是IDE工具,还有一些可以重用的类库、组件、文档资料等)和设置软件项目开发的边界及规则来实现这个目标的。

 

2.3.2什么是企业级开发

 

 

    谈到了企业级开发,首先要谈的就是:“什么是企业级项目”。

 

    有人将之简单地理解为“为一些企业做的项目就是企业级项目或企业级应用”,照这个理解来看:或许为大企业、机构和组织做的项目就是“大型企业级项目”,为小企业或者公司做的项目就是“小型企业级项目”……

 

    另外,还有很多的人将企业级项目指代为:低性能,用户量少,并发性差,甚至是不断需要缝缝补补的项目,而且其应用马马虎虎。如果带着这些望文生义的理解来参读和学习企业架构模式,那么对很多概念的理解可能都会有失偏颇。

 

    下面我们就来看看什么到底是“企业级开发”。

 

    企业级开发通常是指在开发过程中采用实现企业架构的模式和实践方法。企业级开发会使用很多的方法和方法论来实现一个成功系统必须具备的指标:可靠性(Reliability),灵活性(Flexibility),重用性(Reusability),可维护性(Maintainability)(后面将其简称为RFRM)。这些指标也是衡量一个软件系统设计好坏的指标。

 

    所以,企业级项目就是具有以上特性(RFRM)的项目。企业级项目的概念和项目的大小是没有很大联系的,甚至可以说是几乎没有什么关系。

总结一下:企业级开发思想指导开发,从而创建企业架构,然后反过来又通过企业架构更好地指导和帮助项目开发。如图2-8所示。

 

 

    在图2-8中,企业级开发思想过于抽象,是否可以让这些“思想”更具指导性和实际的可操作性呢?企业架构模式回答了这个问题。

不过,到了这里读者可能还有一个疑问:架构设计和企业架构模式之间的关系是什么?架构模式和设计模式之间的关系又是什么?

 

2.3.3 再议架构设计和模式

    首先来看一张图,如图2-9所示。

 

 

       当然,上面的图也不是非常准确,从图2-9可以得出:

q  架构设计不等于架构模式。懂得架构模式只是架构设计者必须具备的一个基本要素。

q  架构模式中往往也包含多个设计模式的综合使用。

q  架构设计在技术方面的产物就是得到一个项目的架构(很多时候是以代码和相关技术文档的形式出现的)。

 

2.3.4  企业架构模式的介绍

    前面对设计模式进行了分组,现在也对架构模式进行分组,便于读者理解。本节将简要地介绍各个模式,具体内容会在后续章节详细讲述。

1. 分层模式

在分解复杂的软件系统时,用得最多的技术就是分层模式。对系统进行分层有如下好处:

q  无须过多地了解其他层次,可以直接将某一层作为一个有机的整体来理解。

q  可以替换某层的实现,并且不会影响其他的层,只要替换前后提供的服务相同即可。

q  可以将层次间的依赖性减到最低。

q  分层有利于标准化工作。

分层的缺点在于:

q  层次并不能封装所有的东西。甚至有时候会带来级联变动。例如,如果在数据库中新增一个字段,然后需要让这个字段在界面上显示出来,则数据库到UI层每一层都要做相应的修改。

q  层次多了,也会影响性能。因为不同的数据形式在不同层之间转换。

 

2. 业务逻辑设计模式  

    业务逻辑设计模式如下所示。

 

Transaction Script:事务脚本模式,以线性或面向过程的方式来组织业务逻辑。它将每一个业务流程都包装为一个大的、粗粒度的方法。

 

Active Record:活动记录,以底层的数据结构为基础来组织业务逻辑,每个对象都代表了表中的一行数据记录。

 

Domain Model:领域模型是对现实中的领域对象所进行的抽象和提炼。每个领域对象包含自己的数据和行为。

 

3. 对象关系映射

    讲述如何保持业务对象的数据和状态,以及如何从数据存储中获取业务对象的数据。

 

Unit Of Work:工作单元,确保所有相关的一组对象的改变在一个业务事务里面,同时确保在提交状态的时候要么一起成功,要么一起失败,维护业务对象状态和数据的一致性。

 

Repository:资源库,用来协调领域和数据映射层,使领域层完全不关注数据的存取,隐藏了后台所有机制。

 

DataMapper:数据映射,将把原生的数据取出来复制给一个对象,然后把对象的数据再次转换保存为原生数据的过程。

 

Identity Map:标识映射,通过在映射中保存每个已经加载的对象,确保每个对象只加载一次,当要访问对象的时候,通过映射来查找它们。这个模式主要关注的是性能问题,如果多次加载相同的数据,势必开销很大。在使用标识映射的时候还要考虑数据的一致性和并发性的问题。

 

Lazy Load:延时加载,也称晚加载。只在真正需要这个数据的时候才会去加载。主要是为了提高性能,较少不必要的数据传输和读取。当然,这个规则也得根据实际情况来看,有时候,为了综合考虑还是需要一次性地加载所有的数据。

 

Query Object:查询对象,它能够用业务对象的语言而不是数据库的语言来描述查询,这就意味着,我们在构建查询的时候,不必在意数据库中的表名和列名。查询对象一般是使用设计模式中的解释器模式来实现,查询对象知道如何将自己转换为底层数据存储设备,如,数据库可以理解的查询语言。

 

4. 表现模式

因为表现模式用一两句话可能解释得不是很透彻,到后面相应的章节,会做具体的介绍,所以这里只是列出表现模式的种类。

q  Model View PresenterMVP模式)

q  Model View ControllerMVC模式)

q  Model View View   ModelMVVM模式)

q  Front Controller(前端控制器模式):通过引导请求经过一个处理程序对象来统一所有的请求处理。

q  Page Controller(页面控制器模式):最基本的思想就是:为Web站点上的所有页面都在服务器上准备一个模块,这些模块充当控制器的角色。

5. 基本模式

    Layer Supertype:层超类型,让某一个类型充当一层中所有类型的超类(父类)。在某一层中,所有的对象或很多对象都具有某些相同的方法,我们不希望这些方法在系统里被复制而产生冗余代码,此时我们可以将这些行为移到一个通用的层超类型中。       除此之外,还有很多的架构模式,例如Register(注册表)、Gateway模式等,这里就不一一列举了。

 

看完了这么多的模式介绍,下面举个常见的使用架构模式的例子,简单的体会一下它们的使用方式。

 

 

    当当网:

    京东地址:

    卓越地址:

   

[1]Martin Fowler 著,机械工业出版社。

阅读(2564) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~