【问题标题】:Where to put a helper class in a DDD architecture?在 DDD 架构中将帮助类放在哪里?
【发布时间】:2017-11-14 03:25:27
【问题描述】:

我已经阅读了similar question 中的答案,但我相信我的需求有所不同。

我的域层中有一个类A,它的一个方法getValue需要从文件中读取来获取某个值,所以我想创建一个帮助类来读取文件并保持getValue 尽可能干净和最小化。

由于我是第一次使用 DDD,并且基于我所掌握的浅薄知识,我认为辅助类可以放在域层中,因为它是要使用的地方。

将帮助类放在领域层是一个明智的选择吗?如果不, 有没有更好的符合 DDD 的解决方案?

【问题讨论】:

    标签: architecture domain-driven-design


    【解决方案1】:

    从文件读取数据应该在基础设施层以及与数据库、外部服务、与低级 API 的通信等工作。那是技术代码,而不是领域逻辑。它应该在那里。

    在 DDD 中,您可以使用服务来放置一些帮助代码,如果它当然是域逻辑而不是工厂。您还可以使用 Repository 对象在域层中创建接口并在基础设施层中实现。

    因此,您可以在 Domain 层创建 IMyDataRepository 接口,在 Infrastructure 层创建 MyDataRepository 类,在 Application 层解析依赖关系。

    【讨论】:

      【解决方案2】:

      我不建议接触域/聚合中的文件系统,因为它们应该是纯的。但是,如果您使用的是 CQRS+Event sourcing,那么您可以在读取端执行 IO,但要小心重放,因为应用程序状态必须随时可重建。

      如果您使用的不是 CQRS,而是某种分层架构,并且您必须执行 IO,那么您应该将依赖关系反转到基础架构(完成 IO 的地方)。为此,您可以在 Domain 层中定义接口,在 Infrastructure 层中定义实现。

      【讨论】:

      • 感谢您的回复,我也不喜欢我的域层与文件系统交互的想法,因为我有这个原则“我的域层必须以某种方式让我可以毫无问题地移动或分享它" 。所以我决定把这些值放在我的类而不是文件中。
      猜你喜欢
      • 2011-11-18
      • 2010-10-25
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多