数据源架构模式

表数据入口

一个实例代表处理一张表中所有的行

通常是无状态的

interface Person {    RecordSet find(int id);    RecordSet findWithXXX(...);    void update(...);}

表数据入口可能是最简单的数据库接口模式

行数据入口

一个实例代表一条记录 内存对象的数据与数据库操作混杂在一起会带来一些麻烦 如不好测试 并会增加复杂度

class Person {    name,age;    insert();    update();}interface PersonFinder {    Person find(...);}

活动记录

一个包装表或视图中某一行的对象,封装了对数据库的操作访问

class Person {    name,age;    insert();    delete();    bool isAudlt();}

活动记录的本质是一个领域模型

活动记录的数据结构应该与数据库完全吻合

活动记录与行数据入口的区别在于行数据入口只有数据访问,二活动记录封装了一些逻辑

使用

数据映射器

随着ORM框架的发展,前面3种方式已逐渐过时,使用数据映射器的方式可以很好地处理大型应用下的数据源使用

在对象和数据库之间的一个中间层

数据映射器自身不被领域层所察觉

interface PersonMapper {    Person select(...);    update(Person);}

当需要分离对象与数据库时,使用数据映射器