在域驱动设计中应该有多少现实模型?

时间:2016-04-12 05:03:50

标签: domain-driven-design software-design

Eric Evans关于域驱动设计的书中写道:

  

领域建模不是将模型视为“现实”的问题   可能。即使在有形的现实世界中,我们的模型也是如此   人造创造。它也不仅仅是软件的构建   提供必要结果的机制。

现在我有两个问题:

  1. 是否应该设计模型 不知何故,它可以演变为更多 任何需要的逼真形状 在上一次迭代中没有触及核心模型?
  2. 如果上一个问题的答案是肯定的,我在哪里可以学习如何创建真实的核心模型?
  3. 如果对第一个问题的回答是可能的,那么有一天我们的模型会反映世界上的任何问题吗?

3 个答案:

答案 0 :(得分:5)

Domain Modelnot reflect real world。 它应该只根据上下文显示一个观点。

假设我们得到glass

  • 有人可能会想,这是一块玻璃,我们可以用水填充它。它使用to drink
  • 其他人可能会认为,这是一种产品,我们可以sell it
  • 另一个人可能会说,玻璃库存项目。我不在乎它是怎么样的,但我带到了how many眼镜。

根据具体情况,我们model glass differently。它仍然是相同的玻璃,但意味着别的东西。

您可以在Udi Dahan的博客上找到与该主题相关的所有信息 更多关于建模可靠性的主题,可以在Don’t try to model the real world, it doesn’t exist.

找到

答案 1 :(得分:2)

  
      
  1. 模型应该以某种方式设计,只要需要它就可以演变成更逼真的形状,而不会触及核心模型   上一次迭代?
  2.   

不,模型应该反映正在考虑的特定问题。如果基础问题发生变化,模型应该反映出来。假设您对酒店预订系统,仓库系统或商店销售点系统进行建模,您的模型应该是这些域中当前概念的表示以及它们之间的交互。模型不会随着时间的推移而变形。

  

2和3

没有

答案 2 :(得分:1)

在问题域中,有明显的事物和隐藏的东西。

如果您只是模拟明显的,明显的概念(无论是现实世界的对象还是无形的概念),为每个概念创建一个类,您将拥有逼真的模型,但它会忽略这一点。它不会是一个深刻,富有洞察力的领域模型。

要超越纯粹的现实主义,您应该与领域专家坐在一起,尝试发现问题空间中隐藏的内容,这些内容对解决方案空间有帮助 - 您的应用程序。

例如,与铁路交通专家交谈时,您可能会发现火车出发和到达的方式中的启发式或属性,甚至专家也没有意识到或者说过以前的名字。命名这些内容将允许您对其进行推理并最终在您的应用程序中对其进行操作。或者,你可能在房间里有一头大象 - 一个广泛使用的大型历史概念 - 并且决定从你无处不在的语言中拒绝它,因为它没有足够准确地描述问题的一个子部分。

现实在这里意味着与精炼,合理化相对,而不是完全构成