关系数据库映射(架构模式)
解决的问题
领域驱动逻辑访问数据库的方式(选择的设计影响深远,难以重构。同时,领域逻辑的设计也会对这个选择产生重大影响)
基于下面原因,把SQL访问从领域逻辑中分离出来,放到独立的类中:
1. 程序开发者对SQL的理解有限,更好的方式是以程序开发语言的机制来访问。
2. DBA能看到SQL语句,才能更好的调整和组织索引。
分离方式:
1.一个表建立一个类,访问数据库则使用这个Gateway来访问。Gateway又包含两种方式
a) Row Data Gateway(即每行数据对应一个class实例),这种方式更适合面向对象的思考方式。
b) Table Data Gateway(即每个表对应一个实例,与记录集非常匹配),关于这种方式,可以自行查看相关资料。
2. 如果领域逻辑比较简单采用上面方式当中的一种就可以了,如果领域逻辑比较复杂,Data Mapper(数据映射器)才是我们需要的,Data Mapper能够隔离Domain对象和数据库。
以后一系列文章我将以行为模式(Behavioral Patterns)、结构模式(Structual Patterns)、元数据映射模式(Metadata Patterns)三方面来进行模式,以Hibernate作为实例进行分析。
关于三个类型的模式,可以参考:Patterns of Enterprise Application Architecture (author:Martin Fowler)
参考资料:Patterns of Enterprise Application Architecture (author:Martin Fowler)