Martin Fowler认为贫血域模型是一种反模式。丰富域模型和ORM
由于Object Relational Impedence Missmatch由于域模型滚动持久性模型似乎也被严重关闭。对于持久化和标准化来说,我们倾向于将课程拆分为非常小的小部分,在这些课程之上掌握方法是愚蠢的。加持久性很少改变,但业务逻辑改变了一点点。
所以我们需要一个建立在持久化模型上的DomainModel(而不是一个也是一样的)。此域模型将包含业务逻辑属性和方法。
但是现在这些领域模型仍然落后于服务,为了将它们暴露给外部世界,我们需要将它们转换为DTO。
我们在这里这样做曼尼映射。
- 余辉域模型
- 要域模型转换为DTO的,以服务
它并没有结束之间传递下去,因为DTO可能需要映射到视图模型。
所有这一切以及重复验证逻辑的问题仍然没有消失,因为客户端需要实时验证。 ViewModel对验证一无所知,因此例如在SPA中,您不得不在客户端重新编写验证逻辑(通常使用javascript)。
服务本质上是无状态的(消息或RPC导向),所以我们正在做所有这些映射,在持久性到OO之间,然后返回到Procedural,到什么好处?您如何证明大多数IT预算的实际成本?
我知道如何让DDD,Aggregate Roots,Domain Models等成为“酷”,但您如何证明成本和对开发效率的重视?
反模式(或反模式)是社交或商务 操作或软件工程中的一个模式是可以共同使用,但 无效的和/或反作用于实践
如果是这样,DDD和Rich Domain Model不会比“精益”域模型适合上面的反模式定义。对不起,我鄙视加载的单词“贫血”。
通过保持领域模型“精益”,您实际上允许在不违反“抽象依赖性原则”,“不重复自己”以及映射一个数据的耗时,乏味和容易出错的过程中共享它载体到另一个,以及任何与之相关的单元测试(除非你正在考虑映射没有单元测试并希望最好)。
我认为你链接的文章总结了困境。除了我不相信通过网络发送域模型,这似乎是DTO的工作。在DTO上进行行为并将其展示给客户是没有意义的。所以对我来说,除了他提到的3之外,架构只有“另一层抽象和映射”才是可行的。这是一个映射!不是说为了重用而向用户界面引入UI关注的另一种方式是正确的。我认为在两极分化之间存在一个“幸福”媒介。 – Alwyn
“少移动数据,事情可能变得更简单” - 他在文章最后的结论,对我来说听起来像是精益模型。 – Alwyn
“在DTO上进行行为并将其展示给客户端是没有意义的 - 现在我理解您在富/贫域模型和分层之间建立的连接。你是否暗示应该从尽可能多的业务逻辑中剥离域对象,以便直接将它们发送到UI层而不需要DTO?还是你说的其他东西是“精益模型”? – guillaume31