37

我正在研究一本 Spring 书籍,他们提到了 Java 域模型。
那是什么?

4

6 回答 6

41

域模型(该术语根本不是 Java 特定的)是一个对问题域中的事物进行建模的类,而不是出于技术实现原因而存在的类。

领域模型实例通常需要保存在数据库中,而在 Java 中,它们通常符合 Java Beans 规范,即它们具有表示单个属性的 get 和 set 方法以及无参数的构造函数。Spring 和其他框架允许您直接在 JSP 中访问这些属性。

例如,在商店应用程序中,您的一些域模型类将是 Product、Order、ShoppingCart 和 Customer。

于 2011-02-06T13:58:26.340 回答
9

域模型是问题域的概念模型。“java 域模型”只是指代表该模型的 java 类。这个概念中没有什么特定于 java 的。

另请参阅领域驱动设计,了解将您的开发重点放在业务领域需求上的方法。

于 2011-02-06T14:00:41.593 回答
7

Michael Borgwardt 的回答“域模型(该术语根本不是 Java 特定的)是一个类”是错误的。我很惊讶这么多人同意这个答案。

域模型是对解决方案的行为进行建模的所有类。这是完成所需行为的最低要求。域模型没有 UI 和持久性功能(除非问题围绕 UI 或持久性)。

我已经看到在一个类中实现了域模型,但这不是面向对象解决方案的设计。在面向对象的领域模型中,每个概念都有自己的类,该类实现该概念所需的行为,并包含维护类状态所需的字段。

于 2011-10-29T01:14:57.973 回答
5

让我们从一个例子开始。您正在创建一个应用程序,您所在地区的某些人将使用该应用程序。在设计系统时,您将这些人称为系统的用户。您还必须管理系统中这些人的角色列表和身份验证信息。因此,您决定在系统中创建一个概念实体。此概念实体进一步映射到您的软件解决方案(您的应用程序)中的用户对象。现在,当您表示您的应用程序时,您将该用户对象描述为域模型。该术语背后的基本思想是仅此而已。您可以在以下Wikipedia 链接中进一步了解它。

于 2011-02-06T14:09:13.997 回答
4

我知道距离上次发帖已经很久了。但重要的是,围绕这个概念的信息是明确的。域模型通常是一组代表特定问题域的类。该概念不依赖于任何一种类型的技术实现。我认为这样说有点误导:

"领域模型实例通常需要保存在数据库中,而在 Java 中,它们通常符合 Java Beans 规范,即它们具有表示单个属性的 get 和 set 方法以及无参数构造函数。Spring 和其他框架允许您直接在您的 JSP 中访问这些属性

领域模型通常是领域驱动设计的结果。领域驱动设计是良好且健壮的领域模型的关键。我建议阅读 Eric Evans 的《领域驱动设计》一书,以便更好地理解。

领域模型类确实有与之相关的信息,但在我看来,在这种情况下,行为比数据更重要。域驱动设计的一个大错误是创建表示域实体数据的数据类,例如客户,并且只为客户属性提供公共 getter 和 setter。这些对象往往只是模仿您的数据库结构,因此实际的业务逻辑更可能驻留在域服务中,从而导致领域模型贫乏。这个模型比领域模型更接近 事务脚本。

于 2013-08-24T22:07:25.607 回答
0

用外行的话来说,你的域包是元素的对象表示,你主要但不一定需要渲染 UI 字段,如用户名、client_info、解决方案特定的 pojos 等。域包中包含的类将在 DAO(DATA ACCESS OBECT) 包,dao 将在其中查询数据库并将这些字段映射到域中的类中并返回它们。或者你可以使用像hibernate这样的框架并返回这个对象,查询数据库将由像hibernate这样的框架负责。

这个答案更特定于 MVC 和 java,但详细说明了一种可能的实现。

于 2019-05-13T07:34:14.750 回答