领域驱动设计中的模型应该有多现实?
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.
现在我有两个问题:
- 要不要设计一个模型
不知何故,它可以进化成一个更
任何时候需要的逼真形状
在上一次迭代中没有触及核心模型?
- 如果上一个问题的答案是肯定的,我在哪里可以学习如何创建逼真的核心模型?
- 同样,如果第一个问题的答案是可能的,那么有一天我们的模型会反映世界上的任何问题吗?
- 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] =].
在 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.
现在我有两个问题:
- 要不要设计一个模型 不知何故,它可以进化成一个更 任何时候需要的逼真形状 在上一次迭代中没有触及核心模型?
- 如果上一个问题的答案是肯定的,我在哪里可以学习如何创建逼真的核心模型?
- 同样,如果第一个问题的答案是可能的,那么有一天我们的模型会反映世界上的任何问题吗?
- 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] =].