当前位置: 首页 > 编程学习 > 软件工程 > 领域驱动 > 正文

用DDD设计一个电商网站(八) 会员价的集成

2018-04-22 来源:博客园/Zachary_Fan

一、前言

前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念。会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是:

1.加大了运营的复杂度,会员价如何与促销结合,比如应在折前运用还是折后运用等。

2.如果是折前那么需要考虑满减类型促销的金额满足点门槛反而相对来说是提高了。

3.如果是折后那么享受了多重优惠,成本控制的时候需要考虑进去。

在我们这个练手的Demo中暂时决定让会员价在折后运用,并且仅在不满足满减促销的情况下才有效。

二、建模

那么开始先来建模,这次的会员价相对比较简单,一般就是一个打折率的问题。只要建立几个关系即可满足需求,如下:

会员与等级的关系(值对象):我认为等级的升级降级应该在“用户上下文”中处理,那么在这里的售价上下文中仅是对数据做的一个冗余,与“用户上下文”是一个最终一致性的关系。当然也可以不做这个冗余,从远程服务去获取,这可以根据实际情况来权衡。我认为用户等级的变化是一个非高频数据,所以在这里做冗余可以减少RPC次数。

等级与折扣的关系(值对象):这个数据应该是一旦确定就不大会变化了,并且会用于对外公示,毋庸置疑建立为值对象。如下图1所示:

【图1】

三、运用

先把上面定义的2个值对象数据来源确认一下,暂定把会员与等级的关系(UserRoleRelation)从用户上下文获取,因为我们还没开始引入最终一致性的概念;等级与折扣的关系(RoleDiscountRelation)存在本地上下文。那么这里第一次出现了在售价上下文中需要访问外部资源,我们也需要给其建立一个防腐层来处理这个RPC交互。既然如此和购买上下文一起,把防腐层放入到每个上下文的虚拟文件夹中,如下图2所示:

【图2】