Domain driven design 创建概念域模型的方法

Domain driven design 创建概念域模型的方法,domain-driven-design,Domain Driven Design,我们正在尝试在我当前的项目中使用DDD技术,并且已经开始经历领域建模的过程,并且在“如何”创建领域模型方面遇到了很多摩擦。我还没有找到很多关于这个话题的例子 我们已经开始尝试通过与业务用户交谈来定义无处不在的语言,并给出一个域实体及其属性的列表。这进展得很顺利,但我们遇到了一些问题,比如: 行为、行动 权限 业务逻辑(如果attributeA=true,则为foo-else-bar) 我对如何捕捉所有这些不同的东西(序列图、用例、流程图等)有很多想法,但如果有一个正式的流程或一些资源提供示例

我们正在尝试在我当前的项目中使用DDD技术,并且已经开始经历领域建模的过程,并且在“如何”创建领域模型方面遇到了很多摩擦。我还没有找到很多关于这个话题的例子

我们已经开始尝试通过与业务用户交谈来定义无处不在的语言,并给出一个域实体及其属性的列表。这进展得很顺利,但我们遇到了一些问题,比如:

  • 行为、行动
  • 权限
  • 业务逻辑(如果attributeA=true,则为foo-else-bar)

我对如何捕捉所有这些不同的东西(序列图、用例、流程图等)有很多想法,但如果有一个正式的流程或一些资源提供示例驱动的指导,肯定会大大加快速度。

这是一个很好的问题

我通常采取的第一步是与一位(是的)领域专家会面,并从他们的角度对问题领域进行公开讨论。我带了大量的便利贴,确保我有足够的白板空间。正如专家所说,我试图用帖子在墙上画一个流程图或BPMN图。我发现给领域专家一些视觉上的东西是非常重要的,他/她可以指着这些东西说“不,那是错的!”(他们通常会这么做,很多次)

在这些对话中,我仔细聆听专家所说的话,并要求澄清存在歧义的地方。我总是发现,让无处不在的语言以这种方式自然出现,而不是试图强行建立它(我永远不会要求领域专家给我一个术语列表)

我试图用命令和事件来表达流程图——即使我最终没有使用CQR,我发现这自然会转化为更具体的需求。当流程图完成时(我通常可以这样说,因为专家看起来很满意——很有可能他/她从未见过以这种方式绘制的领域,并且他们经常对其新奇性感到兴奋),我开始通过流程图跟踪各个路线。通常,这些单独的路线可以很容易地表示为行为规范,即给定的
、何时的
样式要求。(见第3节)

一旦你有了一个
集合,当,然后是覆盖流程图中每一条路线的
时,你就有了足够的规范,可以在一个
有界上下文中开始域模型的设计阶段


我与其他领域专家重复这个过程。与后来的专家一起,我也会倾听语言和他们使用的术语之间的相关性。大多数情况下,不同的领域专家会共享通用语言中的术语,但含义略有不同。这表明我们正在处理不同的有界上下文。

请澄清。您可以通过一个UML风格的域模型来捕获无处不在的语言,该模型可以使用Post-It注释快速捕获。然后通过流程图捕获高层交互,并使用BDD gherkin风格的用例充实细节?如果是这样的话,你可以在流程图部分展开一点,像这样的东西的粒度的示例级别是什么,你会在什么级别上移动到gherkin?@RyanVice为了澄清,我只画了一个带有post its的图,它更接近流程图。我首先请领域专家描述他们的业务流程,然后尝试将他们所说的内容捕获为一系列事件和命令。99%的时间里,专家会描述常见场景(黄金路径)——形成一个非常简单的流程图。然后,我通过问一些“如果”的问题来挖掘隐藏的复杂性,这些问题揭示了边缘案例。当我的“如果”问题被茫然地盯着看时,我通常可以看出我变得太细了,好像我在说疯狂的话。