代码之家  ›  专栏  ›  技术社区  ›  Byron Sommardahl

我的存储库是否有太多逻辑?

  •  1
  • Byron Sommardahl  · 技术社区  · 14 年前

    我有一个旧数据库,我的新应用程序必须与之交互。旧数据库过度规范化,总体设计不好。例如,我的域中的一个对象表示数据库中的五个表。我想保持我的域层没有遗留数据库中的工件。我在这里应该使用什么模式?

    乍一看,我想到了存储库模式。我将把我的对象传递给存储库,让它处理将数据拆分成五个表的问题。但是,有人建议必须完成的所有映射都会向存储库添加太多的逻辑。所以,IT仓库是个坏选择?我应该将存储库与其他模式(如适配器)一起使用吗?或者在这种情况下,知识库是正确的选择?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Derek Greer    14 年前

    存储库模式在这里是合适的,但是使用 Data Mapper 根据DANP的建议,将有助于坚持单一责任原则。nHibernate和Entity Framework等窗体通常有助于实现数据映射器的角色,但如果数据存储不利于使用ORM,则可以自行实现此逻辑。

    JeffMorris提供了一个在存储库模式上下文中使用数据映射器的非常好的示例。 here .

    不过,据记录,ORM的工作是将 object-relational impedance mismatch . 关系数据库模式在结构上通常与域模型不同。您的数据库可能由于其他原因设计得很差,但实体和表之间缺乏一对一关系本身不应该被理解为设计不良的一个指标。从DDD的角度来看,如果数据库被认为是应用程序域的持久性存储,那么数据库 可以 已经针对它所要服务的原始域进行了适当的规范化。

        2
  •  2
  •   DanP    14 年前

    我认为 Data Mapper 模式就是你想要的。顺便说一句,您可能会获得很多关于手工滚动数据访问的见解。 this series of posts Davy Brion。

    不过,我很感兴趣,为什么不考虑像NHibernate这样的东西,而不是自己去做那些肮脏的工作呢?

        3
  •  0
  •   Mike    14 年前

    网关模式有帮助吗?创建到旧数据库的网关。将所有转换逻辑置于网关中。