在域驱动设计中将通用序列化类放在何处?

时间:2016-04-10 07:12:49

标签: architecture domain-driven-design

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

  • 创建一个实用程序项目很容易,但它只会刺穿洋葱。
  • 它有点类似于存储库,因为它包含实际的实现并具有依赖性(如repo使用EF),但它不存储对象,只是将其转换。
  • 它不是域服务,因为它不包含业务逻辑
  • 将它放入外层,如应用程序或用户界面对我来说没有多大意义。

这是我的项目结构:

网络

应用

DomainServices

存储库

的DomainModel

2 个答案:

答案 0 :(得分:2)

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

序列化功能是一个基础设施问题,因此逻辑属于那里,但是从您的域层开始,您可以针对其接口进行编程,因此您不依赖于实际的序列化实现,这是洋葱架构的全部概念:如果稍后序列化方法发生更改,则只影响基础架构层。

答案 1 :(得分:1)

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

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

  

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

域服务不包含业务逻辑。

您描述了一个复杂的技术层/层"堆栈"。如果它不合理,那么它并不代表良好的做法。