数据建模和领域建模有什么区别?

42

顺便提一下——关于数据建模我指的是逻辑或概念性的数据模型,而不是物理模型。

这个问题在工作中的讨论中被提出;我自然而然地跳到维基百科上获取一些基本定义,希望它们可以阐明差异,但是它们没有...

概念模式或概念数据模型是一个概念和它们之间关系的映射。

从这个定义来看,逻辑数据模型似乎非常相似:

系统工程中的逻辑数据模型(LDM)是组织数据的表示形式,按实体和关系组织,并且独立于任何特定的数据管理技术。

相比之下...

在问题解决和软件工程中,领域模型或领域对象模型(DOM)可以被视为描述系统中所涉及的各种实体及其关系的概念模型。

领域模型与概念数据模型之间的区别似乎特别模糊。

其中一件事情增加了这种混淆,就是(据我所见)领域模型通常使用UML类图进行建模——UML类图中的类实体支持方法——我们的同事坚持认为领域模型不应包含“操作”。我可以理解领域建模者使用UML类图的子集,但是如果他们正在使用的工具支持它,那么假设人们会避免包含“操作”是危险的,不是吗?

4个回答

18

很好的问题,但问题在于它取决于术语的定义,我认为根据不同的来源会有些微的差异。

我赞同之前回答中所说的——领域模型用于描述问题领域,至少是你需要开发解决方案的部分。你描述了所有不同的实体,它们之间的关系以及它们的行为。我认为这也是领域驱动设计视角的观点。

另一方面,数据模型用于描述系统中的数据以及它们之间的关系或关联。这对于描述需要存储在系统中的内容以及可能如何存储非常有用。我认为数据模型适用于你提到的“无操作”规则,因为在这方面它们并不重要。


我认为我们都清楚数据模型的含义 - 对我来说,不确定性在于领域模型:它应该描述“操作”吗?如果它只包含实体之间的关系 - 那么它与领域模型有什么不同?难道领域模型仅仅捕捉比数据更多的东西吗? - Adrian K
2
领域模型与数据模型非常不同。正如我所说,它还描述了行为 - 操作。然而,它们在设计上可能甚至不同。领域模型根据现实情况捕获领域(由将实现该领域模型的系统的上下文限制)。另一方面,数据模型应针对数据存储和检索进行优化,这可能导致抽象而没有与现实对应的内容。我建议您在领域驱动设计的上下文中阅读更多关于领域模型的信息,例如在此处:http://www.infoq.com/minibooks/domain-driven-design-quickly - Gabriel Ščerbák

14

在领域驱动设计中,领域建模是关于建模领域概念的行为,而数据建模主要关注...数据。

这并不意味着领域建模忽略了数据结构。它只是更加强调操作及如何使用它们来解决问题。

我对除领域驱动设计以外的领域建模技术了解不多,但DDD除了建模数据和行为外,还涉及显式建模一致性边界(聚合)。


是的,这也是我想到的,所以我认为我的同事在将操作留出领域模型方面的立场可能是错误的,至少从DDD的角度来看是如此。 - Adrian K
1
@AdrianK 是的,从领域驱动设计的角度来看,这是一种被称为贫血模型的反模式。 - Casper Leon Nielsen
@AdrianK 我还在阅读《应用UML和模式》,但Larman也有意将操作从领域模型中排除,并且后来在基于领域模型的图表中添加了操作(两者都是类图)。我相信这本书并不主张贫血模型。 - Piovezan

5
这是一个旧帖子,但这里有一个稍微改进的答案,以澄清其他人发布的一些内容。
“领域”(以及其他类型的模型,如概念、逻辑和物理)的概念与用于表示模型的技术(例如ERD、UML等)是正交的。领域模型本质上与概念模型相同,但不同的设计方法可能具有略有不同的术语和定义。虽然使用UML或ERD绘制领域模型以描述实体及其关系(或在UML中的类/方法),这仅适用于对系统管理的信息进行建模 - 从逻辑上讲,领域建模(或概念建模、逻辑建模或物理建模等)的概念可以应用于任何问题情况和解决方案。根据问题的性质和解决问题的方法,可以使用其他建模技术来实现相同的目标。
简而言之,领域建模和概念建模本质上是相同的,除了吹毛求疵的定义。该概念适用于建模者要传达的内容。数据建模(即ERD)或面向对象建模(即UML)的概念是指建模者如何传达它。

2
我认为领域模型描述了给定领域中要管理/解决的问题。数据模型将描述如何解决领域模型中描述的问题。
然而,我们确实处于不确定的境地...

我猜当你说“数据模型将描述解决方案”时,你只是指从数据角度来看 - 是吗? - Adrian K
@Adrian 是的。数据存储和数据流。 - Rui Curado

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