结合电商支付业务,一文搞懂DDD
源 / 顶级程序员 文/
作者范钢,曾任航天信息首席架构师,《大话重构》一书的作者。本文结合电商支付场景详细描述了领域驱动模型的实际应用。
限时折扣
限量折扣
对某类商品进行折扣
对某个商品进行折扣
不折扣
开放原则:我们开发的软件系统,对于功能扩展是开放的(Open for Extension),即当系统需求发生变更时,可以对软件功能进行扩展,使其满足用户新的需求。
封闭原则:对软件代码的修改应当是封闭的(Close for Modification),即在修改软件的同时,不要影响到系统原有的功能,所以应当在不修改原有代码的基础上实现新的功能。也就是说,在增加新功能的时候,新代码与老代码应当隔离,不能在同一个类、同一个方法中。
在不添加新功能的前提下,重构代码,调整原有程序结构,以适应新功能; 实现新的功能。
真实世界有什么事物,软件世界就有什么对象;
真实世界中这些事物都有哪些行为,软件世界中这些对象就有哪些方法;
真实世界中这些事物间都有哪些关系,软件世界中这些对象间就有什么关联。
在用户下单以后,经过下单流程进入付款功能;
通过用户档案获得用户名称、地址等信息;
记录商品及其数量,并汇总付款金额;
保存订单;
通过远程调用支付接口进行支付。
该场景中有“订单”,每个订单都对应一个用户;
一个用户可以有多个用户地址,但每个订单只能有一个用户地址;
此外,一个订单对应多个订单明细,每个订单明细对应一个商品,每个商品对应一个供应商。
当“付款”发生变更时,“折扣”是不是一定要变?
当“折扣”发生变更时,“付款”是不是一定要变?
当“限时折扣”发生变更的时候,“限量折扣”是不是一定要变?
当“限量折扣”发生变更的时候,“某类商品的折扣”是不是一定要变?
……
对不同类型的 VIP 会员(金卡会员、银卡会员)进行不同的折扣;
在支付时,为 VIP 会员发放福利(积分、返券等);
VIP 会员可以享受某些特权。
“用户”发生变更时,“VIP 会员”是否要变;
“VIP 会员”发生变更时,“用户”是否要变。
“用户”要做的是用户的注册、变更、注销等操作;
“VIP 会员”要做的是会员折扣、会员福利与会员特权;
而“付款”与“VIP 会员”的关系是在付款的过程中去调用会员折扣、会员福利与会员特权。
当支付宝支付接口发生变更时,影响的只限于支付宝 Adapter;
当微信支付接口发生变更时,影响的只限于微信支付 Adapter;
当要增加一个新的支付方式时,只需要再写一个新的 Adapter。
好文推荐
公司起诉技术总监索赔 90 万元,称其拖延研发进度
网传京东某程序员因压力太大,在商品页面置入骂人代码!京东辟谣:不关我们的事,外部商家干的!
某大厂程序员炫耀:来新加坡后,每天最多工作五六个小时,家庭年收入150万人民币,已躺平!
一键三连「分享」、「点赞」和「在看」
技术干货与你天天见~
评论