Mic*_*rdt 38
域模型(该术语根本不是特定于Java)是一个对问题域中的某些内容进行建模的类,而不是出于技术实现原因而存在的类.
域模型实例通常需要持久保存在数据库中,而在Java中,它们通常符合Java Beans规范,即它们具有表示单个属性和无参数构造函数的get和set方法.Spring和其他框架允许您直接在JSP中访问这些属性.
例如,在商店应用程序中,您的一些域模型类将是Product,Order,ShoppingCart和Customer.
小智 7
Michael Borgwardt的回答" 一个领域模型(这个术语根本不是Java特定的)是一个类 "是错误的.我很惊讶很多人同意这个答案.
域模型是模拟解决方案行为的所有类.这是完成所需行为的最低要求.域模型没有UI和持久性功能(除非问题围绕UI或持久性).
我已经看到在一个类中实现了域模型,但这不是面向对象解决方案的设计.在面向对象的域模型中,每个概念都有自己的类,该类实现该概念所需的行为,并包含维护类状态的必要字段.
让我们从一个例子开始。您正在创建的应用程序将被您当地的某些人使用。设计系统时,请称呼这些人为您的系统用户。您还必须管理这些人在系统中的角色列表和身份验证信息。因此,您决定在系统中创建一个概念实体。该概念实体进一步映射到软件解决方案(您的应用程序)中的User对象。现在,当您代表应用程序时,您可以将该用户对象描述为域模型。该术语背后的基本思想仅在于此。您可以在下面的Wikipedia链接中进一步了解它。
小智 5
我知道距离上次在这里发帖已经过去很长时间了。但重要的是,围绕这个概念的信息必须清晰。领域模型通常是代表特定问题域的一组类。该概念不与任何一种技术实现相关。我认为这样说有点误导:
“域模型实例通常需要保存在数据库中,并且在 Java 中,它们通常符合 Java Beans 规范,即它们具有代表单个属性的 get 和 set 方法以及无参数构造函数。Spring 和其他框架允许您直接在 JSP 中访问这些属性”
领域模型通常是领域驱动设计的结果。领域驱动设计是良好且稳健的领域模型的关键。我建议您阅读 Eric Evans 的《领域驱动设计》一书,以便您更好地理解。
领域模型类确实具有与其关联的信息,但在我看来,行为比这种情况下的数据更重要。领域驱动设计的一个大错误是创建代表域实体(例如客户)数据的数据类,并仅为客户属性提供公共 getter 和 setter。这些对象往往只是模仿您的数据库结构,因此实际的业务逻辑更有可能驻留在域服务中,从而导致域模型贫乏。该模型比域模型更接近 事务脚本。