首页 > 解决方案 > MVP 中的模型类只是 POCO(贫血域模型、DTO 或 VM)?它们应该是包含业务逻辑的实体对象吗?

问题描述

在以下示例中,模型文件夹下的类只是 POCO。(是 DTO 还是 VM?)

https://github.com/mrts/winforms-mvp

https://markheath.net/post/model-view-presenter-winforms

它们应该是包含业务逻辑的实体对象吗?业务/应用程序逻辑是否应该全部在演示者中?或者实体对象应该在MVP代码所依赖的一些核心模块中?

标签: .netdesign-patternsarchitecturedomain-driven-designmvp

解决方案


我认为最好记住,DDD 不仅仅是实现部分的一组战术模式,而是从诸如通用语言有界上下文之类的战略模式开始。另请参阅https://medium.com/@chatuev/ddd-for-microservices-4778a363c071

因此,DDD 首先是探索您的问题域,通过深入了解它,您可以更好地决定哪些实现模式适合系统的不同部分。然后,这可以是简单的CRUD 之类的实现,或者使用聚合、实体、存储库、值对象等遵循战术 DDD 模式。

它们应该是包含业务逻辑的实体对象吗?业务/应用程序逻辑是否应该全部在演示者中?或者实体对象应该在MVP代码所依赖的一些核心模块中?

如果您遵循领域驱动设计中的战术模式,那么消费者模型类应该包含业务逻辑。

所以考虑到这个示例项目中有业务逻辑,消费者将是一个所谓的贫血域模型,因为在这个版本中它只是一些没有逻辑的数据类。

如果根本没有复杂的业务逻辑,而是有大量的 UI 逻辑和 CRUD 之类的数据操作,那么遵循战术 DDD 原则可能是矫枉过正,额外的努力也不会得到回报。因此,在这种情况下,不可能有贫血的领域模型,因为根本就没有领域模型,而只有完全符合需求的 DTO 和视图模型类。


推荐阅读