什么是领域模型?

41

我已经阅读了维基百科上关于领域模型的定义,但我仍然不理解。我一直在阅读很多有关NHibernate的文章,几乎每篇文章中都出现了领域模型这个术语。它到底是什么,有没有人能举个例子来说明领域模型。

7个回答

54
基本上,它是您业务目的所需的对象的“模型”。例如,如果您正在制作销售跟踪网站,则可能会有客户、供应商、交易等类。所有这些类以及它们之间的关系构成了您的Domain Model

13
谢谢您没有在定义中使用该短语:“领域就是问题领域”,那完全没有帮助。您的回答正是我所需要的。 - James Sumners

32
领域模型是领域中真实情况对象的可视化表示。 领域是一个关注点。它用于指代你正在处理的领域。 该模型是一个图表,对于领域模型,类图UML被广泛使用。类图仅用于符号表示。 领域模型这个术语并不意味着一组描述软件类的图表。 例如,想象一个商店。为该商店构建一个全新的销售点系统(我们称之为POS系统)。 POS系统是一种计算机应用程序,用于记录销售和处理付款。因此,您将专注于POS系统的领域。 现在,您将概念化将用于此系统的对象。 因此,您将获得Sale、Payment、Register、Item等对象。 在领域模型中,您对这些对象进行建模,并绘制它们之间的关联,以便您可以高层次地了解此系统的工作原理。 POS领域模型的示例如下:

enter image description here


2
你做得很好。领域实际上是我们正在解决的问题,建模是更高级别对象的抽象表示以及它们之间的关联。 - Sandeep Khantwal

27
如果您将程序的GUI和DBMS剥离,用命令行界面和MySQL服务器实例替换它们,然后将整个程序迁移到一个具有不同系统调用和文件系统访问API调用的不同平台,那么在此过程中没有更改的部分就是域模型。

3
这篇文章可能会对您有所帮助:

https://dddcommunity.org/learning-ddd/what_is_ddd/

基本的想法是,领域就是问题领域,而模型是它的模型。上述文章比我更优雅地表达了这一点,如果您想深入了解,那里还有许多其他资源。

1
从Eric Evans的《领域驱动设计:软件核心复杂性应对之道》一书的角度回答: 领域模型是描述领域的选定方面的抽象系统,可用于解决与该领域相关的问题。实际上,这意味着以下内容。输入端有领域专家、领域知识源以及软件产品的需求。建模意味着引出与正在开发的软件相关的领域知识的相关部分,并以某种方式表示它。如果我理解作者正确的话,模型可以用许多方式表示:作为文本、图表、代码、口头交流形式等。模型与迭代式软件开发并行更新,为软件开发的需要进行重构。
因此,领域模型是与给定软件开发项目相关的领域知识的选择性和结构化表示。

太好了!谢谢你阐明这一点。我正要在这里提出一个关于DDD中领域模型的问题,但你已经回答了我的问题。 - Raghave Shukla

1
领域模型是一组准确地模拟特定业务领域的结构。简单来说,它包含实体、枚举、值对象、异常/自定义异常、接口、服务等构造,全部都代表着该领域模型。任何能够对业务领域描述产生影响的内容,都会被包含在其中。另一方面,不参与该描述的构造,如UI代码、基础设施相关的代码、持久化对象、各种工具等,则被视为DDD背景下的第三方/外部关注点。
请查看本短文。

https://fiseni.com/posts/what-is-a-domain-model/


1
在简单明了的语句中,我可以这样说:
领域模型是对领域的抽象,以代码实现的形式表达出来,它是业务用例的视图而不是现实。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接