领域驱动和O2O电商的养成记
如果无法正常显示,请先停止浏览器的去广告插件。
1. 领域驱动与O2O电商的养成记
猫眼娱乐
王洋
2. 今天 讨论什什么
✦ 统⼀一语⾔言的养成
✦ 分层框架的设计和实践
✦ 限界上下⽂文的提取
✦ 系统之间的组织⽅方式
✦ 业务演进带来的⽭矛盾点
✦ DDD实施的难点
3. ⾯面临的问题
⼈人员变动
产品
沟通效率低
概念混乱
运营
⾼高并发问题
代码臃肿
⽤用户
业务专家?
关系复杂
需求变化快
可靠性问题
商家
缺乏共识
⽼老老板
⽀支撑功能被遗忘
突发性需求
商务
财务
客服
4. 统⼀一语⾔言的养成
运营
产品
1.收集
代⾦金金券、通兑券、选座券
美团券、卖品券、演出券
异业券、电影兑换券
2.分类
5.推⼴广
技术
交易易过程减钱
资⾦金金优惠-XX券
代⾦金金券、通兑券、
选座券、异业券
3.定义
代⾦金金券、通兑券、
选座券、异业券
4.归档
术语字典
消费兑换-XX码 消费过程兑换物品
美团消费码
卖品消费码
演出兑换码
电影兑换码 美团券、卖品券
演出券、电影兑换券
改名
5. 分层框架的养成
http请求
模型转换层
接⼊入(Provider)
任务(Task)
消息、定时任务
业务流程层
rpc请求
公共流程(Biz-share)
业务(Biz)
业务2
核⼼心服务层
知识
沉淀
领域服务(Service)
基础数据层
领域模型(Domain)
数据库(Dao)
⼯工具(Common)
扩展点,可随时拆分
接⼝口合集
接⼝口(Export)
接⼝口2
6. 寻找问题域的数据实体
程序=算法+数据,找到⾏行行为源头的数据实体
提交订单
查询商品 锁库存
商品列列表 库存
计算价格
保存数据
商品快照
商品
售价*份数
⾮非独⽴立实体
促销
优惠券
限购
会员
订单
付款明细
7. 限界上下⽂文的提取
利利益相关⽅方的关注点统⼀一,供应链上下⽂文
运营
商家
商家
商务
合同
1
促销活动
产品
代⾦金金券
采购单
付款单
⽤用途的等同性,资⾦金金优惠上下⽂文
结算单
1
会员
价格
1
限购
商品快照
订单
1
1
财务
礼品卡
资⾦金金流
财务
问题的内聚性,账务上下⽂文
付款明细
存在性关系,订单上下⽂文
⽤用户
8. 域内的组织⽅方式
⼀一、业务⾏行行为可收敛,变化主要围绕“数据”
组合规则
⽣生产
发放
计算
展示
业务规则
单类型规则
数据⾃自封装
横向扩展
代⾦金金券
通抵券
异业券
限购
促销活动
礼品卡
会员
⼆二、数据存储可收敛,变化主要围绕⾏行行为
资⾦金金事件
交易易
消费
资⾦金金流
退款
横向扩展
⽤用户查询 ⽤用户视⻆角
财务 公司视⻆角
结算 商家视⻆角
9. 域内的组织⽅方式
三、数据、⾏行行为不不规则的变化
交易易
消费
流程组合控制器器
消费码
同步流程可扩展
计价
⻛风控
锁库存
⽀支付成功模板
★ 更更新核⼼心主库
★ 更更新美团数据
★ 通知扣减资源
★ 回调出券流程
……
物流
消费流程
异步流程可扩展
下单模板
★ 写核⼼心主库
★ 推数据到美团
★ 多维度索引
虚拟币
……
接单
任务编排
写模型
拆单
⽀支付
任务引擎
美团订单中⼼心
查模型
订单核⼼心 订单中⼼心
Mafka CQRS
ES
10. 核⼼心数据的设计
《聚合根》
订单
orderId:long
total:int
status:int
……
《实体》
资⾦金金明细
orderId:long
total:long
promotion:long{
maoyan:long
merchant:long
}
coupon:long
……
《实体》
订单明细
《实体》
商品快照
orderId:long
productId:int
quantity:int
……
值对象
Price
《实体》
订单详情 《实体》
订单列列表
orderId:long
userId:long
…… userId:long
orderId:long
……
《实体》
商品信息
《实体》
⽀支付信息
《实体》
消费码
分表维度
关联信息
11. 膨胀的⽭矛盾体
1、更更细的粒度,订单上下⽂文hold不不住
消费码1
out_Id:123
con_code:11111
status:已消费
订单
虚拟币
order_id:123
status:?
…… out_Id:123
coin_num:100
con_num:50
资⾦金金明细 消费记录
消费码2
out_Id:123
con_code:22222
status:已退款
order_id:123
total:100
cost:50
refund:50
con_id:321
con_num:50
……
2、资⾦金金明细不不只局限在交易易环节
12. 膨胀的⽭矛盾体
增加账务上下⽂文,为关联的上下⽂文定义独⽴立的流⽔水类型
消费码1
虚拟币
订单
out_Id:123
con_code:11111
status:已消费
order_id:123
status:?
……
消费流⽔水
消费码2
out_Id:123
con_code:22222
status:已退款
退款流⽔水
财务视⻆角
out_Id:123
coin_num:100
con_num:50
交易易流⽔水
资⾦金金流⽔水
type:交易易流⽔水
out_id:123
amunt:100
type:消费流⽔水
out_id:321
amount:50
……
消费记录
消费流⽔水
con_id:321
con_num:50
……
商家视⻆角
13. DDD实施的难点
✦ DDD的收益如何评估
✦ 问题⼦子域—研发梯队—组织架构
✦ 快速迭代中的知识积累
✦ 技术团队的业务sense
✦ 交付压⼒力力带来的技术债
14. Q&A