MVP中的模型类仅仅是POCO贫血域模型,DTO或VM?它们应该是包含业务逻辑的实体对象吗?

问题描述

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

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

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

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

解决方法

我认为,请记住,DDD不仅是实施部分的一套战术模式,而且还从诸如 Ubiquitous Language 等战略模式开始>和 边界上下文 。另请参见https://medium.com/@chatuev/ddd-for-microservices-4778a363c071

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

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

如果您遵循域驱动设计中的战术模式,则 Consumer 模型类应包含业务逻辑。

因此,考虑到此示例项目中存在业务逻辑, Consumer 将是本版本中所谓的 anemic domain model 它只是一些没有逻辑的数据类。

如果根本没有复杂的业务逻辑,而是有很多UI逻辑和CRUD(如数据操作),那么遵循战术DDD原理可能会过大,并且付出额外的努力也不会奏效。因此,在这种情况下,将没有 anemic 域模型,因为根本没有 domain模型,而只有DTO和视图模型类完全可以满足需求。