数据建模和领域建模有啥区别?
Posted
技术标签:
【中文标题】数据建模和领域建模有啥区别?【英文标题】:What's the difference between Data Modelling and Domain Modelling?数据建模和领域建模有什么区别? 【发布时间】:2011-03-31 06:38:50 【问题描述】:顺便说一句 - 关于数据建模,我指的是逻辑或概念数据模型 - 而不是物理模型。
这个问题是在工作讨论中提出的;我自然而然地跳到***来获得一些基本定义 - 希望他们可以澄清差异 - 但他们没有......
概念架构或概念数据模型是概念及其对应关系的映射 关系。
逻辑数据模型看起来非常相似(根据这个定义):
系统中的逻辑数据模型 (LDM) 工程是一个代表 组织的数据,组织在 术语实体和关系和 独立于任何特定数据 管理技术。
在哪里……
领域模型,或领域对象模型 (DOM)解决问题和软件 工程可以被认为是 系统的概念模型 描述各种实体 参与该系统及其 关系。
领域模型与概念数据模型之间的差异似乎特别模糊。
增加这种混乱的一件事是(据我所见)域模型通常使用 UML 类图建模 - UML 类图中的类实体支持方法 - 我们的同事坚持认为域模型不能包含“操作”。我可以使用 UML 类图的子集来理解领域建模者 - 但假设人们使用的工具支持“操作”时会避免包含“操作”,这不是很危险吗?
【问题讨论】:
【参考方案1】:我会说域模型描述了给定域上的问题(我们想要管理/解决的问题)。数据模型将描述域模型上描述的问题的解决方案(我们将如何解决它)。
然而,我们确实是在浑水...
【讨论】:
我假设当您说“数据模型将描述解决方案”时,您只是从数据的角度来看 - 是吗? @Adrian 是的。数据存储和数据流。【参考方案2】:好问题,问题在于这取决于术语的定义,我认为它们会根据来源略有不同。 我同意之前的回答 - 域模型用于描述问题域,至少是您开发解决方案所需的部分。你描述了所有不同的实体、它们的关系和它们的行为。我认为这也是从领域驱动设计角度的观点。 另一方面,数据模型用于描述系统中的数据以及它们之间的关系或关联。这对于描述需要存储在系统中的内容很有用,也可能会给出提示。我认为数据模型将适用于您的“无操作”规则,因为它们在这方面并不重要。
【讨论】:
我认为我们都清楚数据模型的全部含义 - 对我来说,域模型的歧义是:它应该描述“操作”吗?如果它只包含实体之间的关系——那么不同的领域模型有何不同?仅仅是域模型捕获的不仅仅是数据吗? 域模型与数据模型非常不同。正如我所说,它还描述了行为 - 操作。但是,它们的设计甚至可能有所不同。域模型根据实际情况捕获域(受实现该域模型的系统上下文的限制)。另一方面,数据模型应该针对数据存储和检索进行优化,这可能会导致抽象与现实不相符。我建议您在域驱动设计的上下文中阅读更多关于域模型的信息,例如:infoq.com/minibooks/domain-driven-design-quickly【参考方案3】:领域建模(在领域驱动设计的意义上)就是对领域概念的行为建模,而数据建模主要关注...数据。
这并不意味着领域建模忽略数据结构。它只是更加强调操作以及如何使用它们来解决问题。
我对领域驱动设计领域建模技术了解不多,但 DDD 还涉及(除了建模数据和行为)一致性边界(聚合)的显式建模。
【讨论】:
是的,我也是这么想的,所以我假设我的同事关于将操作排除在域模型之外的立场是有缺陷的 (?) - 至少从 DDD 的角度来看是这样。 @AdrianK 是的,从 ddd 的角度来看,这是一种称为贫血模型的反模式。 @AdrianK 我仍在阅读应用 UML 和模式,但 Larman 还故意将操作排除在域模型之外,然后将操作添加到基于域模型的图表中(两者都是类图)。而且我确信这本书并不提倡贫血模型。【参考方案4】:这是一个旧线程,但这里有一个稍微改进的答案,以澄清此处发布的其他一些问题。
“领域”的概念(以及其他类型的模型,如概念、逻辑和物理)与用于表示模型的技术(例如 ERD、UML 等)是正交的。领域模型本质上与概念模型相同,但不同的设计方法可能具有略微不同的术语和定义。虽然使用 UML 或 ERD 绘制域模型来描述实体及其关系(或 UML 中的类/方法)很常见,但这仅适用于对系统管理的信息进行建模 - 从逻辑上讲,域建模的概念(或概念建模、逻辑建模或物理建模等)可以应用于任何问题情况和解决方案。根据问题的性质和解决问题的方法,可以使用其他建模技术来实现相同的目标。
简而言之,领域建模和概念建模本质上是一回事,撇开复杂的定义不谈。该概念适用于建模者试图传达的。数据建模(即 ERD)或面向对象的建模(即 UML)的概念是指建模者如何进行通信。
【讨论】:
以上是关于数据建模和领域建模有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章