【问题标题】:Mapping objects between the domain and database在域和数据库之间映射对象
【发布时间】:2014-11-07 13:29:08
【问题描述】:

在数据库对象和域对象之间进行映射时,该功能应该驻留在我的应用程序的哪个“层”?

说我有:

  • DAL - 引用了核心域
  • Service - 引用了 DAL 和核心域

在这种情况下,映射放在哪里更合适?

【问题讨论】:

    标签: n-tier-architecture


    【解决方案1】:

    在这种情况下,您的 DAL 将是一个好地方,因为它已经引用了您的核心,您的域实体应该存在于其中。它可以获取数据,并在返回之前将其转换为域对象。

    这样可以将DB对象的知识封装到DAL层,这是一件好事。如果你需要改变你的数据库,你只需要修改这个层。应用程序的其余部分只知道域。

    【讨论】:

    • 我相信这个解决方案更适合我的架构。我的核心域为我的 UI 和 DAL 实现的存储库和服务定义了接口。如果您愿意,它是端口和适配器模式或洋葱架构的实现。
    • 是的,根据您的描述,我了解到您的架构更像是洋葱架构,而不是传统的 n 层。此解决方案允许您将具体实现的知识从应用程序的核心中抽象出来。
    【解决方案2】:

    如果你想遵循一层只需要知道下一层的原则(想法来自Law of Demeter),最佳实践是将翻译代码放在服务层中。

    但是,由于核心域可以被认为是服务和数据访问层中间的另一层,并且考虑到服务层直接与 DAL 对话(打破 LoD 原则),可能是更简单、更实用的解决方案(正如@wblanks 所说)可能是将翻译代码放在数据访问层中。

    【讨论】:

    • 虽然我同意并尝试遵守 LoD,但考虑到两层都知道核心域(用于实体和存储库的接口定义),这仍然适用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2021-02-03
    • 2019-04-15
    • 2012-07-18
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多