简介: DDD是一套方法论,实践能否成功,不仅仅是个技术问题,更是执行贯彻实施的问题。本文将就DDD的基本概念和DDD的实施进行分享。
作者 | 侧帽
来源 | 阿里技术公众号
供应链商品域DDD实践时间不长,在实践过程也碰到了不少问题,有些找到了答案,有些还是在探索中。最近很荣幸受邀在供应链服务与创新团队做了一次分享,也想在这里把一些经验和想法分享给大家,借此抛砖引玉。
DDD是一套方法论,实践能否成功,我觉得不仅仅是个技术问题,更是执行贯彻实施的问题。
本文内容主要有两部分,DDD基本概念和DDD实施。基本概念包括通用语言、分层架构、DDD要素、边界上下文,DDD实施包括领域知识提取方法、思考方式的转变,在其中会穿插一些商品案例。
在开始DDD前,我们应该先回答的一个问题,我们为什么需要DDD?DDD是复杂软件应对之道,所以我们来一起看看,软件的复杂度到底在哪里?
在阿里两年,我感受很深的一个点是,我们不能持续交付不断演进的复杂软件,所以有1.0、2.0、3.0很多的版本,1.0搞不下去了,开始2.0,2.0也搞不下去了,开始3.0,不断循环。
阿里体系复杂度我看来是理解力、不可预测、协作力挑战三个方面。
DDD设计合适的领域模型来映射现实中的业务,来有效地解决领域中的核心的复杂问题,是对OOAD的扩展和延伸,其解决之道:
通用语言是提炼领域知识的产出物,获得统一语言就是需求分析的过程,也是团队中各个角色就系统目标、范围与具体功能达成一致的过程。
领域语言团队专有,负责解释和维护,相同名称概念,跨出这个团队,理解可以完全不一样。
领域专家、产品经理、开发人员共同的语言,这种语言是将领域专家和技术人员联系在一起的纽带。
在各种文档和平时沟通中,保持概念统一,特别提一下,做一个中文对照, 把概念和代码连接起来,在代码做到概念名称统一,减少混淆。
通用语言价值:
DDD第二个核心是分层架构,分离模型。优秀的架构应该是什么样子?关注点是分离的,可以分而治之,可测试性好。
一个人同时要做多件事情的时候,难免手忙脚乱。代码也一样,一段代码要处理各种事情的时候,也会乱成一团,所以我们要分解开来,各个击破。
商品域领域模型,在分层架构中的位置,如下:
1)实体:有id,有生命周期和状态。有属性,有行为。外部事件会触发他的行为和状态变化。
实体和vo的区分,vo属性不能修改,使用final修饰。vo为表达模型减负,如商品有100多个属性,铺平开不能体现结构化,不能体现分层分类,将相似描述性属性分组封装成一个个vo。
2)为什么需要service,如批量操作多个实体、跨实体操作,如商品复制,转账。
商品域的工程架构:
上下文映射:
领域知识有分层分类,平台通用商业规则,是领域模型主要输入,商家个性化不能下沉到领域模型层。
两阶段分析:用户故事、链路和边界分析。
通过这个分析,获取用户需求,和全链路分工。
领域驱动,在模型阶段不会关注数据设计、不会关注存储、不会关注消息怎么发,业务和技术视角关注点做了分离。
商品域工程架构:
最后,保持模型不断演进!!!
商品域模型更新readme,保持模型不断演进。否则会APP层会越来越大,模型层越来越小,最后头重脚轻,领域坍塌了。
原文链接
本文为阿里云原创内容,未经允许不得转载。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章