基于多个渠道/客户的折射器整体代码

时间:2019-02-17 08:29:41

标签: design-patterns architecture e-commerce broadleaf-commerce pos

让我从1000英尺的视野开始。

这是典型的电子商务结帐流程,其中多种类型的客户可以通过多种渠道下订单。 pic-1的大多数网站都是渠道-移动/站点/客户服务/销售点/ 3rdParty和更多自定义渠道。订单可以使用不同类型的运送方式运送-

  • Premium / Standard / Regular / NoHurryShipping / SameDayDelivery
  • 商品可以是小商品(牛仔裤/ T恤/鞋子等)或大商品 (床/沙发/床垫等)。 订单类型也可以是多种类型-常规订单/ BuyOnlinePickInStore / BuyOnLineShipToStore
  • 多种付款方式(现金/信用卡(第3方CC /私人级别 卡)/ G-Pay / Apple-Pay / PayPal / GiftCard /数字-挣的钱)

每个客户都有一套不同的验证和业务规则来下订单。他们还具有不同级别的业务流程来调用规则/服务,例如,客户服务将通过直接调用placeOrder收集那里系统和下订单的所有数据。在线/移动电话将呼叫创建/更新和下订单。与从站点/移动设备下的订单相比,客户服务部门还希望以不同的顺序执行业务规则。 POS还具有一组不同的规则,希望以不同的顺序调用验证链或规则。例如,以下是每个客户端/渠道的不同规则/功能-

客户服务

  • 他们可以免除/更新任何物品的数量
  • 免税规则
  • 额外折扣
  • 可以申请客户服务的专业促销活动,即免税- 运输费用。
  • 仅接受付款-CC /礼品卡
  • 更多业务规则。

在线

  • 可以有小型/大型订单
  • 接受所有类型的招标的付款-CC / GC / Paypal / G-Pay / Apple-Pay等。
  • 仅在线促销代码。

移动订单

  • 可以有小型/大型订单
  • 接受所有类型的招标的付款-CC / GC / Paypal / G-Pay / Apple-Pay等 仅在线促销代码。
  • 特定于移动设备的促销代码,例如首次移动应用程序下载
  • 基于位置

鉴于这类订单和规则很少,但实际上,有很多业务规则。 问题如下图所示。 Current design

我们有多个微服务很好,但是结帐流程代码非常单一,成千上万的if / else条件调用了多个方法链,这引起了太多混乱,因为在任何地方我们都基于客户/渠道/订单类型/运输方法等。所有内容都落在“单一立面”层上,该层具有1000行的方法,如果没有,则具有多个行。

我建议一种设计,其中每个客户端将具有自己的外观层,该外观层将由基于FrontFacade(路由网关)的通道/客户端调用。每个客户特定的外观都可以编排和定义自己的特定规则,并以自己定义的顺序执行它们。将有单独的层,其中包含客户端不可知的验证和规则,任何客户端都可以调用该规则。

我正在寻找对此的评论/评论/建议,以定义更好的方法来清晰地分离,执行和清除代码,而不干扰其他业务规则/验证等。

注意:除3rdPaties以外,所有其他团队将为该结帐流程提供编写代码,而一个核心团队将定义所有通用规则/验证/持久性/下游连接等。

Proposed new design

0 个答案:

没有答案