<强> TL; DR; 强>
这看起来更像是我的存储库;亲自。
在纯粹主义者中,存储库和DAO之间存在很大争议。许多开发人员可以互换使用术语DAO和Repository。我个人并不认真对待这场辩论。我宁愿专注于我的应用程序需求。
以下是DAL中使用的某些模式的非常粗略描述:
工作单位:
- 处理数据库连接和事务。
- 另外处理缓存,批量查询,跟踪等。
- 请参阅this answer。
<强>存储库:强>
- 主要使用UnitOfWork;并非总是如此。
- 不是每个表,它是每个聚合根。
- 返回域对象; NOT Object State(Entity / POCO)。
- 请参阅this回答。此外,this还有其他几个条款的答案。
DAO(数据访问对象):
- 紧密绑定到数据库而不是业务逻辑。
- 1:1与表格的映射。
- 每个操作都是交易。
- 返回对象状态(Entity / POCO)。
CQRS(命令查询责任隔离):
- 使用不同的模型编写(INSERT,UPDATE,DELETE)信息,而不是用于读取(SELECT)信息的模型。
- 编写操作包含在Command。
中
- 查询操作包含在查询中。
- 每个层都可以根据特定需求进行独立优化。
查询对象:
数据映射器:
<强> ActiveRecord的:强>
- Poco和Methods属于同一类。
- 映射发生在同一个类中。
- 使用单一记录行事。