让我从1000英尺的视野开始。
这是典型的电子商务结帐流程,其中多种类型的客户可以通过多种渠道下订单。 pic-1的大多数网站都是渠道-移动/站点/客户服务/销售点/ 3rdParty和更多自定义渠道。订单可以使用不同类型的运送方式运送-
每个客户都有一套不同的验证和业务规则来下订单。他们还具有不同级别的业务流程来调用规则/服务,例如,客户服务将通过直接调用placeOrder收集那里系统和下订单的所有数据。在线/移动电话将呼叫创建/更新和下订单。与从站点/移动设备下的订单相比,客户服务部门还希望以不同的顺序执行业务规则。 POS还具有一组不同的规则,希望以不同的顺序调用验证链或规则。例如,以下是每个客户端/渠道的不同规则/功能-
客户服务
在线
移动订单
鉴于这类订单和规则很少,但实际上,有很多业务规则。 问题如下图所示。
我们有多个微服务很好,但是结帐流程代码非常单一,成千上万的if / else条件调用了多个方法链,这引起了太多混乱,因为在任何地方我们都基于客户/渠道/订单类型/运输方法等。所有内容都落在“单一立面”层上,该层具有1000行的方法,如果没有,则具有多个行。
我建议一种设计,其中每个客户端将具有自己的外观层,该外观层将由基于FrontFacade(路由网关)的通道/客户端调用。每个客户特定的外观都可以编排和定义自己的特定规则,并以自己定义的顺序执行它们。将有单独的层,其中包含客户端不可知的验证和规则,任何客户端都可以调用该规则。
我正在寻找对此的评论/评论/建议,以定义更好的方法来清晰地分离,执行和清除代码,而不干扰其他业务规则/验证等。
注意:除3rdPaties以外,所有其他团队将为该结帐流程提供编写代码,而一个核心团队将定义所有通用规则/验证/持久性/下游连接等。