分离持久化模型和领域模型
Separating persistence model and domain model
终于开始掌握领域驱动设计的窍门了,在我看来,将持久性模型 (PM) 与领域模型 (DM) 分开是有意义的。
- DM 包含工厂函数
- DM 包含在工厂函数中触发的事件
- DM 是不可变的(只能通过工厂创建)
由于从 PM 到 DM 的映射应该在存储库中完成并且 DM 应该是 不可变的 并且不知道 PM,我是否应该只创建一个工厂函数来获取所有参数但现在调用事件?
服务层使用工厂函数将DTO转换为DM,然后在任务完成时映射回DTO。
或者采用简单的方法,在 DM 中创建一个以 PM 作为参数的工厂函数,反之亦然?
我的解决方案是:从 DDD 换取一些纯度和清晰度,使设计更高效并降低复杂性。
服务层知道涉及的所有层:DTO、DM、PM 和存储库,因此它是进行各种转换的最佳位置。
在典型的流程中,假设您正在执行 API 调用,您将:
- 根据请求参数构造 DTO
- 通过将DTO转移到领域模型中的工厂方法来构建领域模型
- 将新的域模型传递到存储库以进行持久化(DM-to-PM 和 PM-to-DM 方法在存储库中)
- 将持久化域模型转换为 DTO 以传送回外层
终于开始掌握领域驱动设计的窍门了,在我看来,将持久性模型 (PM) 与领域模型 (DM) 分开是有意义的。
- DM 包含工厂函数
- DM 包含在工厂函数中触发的事件
- DM 是不可变的(只能通过工厂创建)
由于从 PM 到 DM 的映射应该在存储库中完成并且 DM 应该是 不可变的 并且不知道 PM,我是否应该只创建一个工厂函数来获取所有参数但现在调用事件?
服务层使用工厂函数将DTO转换为DM,然后在任务完成时映射回DTO。
或者采用简单的方法,在 DM 中创建一个以 PM 作为参数的工厂函数,反之亦然?
我的解决方案是:从 DDD 换取一些纯度和清晰度,使设计更高效并降低复杂性。
服务层知道涉及的所有层:DTO、DM、PM 和存储库,因此它是进行各种转换的最佳位置。
在典型的流程中,假设您正在执行 API 调用,您将:
- 根据请求参数构造 DTO
- 通过将DTO转移到领域模型中的工厂方法来构建领域模型
- 将新的域模型传递到存储库以进行持久化(DM-to-PM 和 PM-to-DM 方法在存储库中)
- 将持久化域模型转换为 DTO 以传送回外层