数据源架构模式

表数据入口

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

通常是无状态的

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);
}

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