【问题标题】:Where i need to place code related to storing a entity in a domain driven design我需要在哪里放置与在域驱动设计中存储实体相关的代码
【发布时间】:2015-04-01 19:38:43
【问题描述】:

我正在尝试使用域驱动设计来设计应用程序,但我对实体数据的存储有疑问。首先,我正在创建一个实体并在该实体上应用业务规则。最后我想存储这些数据。我正在使用存储库模式来抽象数据库操作。现在我需要放置与将实体数据保存到数据库相关的代码。它在实体中吗?还是域服务?

【问题讨论】:

    标签: domain-driven-design ddd-repositories ddd-service


    【解决方案1】:

    与持久性相关的代码将进入基础架构层。我通常将它放在它自己的程序集中,并将我的存储库的具体实现注入我的应用程序层。

    您绝对不希望实体或域服务中有任何数据库代码。

    【讨论】:

    • 我还将与持久性相关的代码保留在基础设施层,即具体类中,并且我将这个具体类注入到域层中可用的接口中。所以有些地方我需要调用接口方法将数据保存到持久化中,我应该在哪里做,是在实体还是域服务或应用程序服务中。
    • 通常你会在你的应用层调用存储库方法。有时也来自您的域服务。不过,请避免从您的实体中执行此操作。
    • 我已经阅读了这篇文章“infoq.com/articles/ddd-in-practice”,他们提到我们应该将存储库注入域对象。
    • 管理域对象之间的依赖关系是开发人员经常遇到的经典问题。这个问题的通常设计解决方案是让 Service 或 Facade 类直接调用 Repository,并且在调用 Repository 时会将 Entity 对象返回给客户端。这种设计最终导致了前面提到的贫血领域模型,其中外观类开始积累更多的业务逻辑,领域对象成为单纯的数据载体。一个好的设计是使用 DI 和 AOP 技术将存储库和服务注入到域对象中。
    • 所有存储库检索/保存都应该发生在域服务或应用程序服务中。
    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多