1.3 Fowler的企业设计模式
Martin Fowler的著作Patterns of Enterprise Application Architecture是有关如何构建企业级应用程序的最佳实践和模式的参考书。与GoF设计模式著作一样,经验丰富的开发者毫无疑问已经遵循该书中归纳的许多设计模式。但Fowler著作的价值在于,在对这些模式进行分类时使用一种公用语言来描述模式。该书分为两部分:前半部分讨论n层应用程序和数据访问、中间件以及表示层的组织;后半部分是与GoF模式著作相似的模式参考,但本书的实现更加具体。
本书将讨论Fowler设计模式的ASP.NET实现。下面将介绍本书剩余部分将要涉及的模式。
1.3.1 分层
第3章讲解了在企业ASP.NET应用程序分层时可供自由采用的选项。我们将了解传统的Web表单代码隐藏模型带来的问题以及如何使用传统的分层方法将表示、业务逻辑及数据访问等关注点分离开来。
1.3.2 领域逻辑模式
第4章介绍了组织业务逻辑的3种常见方法:Transaction Script(事务脚本)、Active Record(活动记录)及Domain Model(领域模型)。
1. Transaction Script
Transaction Script模式按照线性的、过程式方法来组织业务逻辑。它将细粒度的业务用例映射为细粒度的方法。
2. Active Record
Active Record模式按照一种能够紧密匹配底层数据结构的方式来组织业务逻辑,即表中表示数据行的对象。
3. Domain Model
Domain Model模式是对现实领域对象的抽象。同时对数据和行为建模。对象之间可以存在与真实领域相匹配的复杂关系。
我们将展示如何在ASP.NET中使用这些模式,以及何时适合选择某一种模式而非其他模式。
1.3.3 对象关系映射
在第7章中,将注意力转向如何将业务实体的状态持久化,以及如何从数据存储中检索它们。介绍以下几种支持持久化的基础设施代码所需的企业模式。
1. Unit of Work
Unit of Work(工作单元)模式用来维护一个由已经经过业务事务修改(添加、删除或更新)的业务对象构成的列表。然后,Unit of Work模式负责将这些发生变化的对象的持久化工作协调成为一个原子动作。如果出现问题,整个事务就会回滚。
2. Repository
Repository(资源库)模式大体上用于对象的逻辑集合,它们更为人知的名字叫做聚合(aggregate)。它充当业务实体的内存集合或仓库,完全将底层数据基础设施抽象出来。
3. Data Mapper
Data Mapper(数据映射器)模式用来从原始数据中提取信息以生成对象,以及将业务对象中的信息转换到数据库。业务对象和数据库彼此互不了解。
4. Identity Map
Identity Map(标识映射)模式监视每一个从数据库中加载的对象,确保所有对象只加载一次。当后面请求该对象时,在从数据库检索之前先检查标志映射。
5. Lazy Loading
Lazy Loading(惰性加载或延迟加载)模式将获取资源的过程推迟到真正需要用到该资源的时候。如果想象一个携带着通讯录的Customer对象,那么可以从数据库中提取这个顾客对象,但保留通讯录的生成操作,直到真正需要用到该通讯录时才生成。这可以实现按需加载通讯录,从而避免在从来不需要用到该地址数据时访问数据库。
6. Query Object
Query Object(查询对象)模式是GoF的Interpreter(解释器)设计模式的一种实现。查询对象充当一种从底层数据库中抽象出来的面向对象查询,它引用的是属性和类,而不是真正的表和列。通常,还需要使用一个翻译器对象来生成用于查询数据库的原生SQL语句。