【问题标题】:Where to put general purpose serialization class in domain driven design?在领域驱动设计中将通用序列化类放在哪里?
【发布时间】:2016-07-31 07:58:54
【问题描述】:

我试图在我的设计中遵循 DDD 原则,并且我试图保持我的域实体干净。我必须创建序列化程序类(它使用 json.net),但我不知道把它放在哪里。 我考虑了以下选项:

  • 创建一个公用事业项目很容易,但它只会在洋葱中产生一个尖峰。
  • 它有点类似于存储库,因为它包含实际实现并具有依赖关系(就像 repo 使用 EF),但它不存储对象,只是转换它。
  • 它不是域服务,因为它不包含业务逻辑
  • 将其放入应用程序或 UI 等外层对我来说没有太大意义。

这是我的项目结构:

网络


应用


域服务

存储库


领域模型

【问题讨论】:

  • 它是基础架构的一部分(存储库和其他外部服务,如果您需要的话)
  • 我很确定,因为基础设施是最顶层(或环),层应该只使用它们下面的那些。也许如果我创建一个接口并将其放在应用程序核心的某个地方,并将实现放在可以工作的基础设施中。你怎么看?

标签: architecture domain-driven-design


【解决方案1】:

一般基础架构代码不在特定的物理层或逻辑层中表示。相反,它可用于您的所有代码。

考虑您的语言/平台标准库中的代码。它代表了随处可用的基础设施和功能代码。

“它不是域服务,因为它不包含业务逻辑”

域服务不包含业务逻辑。

您描述了一个复杂的技术层/层“堆栈”。如果不能证明其合理性,则不代表良好做法。

【讨论】:

    【解决方案2】:

    如果您使用洋葱架构,则意味着您使用接口来避免从中间环到外部基础架构的硬依赖;并且实际的实现是在运行时注入的。

    序列化功能是一个基础设施问题,所以逻辑属于那里,但是从你的领域层你可以针对它的接口进行编程,所以你不依赖于实际的序列化实现,这是洋葱架构的全部思想: 如果以后序列化方法发生变化,它只会影响基础设施层。

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      相关资源
      最近更新 更多