【问题标题】:Where are order IDs allocated?订单 ID 分配在哪里?
【发布时间】:2010-08-03 16:05:52
【问题描述】:

抱歉这个幼稚的问题;我仍在努力理解 DDD。假设我有一个IOrderService。这是我有方法GetNewOrderID 的地方吗?或者,我想更笼统地说,在 DDD 场景中分配新订单的正确方法是什么?

【问题讨论】:

    标签: c# domain-driven-design


    【解决方案1】:

    除非我误解了 DDD,否则这不是一个幼稚的问题 - 相反,当不清楚责任在哪里时,则没有足够的域被调查/理解。比如:

    • 订单ID的格式是什么, 什么信息进入一个单一的 订单 ID。
    • 是否有要求 保存任何东西 一个新的 OrderID - 比如谁请求 它等等。
    • 有要求吗 请求但未使用的订单 ID 被释放?

    这些要求中的一项或多项可能会澄清情况。

    【讨论】:

    • 谢谢!假设订单 ID 是按顺序分配的,可能需要在请求订单 ID 时保存,并且不需要释放已请求但未使用的订单 ID。
    • 在这种情况下,根据您提供的信息,我会说是的,它可能是接口定义的方法,并在从接口继承的类中实现。同样,在我看来,DDD 是一种查看要开发什么的方式。然后使用良好的设计和 TDD 来确保以可测试的稳定方式实现。如果您想要一个序列号,那么应该集中处理(一项服务),以便处理多个用户。那么OrderID是否实际上是db中的标识列取决于系统设计。
    【解决方案2】:

    我喜欢听企业使用的话。例如,如果他们谈论目录订单和电话订单都是订单的来源,我可能有一个 OrderSource 或 IOrderSource 而不是 OrderService - 最后一个是 code-speak 而不是 business-speak。我可能有两种实现,或者只有一种使用标识符来表示“这是来自电话”,具体取决于流程的不同。

    如果业务人员谈论从他们的服务中获取 ID,那么是的,就这样做。更有可能的是,他们谈论从 OrderSource 接收订单,将其发送到仓库或创建 OrderForm 并接收 ReferenceNumber。这个 ReferenceNumber 很可能是主键,但它可能不是 Id。

    业务使用的语言可以指导您编写与其流程非常匹配的软件。使事情易于更改,并帮助您发现领域的某个方面是否可以使用一些学习。设计模式与您习惯的完全一样;如果业务有更好的条款,我只是不会在这些之后调用我的代码。看看 DDD 的通用语言,祝你好运!

    【讨论】:

      猜你喜欢
      • 2019-04-06
      • 2021-11-28
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 2012-10-31
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多