什么是Java域模型?

什么是Java域模型?,java,domain-model,Java,Domain Model,我正在学习一本Spring书籍,他们提到Java域模型。 这是什么?域模型(这个术语完全不是Java特有的)是一个在问题域中建模的类,而不是一个出于技术实现原因而存在的类 域模型实例通常需要持久化到数据库中,在Java中,它们通常符合JavaBeans规范,即它们具有表示单个属性的get和set方法以及无参数构造函数。Spring和其他框架允许您直接在JSP中访问这些属性 例如,在商店应用程序中,您的一些域模型类将是Product、Order、ShoppingCart和Customer。a是问题

我正在学习一本Spring书籍,他们提到Java域模型。
这是什么?

域模型(这个术语完全不是Java特有的)是一个在问题域中建模的类,而不是一个出于技术实现原因而存在的类

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

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

a是问题域的概念模型。“java域模型”只是指表示该模型的java类。在这个概念中没有特定于java的东西


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

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

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

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


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

我知道自从上次在这里发帖以来已经很久了。但重要的是,有关这一概念的信息必须清楚。域模型通常是一组表示特定问题域的类。该概念与任何一种类型的技术实现无关。我认为这样说有点误导:

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

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


域模型类确实有相关的信息,但在我看来,在这种情况下,行为比数据更重要。关于域驱动设计的一个大错误是创建表示域实体(如customer)数据的数据类,并且只为customer属性提供公共getter和setter。这些对象往往只是模仿您的数据库结构,因此实际的业务逻辑更可能驻留在域服务中,从而产生一个新的应用程序。与域模型相比,此模型更接近于域模型

用外行的话说,域包是元素的对象表示,您主要但不一定需要呈现UI字段,如用户名、客户端信息、特定于解决方案的POJO等。域包中包含的类将用于DAO(数据访问对象)包中,dao将在其中查询数据库,映射域中类中的这些字段并返回它们。或者,您可以使用类似hibernate的框架并返回此对象,其中查询数据库将由类似hibernate的框架负责


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

外行眼中的“持久化数据库”是什么意思language@Name,这意味着它们比包含它们的应用程序实例更长寿。例如,商店应用程序关闭并重新启动后,它仍会将您识别为注册客户,并会记住您购物车的内容和您过去的订单。@Name:“persist”基本上是指“save”。“域模型”一词有不止一个定义。它可能意味着整个应用程序模型,或单个实体模型。这取决于上下文。