业务价值/资产价值
技术债务(+业务价值、-资产价值)
过度设计(+业务价值、++资产价值)
资产 vs 债务
x-时间 y-效率
领域资产越来越多
技术债务越来越多
资产复用、质量提升、迅捷响应、数据洞察
资产分类:技术资产、通用领域资产、业务领域资产
使用范围、资产价值、数据沉淀
领域资产是最合适的资产粒度
隐喻
领域资产:可以很容易被业务领域使用、可以支持定制化扩展点、质量可靠
领域资产:被集成、被扩展、被信赖
领域资产应该被作于子域来做的、契约、演进
关键实践一、通过划分子域,提炼领域资产
领域资产来自于子域
关键实践二、用契约描述资产能力和约束
契约涉及权利、义务
关键实践三、保持领域资产的持续演进
保持资产演进
2、演进式设计是软件开发活动的本质
划分子域,商品为例:推荐列表、商品详情、入口等,商品领域
演进式设计:勇气和谦卑——敢于在信息不完全时做出决策
问题域的渐进认知
能力的持续提升
避免过度设计
设计就是最大可能的猜想
演进式设计:勇气和谦卑——相信未来一定会变化,为变化做好充分准备
自动化测试
演进式设计:勇气和谦卑——始终假定自己可能不正确,并使用各种机会检验
场景:需求分析、代码实现、
领域模型 <—> 用例场景 : 统一语言
3、遗留资产的共存与改进
遗留资产:
- 遗留资产充斥着技术债务
- 接口不清楚,边界模糊,副作用未知
- 代码理解困难,修改可能导致不可预知的副作用
- 往往缺乏自动化测试
对待遗留资产的 3 种态度:
- 破窗效应
- 激进变革(隐含了大量业务知识,需要大量投入,风险高、回报不明显)
- 渐进重构(代码互相缠绕、补充测试困难、很难找到入手点)
对待遗留资产的第 4 种态度:业务价值 < 实现业务价值 < 我有一些资产
对待遗留资产的四种基本实践:
- 使用防腐层(新增消费者测试)
- 在遗留资产上包装并暴露 API(自动化测试)
- 找到遗留资产的接缝,进行扩展(继承、组合)
- 绞杀者模式——细节遗留资产的边界,进行逐步替代(自动化测试)
绞杀者模式:
1、从价值出发
2、找到尽可能小的边界
3、使用自动化测试保护
4、按领域模型定义接口
5、编写适配代码
6、编写新代码,完成替换
重构支持设计演进,沉淀领域资产
演进式设计意味着持续重构
关注点分离是重构的核心要点
