粮食交付用例中的受限上下文

时间:2018-10-24 19:58:13

标签: domain-driven-design object-oriented-analysis

我正在与一个项目一起练习DDD,这是我与DDD的第一次互动。我有一个系统,该系统具有3种不同的用户,一个是厨师,一个是送货员,上是普通用户。厨师这个概念可以宣传他的食谱并接受订单。送货员是仅签约并仅能将食物运送到相应地址的用户,而普通用户是想要订购食物的用户。

据我了解,这三种用户属于3个不同的有界上下文,而不是诸如“用户管理”或“身份管理”之类的一个。如果我错了,有人可以纠正我吗?

1 个答案:

答案 0 :(得分:2)

没有更多的信息就很难说,但是这里有一些提示。

如果您正在考虑CRUD“有界上下文”,例如“用户”,“厨师”,“送货员”,那么几乎肯定是错误的。上下文不是“实体”的不是 CRUD服务,它们是功能的语义内聚单元。

这是一种思考问题的实用方法:如果两个有界上下文的消息双向流动,则它们可能不是良好的有界上下文。示例包括:获取用户/首席/交付数据(请求-响应),事件双向流动或双向同步。

这是另一种思考方式:即使其他有界上下文出现故障,有界上下文也应继续工作。 (它可能会慢慢过时,但可以继续工作。)

一些有界背景的想法

  • 搜索
  • 订购
  • 送货

Search用于浏览餐厅/厨师。注意,此东西不需要任何形式的通信。必要时会将数据推送到该数据,但是即使OrderingDelivery处于关闭状态,数据也将继续工作。

Ordering包含一些用户数据,例如帐单地址,信用卡或其他任何数据,但不是全部。例如,它不需要送货地址。订购完成后,只需将用户转发到Delivery。再次注意,即使SearchDelivery处于关闭状态也可以使用。

Delivery将具有用户的送货地址,并选择送货员,跟踪送货情况。再次注意:即使SearchOrdering处于关闭状态,这也可以使用。

很棒的事情是,这三个根本不需要任何直接通信。如果所有这些程序都是基于Web的,则只需将用户链接(重定向)到下一步,用户甚至都不会看到这些程序可能是不同的。

此样式实际上有一个名称,叫做Self-Contained Systems