马丁·福勒将贫血领域模型视为反模式。
将持久性模型作为领域模型也似乎严重偏差,因为存在对象关系不匹配。出于持久性和规范化的考虑,我们倾向于将类分解成非常小的部分,对这些类施加方法是愚蠢的。此外,持久性很少改变,但业务逻辑会发生相当大的变化。
因此,我们需要一个建立在持久性模型之上的领域模型(而不是相同的模型)。该领域模型将包含业务逻辑属性和方法。
但现在这些领域模型仍然在服务后面,为了将它们暴露给外部世界,我们需要将它们转换为DTO。
我们在进行如此多的映射。
所有这些问题,重复验证逻辑的问题仍然存在,因为客户端需要实时验证。ViewModel 对验证一无所知,因此在 SPA 中,您被迫再次重写验证逻辑(通常使用 JavaScript 在客户端上)。
此外,服务本质上是无状态的(消息或 RPC 导向),因此我们在持久性、面向对象、过程化之间进行所有这些映射,有何好处?在大多数 IT 预算的实际术语中,您如何证明成本的合理性?
我了解完整的 DDD,包括聚合根、领域模型等,会很“酷”,但您如何证明成本和开发生产率的影响?
“反模式(或反模式)是社交或商业操作或软件工程中使用的一种模式,可能在实践中常用,但实际上是无效和/或具有反生产力的。”
如果是这样,那么 DDD 和 Rich Domain Model 是否符合上述反模式定义,而不是“精益”域模型。抱歉,我厌恶这个带有偏见的词,“贫血”。
通过保持领域模型的"精简",您实际上可以在不违反"抽象依赖原则"、"不要重复自己"以及耗时、繁琐和容易出错的数据映射过程中共享它,并且无需编写与之相关的单元测试(除非您想进行无单元测试的映射并希望取得良好效果)。
将持久性模型作为领域模型也似乎严重偏差,因为存在对象关系不匹配。出于持久性和规范化的考虑,我们倾向于将类分解成非常小的部分,对这些类施加方法是愚蠢的。此外,持久性很少改变,但业务逻辑会发生相当大的变化。
因此,我们需要一个建立在持久性模型之上的领域模型(而不是相同的模型)。该领域模型将包含业务逻辑属性和方法。
但现在这些领域模型仍然在服务后面,为了将它们暴露给外部世界,我们需要将它们转换为DTO。
我们在进行如此多的映射。
- 持久性到领域模型
- 将领域模型转换为DTO以在服务之间传递
所有这些问题,重复验证逻辑的问题仍然存在,因为客户端需要实时验证。ViewModel 对验证一无所知,因此在 SPA 中,您被迫再次重写验证逻辑(通常使用 JavaScript 在客户端上)。
此外,服务本质上是无状态的(消息或 RPC 导向),因此我们在持久性、面向对象、过程化之间进行所有这些映射,有何好处?在大多数 IT 预算的实际术语中,您如何证明成本的合理性?
我了解完整的 DDD,包括聚合根、领域模型等,会很“酷”,但您如何证明成本和开发生产率的影响?
“反模式(或反模式)是社交或商业操作或软件工程中使用的一种模式,可能在实践中常用,但实际上是无效和/或具有反生产力的。”
如果是这样,那么 DDD 和 Rich Domain Model 是否符合上述反模式定义,而不是“精益”域模型。抱歉,我厌恶这个带有偏见的词,“贫血”。
通过保持领域模型的"精简",您实际上可以在不违反"抽象依赖原则"、"不要重复自己"以及耗时、繁琐和容易出错的数据映射过程中共享它,并且无需编写与之相关的单元测试(除非您想进行无单元测试的映射并希望取得良好效果)。