问题描述
在以下示例中,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和视图模型类完全可以满足需求。