【发布时间】:2011-06-22 06:29:00
【问题描述】:
我正在学习一本 Spring 书籍,他们提到了 Java 域模型。
那是什么?
【问题讨论】:
标签: java domain-model
我正在学习一本 Spring 书籍,他们提到了 Java 域模型。
那是什么?
【问题讨论】:
标签: java domain-model
用外行的话来说,你的域包是元素的对象表示,你主要但不一定需要渲染 UI 字段,如用户名、client_info、解决方案特定的 pojos 等。域包中包含的类将在 DAO 中使用(DATA ACCESS OBECT) 包,dao 将在其中查询数据库并将这些字段映射到域中的类中并返回它们。或者您可以使用 hibernate 之类的框架并返回此对象,其中查询数据库将由 hibernate 之类的框架负责。
这个答案更特定于 MVC 和 java,但详细说明了其中一种可能的实现。
【讨论】:
我知道距离上次发帖已经很久了。但重要的是,围绕这个概念的信息是明确的。域模型通常是一组代表特定问题域的类。该概念不依赖于任何一种类型的技术实现。我认为这样说有点误导:
"域模型实例通常需要保存在数据库中,而在 Java 中,它们通常符合 Java Beans 规范,即它们具有表示单个属性的 get 和 set 方法以及无参数构造函数。 Spring 和其他框架允许您直接在 JSP 中访问这些属性"
领域模型通常是领域驱动设计的结果。领域驱动设计是良好且健壮的领域模型的关键。我建议阅读 Eric Evans 的《领域驱动设计》一书,以便更好地理解。
领域模型类确实有与之相关的信息,但在我看来,在这种情况下,行为比数据更重要。领域驱动设计的一个大错误是创建表示领域实体数据的数据类,例如客户,并且只为客户属性提供公共 getter 和 setter。这些对象往往只是模仿您的数据库结构,因此实际的业务逻辑更有可能驻留在域服务中,从而产生anemic domain model。这个模型比域模型更接近Transaction Script。
【讨论】:
Michael Borgwardt 的回答“域模型(该术语根本不是 Java 特定的)是一个类”是错误的。我很惊讶这么多人同意这个答案。
域模型是对解决方案行为建模的所有类。这是完成所需行为的最低要求。域模型没有 UI 和持久性功能(除非问题围绕 UI 或持久性)。
我看到域模型在一个类中实现,但这不是面向对象解决方案的设计。在面向对象的领域模型中,每个概念都有自己的类,该类实现该概念所需的行为,并包含维护类状态所需的字段。
【讨论】:
让我们从一个例子开始。您正在创建一个应用程序,您所在地区的某些人将使用该应用程序。在设计系统时,您将这些人称为系统的用户。您还必须管理系统中这些人的角色列表和身份验证信息。因此,您决定在系统中创建一个概念实体。此概念实体进一步映射到您的软件解决方案(您的应用程序)中的用户对象。现在,当您表示您的应用程序时,您将该用户对象描述为域模型。这个术语背后的基本思想是仅此而已。您可以在以下Wikipedia link 中进一步了解它。
【讨论】:
Domain model 是问题域的概念模型。 “java 域模型”只是指代表该模型的 java 类。概念中没有特定于 java 的内容。
另请参阅Domain Driven Design,了解将您的开发重点放在业务领域需求的方法。
【讨论】:
域模型(该术语根本不是 Java 特定的)是对问题域中的某些事物进行建模的类,而不是出于技术实现原因而存在的类。
领域模型实例通常需要保存在数据库中,而在 Java 中,它们通常符合 Java Beans 规范,即它们具有表示单个属性的 get 和 set 方法以及无参数的构造函数。 Spring 和其他框架允许您直接在 JSP 中访问这些属性。
例如,在商店应用程序中,您的一些域模型类将是 Product、Order、ShoppingCart 和 Customer。
【讨论】: