前言
供应链商品域DDD实践时间不长,在实践过程也碰到了不少问题,有些找到了答案,有些还是在探索中。最近很荣幸受邀在供应链服务与创新团队做了一次分享,也想在这里把一些经验和想法分享给大家,借此抛砖引玉。
DDD是一套方法论,实践能否成功,我觉得不仅仅是个技术问题,更是执行贯彻实施的问题。
本文内容主要有两部分,DDD基本概念和DDD实施。基本概念包括通用语言、分层架构、DDD要素、边界上下文,DDD实施包括领域知识提取方法、思考方式的转变,在其中会穿插一些商品案例。
一 软件复杂性是什么?
在开始DDD前,我们应该先回答的一个问题,我们为什么需要DDD?DDD是复杂软件应对之道,所以我们来一起看看,软件的复杂度到底在哪里?
在阿里两年,我感受很深的一个点是,我们不能持续交付不断演进的复杂软件,所以有1.0、2.0、3.0很多的版本,1.0搞不下去了,开始2.0,2.0也搞不下去了,开始3.0,不断循环。
阿里体系复杂度我看来是理解力、不可预测、协作力挑战三个方面。
1 理解力挑战
- 需求规模庞大,业务数量和类型不断增多,业务相互耦合,不同业务相互影响。供应链有20多个行业,经销、代销、一盘货等各种商业模式,有跨境进口、国内业务、国际化业务,这些纵横导致系统复杂度大幅提升。
- 业务系统多,边界划分不清,系统间依赖复杂。如供应链商品和共享SELL、AIC和IPM,一直都有边界问题,一个大项目过来,边界问题就得讨论上好几天。
- 系统结构复杂,因为应对高并发、高稳定性等,功能性代码与非功能性代码混合,如业务代码混杂着各种兜底逻辑、灰度逻辑、重试等等,100行代码,可能业务代码不到30行。
2 不可预测性挑战
- 商业环境复杂多变,商业流程、规则多变。商业环境变化快,今年国际化、智能商业路由、考拉融合一下子都来了,在设计上很难前期都规划好。
- 变化不可预测,软件系统变化也不可预测,带来设计挑战。 <