贫血模型 - DDD - The Domain Driven Design

栏目: 后端 · 发布时间: 5年前

内容简介:贫血模型Anemic Model是一种领域模型,其中领域对象包含很少或没有业务逻辑。这个模型最初由Martin Fowler描述,他认为这种做法是反模式。这种反模式的根本恐怖之处在于它与面向对象设计的基本思想相悖; 这是将数据和过程结合在一起。Vaughn Vernon,IDDD,2013年:

贫血模型Anemic Model是一种领域模型,其中领域对象包含很少或没有业务逻辑。这个模型最初由Martin Fowler描述,他认为这种做法是反模式。

这种反模式的根本恐怖之处在于它与面向对象设计的基本思想相悖; 这是将数据和过程结合在一起。

Vaughn Vernon,IDDD,2013年:

贫血领域模型每天都出现在我们行业的各个角落。问题是,大多数开发人员似乎认为这是完全正常的,并且不认识到在他们的系统上使用时会产生严重的副作用。这是一个真正的问题。

因为贫血模型中没有逻辑,因此,负责调用贫血模型的 客户端负责解释领域对象的用途和用途。通常,业务逻辑最终会在名为服务Services等其他类中实现,这些类会转换领域对象的状态。当然,这种方法会导致许多设计问题和缺点。贫血模型导致耦合的大服务

避免贫血领域模型的方法

  • 使用private setters.。如果让模型对象的属性直接由外部客户端直接定义,您将失去使用领域事件的机会,您将不得不在实体外的外部方法中验证您的实体。
  • 始终验证您的实体的状态,您的实体必须自我验证。
  • 避免没有参数的构造函数。当然,您的对象需要一些初始化数据来维持有效状态。
  • 领域服务被开发人员用作真正的银子弹,但最终成为贫血模型的最大原因。
  • 小心ORM,他们负责自动创建域对象,生成真正的公共setter和公共getter容器,这导致了一个贫血模型。
  • 不要使用事务脚本[EAA第110页的P]。
  • 使用OOP,当然程序编程比面向对象编程更容易,请记住正确使用OOP是对付贫血模型的一个很好的补救措施。

为什么人们喜欢贫血模型?

我们的许多行业都是由样本代码追随者组成的,但是,通常,示例代码专注于以最简单的方式演示某些概念,而不必担心良好的设计原则。

过度简化的示例代码(通常演示了几个getter和setter)每天都会被复制,而无需考虑项目。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web开发敏捷之道

Web开发敏捷之道

Sam Ruby、Dave Thomas、David Heineme Hansson / 慕尼黑Isar工作组、骆古道 / 机械工业出版社 / 2012-3-15 / 59.00元

本书第1版曾荣获Jolt大奖“最佳技术图书”奖。在前3版的内容架构基础上,第4版增加了关于Rails中新特性和最佳实践的内容。本书从逐步创建一个真正的应用程序开始,然后介绍Rails的内置功能。全书分为3部分,第一部分介绍Rails的安装、应用程序验证、Rails框架的体系结构,以及Ruby语言的知识;第二部分用迭代方式创建应用程序,然后依据敏捷开发模式搭建测试案例,最终用Capistrano完成......一起来看看 《Web开发敏捷之道》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试