Repository或DAO:从多个表读取数据

Com*_*mbo 3 dao repository repository-pattern

我们有一个类,其中有方法:

  • find:选择+多个连接以过滤数据
  • 添加:在多个表中插入
  • 更新:在多个表中更新
  • 删除:在多个表中删除
  • 检查:多重选择+多重连接以检查某些内容

它是存储库还是 DAO?

Ami*_*shi 8

TL;博士;
对我来说,这看起来更像是存储库;亲自。


在纯粹主义者中,Repository 和 DAO 之间存在很大争议。许多开发人员交替使用术语“DAO”和“存储库”。我个人并没有深入参与这场辩论。我更喜欢专注于我的应用程序需求。

以下是数据访问层中使用的一些模式的非常粗略的描述:

工作单位:

  • 处理数据库连接和事务。
  • 另外处理缓存、批量查询、跟踪等。
  • 请参考这个答案。

存储库:

  • 可以使用UnitOfWork;不总是。
  • 不是每个表,而是每个聚合根。
  • 返回域对象;不是对象状态(实体/POCO)。
  • 请参考这个答案。另外,还有几个术语的其他答案。

DAO(数据访问对象):

  • 与数据库而不是业务逻辑紧密绑定。
  • 主要是与表格进行 1:1 映射。
  • 每个动作都是交易。
  • 返回对象状态(实体/POCO)。

CQRS(命令查询职责分离):

  • 使用与读取 (SELECT) 数据不同的模型来写入(INSERT、UPDATE、DELETE)数据。
  • 写操作包含在命令中。
  • 读取操作包含在查询中。
  • 每一层都可以针对特定需求进行独立优化。

查询对象:

  • 接受查询作为方法参数中的对象。

数据映射器:

  • 将 POCO/实体类与数据库行映射,反之亦然。
  • ORM(对象关系映射器)基于此模式。

活动记录:

  • 与实例相关的属性和方法位于同一个类中。
  • 映射发生在同一个类中。
  • 作用于单个记录。