领域驱动设计中的模型应该有多现实?

How much realistic should be a model in domain driven design?

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

Domain modeling is not a matter of making as “realistic” a model as possible. Even in a domain of tangible real-world things, our model is an artificial creation. Nor is it just the construction of a software mechanism that gives the necessary results.

现在我有两个问题:

  1. 要不要设计一个模型 不知何故,它可以进化成一个更 任何时候需要的逼真形状 在上一次迭代中没有触及核心模型?
  2. 如果上一个问题的答案是肯定的,我在哪里可以学习如何创建逼真的核心模型?
  3. 同样,如果第一个问题的答案是可能的,那么有一天我们的模型会反映世界上的任何问题吗?
  1. Should a model be designed somehow that it could evolve to a more realistic shape whenever NEEDED without touching the core model in previous iteration?

不,模型应该反映正在考虑的特定问题。如果潜在问题发生变化,模型应该反映出来。假设您要为酒店预订系统、仓库系统或商店销售点系统建模,您的模型应该代表这些领域中的 current 概念以及它们之间的交互他们。模型不会随着时间的推移而版本化。

2 and 3

没有

Domain Model 应该 not 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.

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

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

为了超越单纯的现实主义,您应该与领域专家坐在一起,尝试发现问题中隐藏的东西 space 这将有助于解决方案 space - 您的应用程序。

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

现实这里的意思是相对于提炼、合理化,而不是完全虚构[=24] =].