本片随笔仅记录自己目前对DDD的理解与实践,后续会持续关注DDD,持续更新
1. DDD是什么
DDD是领域驱动设计的简称,那什么是领域呢,领域就是业务,比如,制药领域,金融领域,电商领域等等,各个领域有各个规则,复杂的规则如何应对呢,想到一个关键字那就是分治思想
。领域再大都可以拆分成小子域,如同递归思想,单独求解汇总解决复杂问题
2. 怎么拆?战略设计和战术设计
2.1 战略设计
可以理解为上帝视角看待软件系统,划分出核心域,支撑域,定义一些通用的语言
召集产品,开发人员,测试人员,领域专家,进行开会,用例分析,用户实际故事,讨论总结提炼出领域的知识,简历实体模型,达成描述一致性,包括功能,目标,范围等等
举例:如跨境汇款领域
子域和统一语言:订单,付款,兑换,交割,汇率,货币对,国家,交割,充值,等等。
如核心域的汇款,支撑汇款的有付款,兑换,交割
界限上下文
如汇率和兑换的界限,汇率与渠道方的界限,区分出这些界限
上下文映射
合作关系,共享实体,下游客户依赖上游供应方,各行其道,上下文的防腐层也很关键
分层架构
API:为用户服务
APP:编排组织领域模型,互相协作
Domain:表达业务概念,状态,规则
Infrastructure:持久化,文件读写,调用邮件等
2.2 战术设计
侧重于如何设计编码并实现项目目标
实践中的问题
- 由于后续需求过多,新加入的开发人员对DDD理解不够深刻,看到很多术语和概念,即可打退堂鼓,导致很多后加的需求功能并非完全DDD,
- DDD在建模要花费大量人员的时间经历,付出与收益不成正比,后续迭代的功能慢慢腐败了。