0

我正在尝试基于现有的基于 C# WinForm 的系统对我的域进行建模,以提高我对 DDD 的学习,因此我整理了一个假设的概念模型来简化问题。系统本身没有一个典型的业务域,其中有很多逻辑混入到实体框架对象中,这些对象在系统的各个方面都被使用。我觉得这是一个大泥球(BBOM)。

我在工作中处理了一些 DDD 概念,但我想提高我的整体理解。我通读了 Evans 的蓝皮书“领域驱动设计:解决软件核心的复杂性”和 Scott Millets 的“领域驱动设计的模式、原则和实践”。以及观看有关该主题的无数视频,以及 Vaughn Vernon 的文章。我觉得这些年来我做了更多的数据驱动开发,这需要很长时间才能融入其中。

所以假设的系统是一个严格的质量控制系统,用于构建产品,它松散地遵循我所做的系统。

这是概念模型:

概念模型

现在我看到了 3 个部分 - 不一定是有界上下文,但我正在努力确定这些有界上下文所在的位置。

业务流程分为3个部分:

  1. 定义产品

为此,“用户”将输入包括名称在内的各种产品信息。作为其中的一部分,他们定义了产品应该是什么厚度以及它是由什么材料制成的。他们还将定义构建器需要使用什么过程来构建产品。它们还定义了是否需要进行外观检查和质量检查。

  1. 构建产品

作为该过程的一部分,“建造者”将组装产品。但这仅限于建筑商的资格。Builder 符合基于厚度范围和材料的工艺的资格,因此业务规则仅允许选择 Builder,如果他们有资格获得介于工艺厚度范围和材料之间的产品厚度。

  1. 检查

产品构建完成后,即可对其进行检查。作为其中的一部分,根据是否需要外观检查或质量检查类型,最新合格的“检查员”将能够检查产品。他们将通过或不通过检查。

作为这些流程的一部分,产品的状态将被更新。这将是:

  • 未组装
  • 组装好的
  • 部分检查(已完成两项检查之一)
  • 通过检查(所有检查完成)
  • 检查失败(任何检查失败)

以下是有关域外系统的一些信息,需要深思熟虑:

  • 该系统被设计为一个多用户,可以同时输入检查
  • 可能在产品上输入的数据不正确,可以更正,这可能会使任何输入的构建和检查数据无效
  • 然后将输入的数据用于各种报告中。

所以我需要一些想法:

  1. 我的限界上下文在哪里。
  2. 如何为我的聚合根建模 - 哪些数据应该是根以及我应该包含哪些实体/值对象。

    我是否只在有界上下文中包含我需要的域对象的数据 - 即不完全水合域对象。

  3. 如何通过流程的不同部分实现一些计算状态的东西。

  4. 如何处理数据输入错误的可能性以保持域数据正确。

我对任何存储库实现不感兴趣,只对纯领域概念感兴趣,尽管我们应该为每个有界上下文坚持什么的问题会对我有所帮助。

我担心有多个用户输入数据以保持产品状态的数据一致

4

1 回答 1

1

您应该考虑的一件事是,在您拥有一个有用的初始工作域模型之前忽略 DDD,尤其是当您的域很小时。忘记聚合和有界上下文。像许多人一样,您将 DDD 的这些“构建块”视为工作应用程序的“基本部分”。他们不是......你的域模型是。

考虑默认情况下,您不需要有界上下文、聚合、域事件、服务、存储库或工厂。这些都是仅在必要时应用的概念。

您知道如何将领域模型转变为可工作的应用程序吗?让我知道我是否可以提供帮助。

于 2016-04-17T09:19:58.887 回答