在域驱动设计中将通用序列化 class 放在哪里?
Where to put general purpose serialization class in domain driven design?
我试图在我的设计中遵循 DDD 原则,并且我试图保持我的域实体清洁。我必须创建序列化器 class(它使用 json.net),但我不知道将它放在哪里。
我考虑了以下选项:
- 创建一个公用事业项目很容易,但它只会使洋葱长钉。
- 它有点类似于 Repositories,因为它包含实际的实现并具有依赖性(就像 repo 使用 EF),但它不存储对象,只是转换它。
- 它不是域服务,因为它不包含业务逻辑
- 把它放在外层,比如 Application 或 UI 对我来说意义不大。
这是我的项目结构:
网络
申请
域服务
存储库
域模型
如果您使用洋葱架构,则意味着您使用接口来避免从中间环到外部基础设施的硬依赖;并在 运行 时间注入实际实现。
序列化功能是一个基础设施问题,所以逻辑属于那里,但是从你的域层你针对它的接口进行编程,所以你不依赖于实际的序列化实现,这是整个想法洋葱架构:如果以后序列化方法发生变化,它只会影响基础设施层。
通用基础结构代码未在特定的物理或逻辑层中表示。相反,它可用于您的所有代码。
考虑您的 language/platform 标准库中的代码。它代表了随处可用的基础设施和功能代码。
"It is not a domain service, as it does not contain business logic"
域服务不包含业务逻辑。
您描述了一个复杂的技术 layer/tier "stack"。如果不能自圆其说,则不代表良好做法。
我试图在我的设计中遵循 DDD 原则,并且我试图保持我的域实体清洁。我必须创建序列化器 class(它使用 json.net),但我不知道将它放在哪里。 我考虑了以下选项:
- 创建一个公用事业项目很容易,但它只会使洋葱长钉。
- 它有点类似于 Repositories,因为它包含实际的实现并具有依赖性(就像 repo 使用 EF),但它不存储对象,只是转换它。
- 它不是域服务,因为它不包含业务逻辑
- 把它放在外层,比如 Application 或 UI 对我来说意义不大。
这是我的项目结构:
网络
申请
域服务
存储库
域模型
如果您使用洋葱架构,则意味着您使用接口来避免从中间环到外部基础设施的硬依赖;并在 运行 时间注入实际实现。
序列化功能是一个基础设施问题,所以逻辑属于那里,但是从你的域层你针对它的接口进行编程,所以你不依赖于实际的序列化实现,这是整个想法洋葱架构:如果以后序列化方法发生变化,它只会影响基础设施层。
通用基础结构代码未在特定的物理或逻辑层中表示。相反,它可用于您的所有代码。
考虑您的 language/platform 标准库中的代码。它代表了随处可用的基础设施和功能代码。
"It is not a domain service, as it does not contain business logic"
域服务不包含业务逻辑。
您描述了一个复杂的技术 layer/tier "stack"。如果不能自圆其说,则不代表良好做法。