丰富域模型与贫乏域模型[关闭]

2024-04-18

我正在决定是否应该使用丰富域模型而不是贫乏域模型,并寻找两者的好例子。

我一直在使用贫血领域模型构建 Web 应用程序,并由服务-->存储库-->存储层系统,使用流利验证用于BL验证,并将我所有的BL放在Service层中。

我读过 Eric Evan 的 DDD 书,他(以及 Fowler 和其他人)似乎认为贫血领域模型是一种反模式。

所以我真的很想深入了解这个问题。

另外,我真的在寻找丰富域模型的一些好的(基本)示例,以及它提供的相对于贫血域模型的好处。


不同之处在于贫血模型将逻辑与数据分开。逻辑通常放置在名为的类中**Service, **Util, **Manager, **Helper等等。这些类实现数据解释逻辑,因此将数据模型作为参数。例如。

public BigDecimal calculateTotal(Order order){
...
}

而富域方法则通过将数据解释逻辑放入富域模型中来逆转这一点。因此,它将逻辑和数据放在一起,丰富的领域模型将如下所示:

order.getTotal();

这对对象的一致性有很大的影响。由于数据解释逻辑包装了数据(数据只能通过对象方法访问),因此方法可以对其他数据的状态变化做出反应 -> 这就是我们所说的行为。

在贫血模型中,数据模型无法保证它们处于合法状态,而在富域模型中则可以。丰富的领域模型应用面向对象的原则,例如封装、信息隐藏以及将数据和逻辑结合在一起,因此从面向对象的角度来看,贫血模型是一种反模式。

如需更深入的了解,请查看我的博客https://www.link-intersystems.com/blog/2011/10/01/anemic-vs-rich-domain-models/ https://www.link-intersystems.com/blog/2011/10/01/anemic-vs-rich-domain-models/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

丰富域模型与贫乏域模型[关闭] 的相关文章

  • 如何比较 Python 中的版本号?

    我正在遍历一个包含鸡蛋的目录 将这些鸡蛋添加到sys path 如果目录中有同一个 egg 的两个版本 我只想添加最新的一个 我有一个正则表达式r P
  • 使用 React JS 和 Laravel 处理多个图像上传

    我想通过reactjs中的axios将多个图像上传到数据库 将数据从客户端发送到服务器端 并在服务器端使用laravel处理图像上传 我的问题是 每当我尝试在服务器端处理多个图像时 它都不起作用 这是我的代码 客户端 ReactJS 建设者
  • select.select() 没有捕获套接字上的异常条件?

    Python 2 7 Windows XP 我有一个向客户端发送消息的服务器 我使用 select 模块来检查套接字是否准备好接收 以及捕获异常情况 我的印象是 如果客户端关闭了套接字 select 会在异常条件套接字列表中返回所述套接字
  • Firefox 与 Chrome 的 iMacros 对比

    哪种浏览器更适合使用 iMacros 我更喜欢跑得更快的 也尝试解释一下 如果这只是一个快速答案 请发表评论 我发现使用 iMacros 的 Firefox 比 Chrome 快得多 我 90 的任务都使用 Chrome 但在做一些宏观任务
  • 使用 sqlite3 驱动程序在 QSqlQuery 中使用多个 sql 语句

    我有一个包含多个 SQL 语句的文件 我想用它们来初始化新的 sqlite3 数据库文件 显然 sqlite3 仅通过以下方式处理一个查询中的多个语句 sqlite3 exec 函数 以及not通过prepare step finalize
  • Doctrine Paginator 选择整个表(非常慢)?

    这与之前的问题有关 Doctrine Symfony 查询生成器在左连接上添加选择 https stackoverflow com questions 39721673 doctrine symfony query builder add

随机推荐