我的同事和我在过去的 2 个小时里一直在讨论,试图找出最好的方法来设计我们新的在线商店处理客户购物篮的方面,但我仍然不确定我们是否已经完成一个很好的结论。
这听起来像是一个相当基本的问题,但我们发现实际上系统的不同部分之间存在大量的相互依赖关系。
部分(到目前为止!)是:
- 购物篮(跟踪客户选择购买的产品)。
- 交易(定义产品的促销活动,例如“以 20 英镑购买 3 个 x”或“购买 2 个 x 并获得 1 个免费”)。
- 低订单费用(在一定价值下,订单会增加额外费用)。
- 运费(基于一系列选项)。
- 代金券兑换。
- 客户信用(客户可能在其帐户上有信用,将从订单总额中扣除)。
我对所有这些对象相互交谈并从彼此获取价值,然后根据这些价值采取行动感到非常紧张。我想象它会变成一个庞大、复杂、无法维护的纸牌屋。
我确信让我的系统的不同部分直接相互交谈是不好的做法,更不用说允许他们改变彼此的状态(不管他们如何做到这一点),因为系统的部分最终依赖于其他部分在运行时处于不同的状态,如果它们都可以相互交谈,我不能确定某些东西没有改变我所依赖的其他东西。
但是有很多例子我看不到任何其他方式。例如:
- 当客户在购物篮中结账时,“买 X 送 Y”的交易需要将 Y 产品添加到购物篮中。所以交易有效地看起来和影响篮子。
- 确定是否应用低订购费是基于篮子中产品的价值,但在多买折扣之后(例如,3 代表 2 的价格)。因此,它需要查看篮子,同时还要考虑交易。
- 购物篮还需要在客户浏览网站时显示总价值,该总价值应考虑与产品相关的交易,但仅此而已。
我怎样才能做到这样的事情,而不是让自己陷入困境并编写可能以意想不到的方式影响大量其他代码的代码?