数据源架构模式
表数据入口
一个实例代表处理一张表中所有的行
通常是无状态的
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);
}
当需要分离对象与数据库时,使用数据映射器