• 从资产视角看待软件开发
  • 演进式设计是软件开发活动的本质
  • 遗留资产的共存与改进
  • 重构支持设计

    1、从资产视角看待

业务价值/资产价值

技术债务(+业务价值、-资产价值)
过度设计(+业务价值、++资产价值)

资产 vs 债务

x-时间 y-效率

领域资产越来越多
技术债务越来越多

资产复用、质量提升、迅捷响应、数据洞察

资产分类:技术资产、通用领域资产、业务领域资产
使用范围、资产价值、数据沉淀

领域资产是最合适的资产粒度

隐喻
领域资产:可以很容易被业务领域使用、可以支持定制化扩展点、质量可靠
领域资产:被集成、被扩展、被信赖

领域资产应该被作于子域来做的、契约、演进

关键实践一、通过划分子域,提炼领域资产

领域资产来自于子域

关键实践二、用契约描述资产能力和约束

契约涉及权利、义务

关键实践三、保持领域资产的持续演进

保持资产演进

2、演进式设计是软件开发活动的本质

划分子域,商品为例:推荐列表、商品详情、入口等,商品领域

演进式设计:勇气和谦卑——敢于在信息不完全时做出决策

问题域的渐进认知
能力的持续提升
避免过度设计

设计就是最大可能的猜想

演进式设计:勇气和谦卑——相信未来一定会变化,为变化做好充分准备

自动化测试

演进式设计:勇气和谦卑——始终假定自己可能不正确,并使用各种机会检验

场景:需求分析、代码实现、

领域模型 <—> 用例场景 : 统一语言

3、遗留资产的共存与改进

遗留资产:

  • 遗留资产充斥着技术债务
  • 接口不清楚,边界模糊,副作用未知
  • 代码理解困难,修改可能导致不可预知的副作用
  • 往往缺乏自动化测试

对待遗留资产的 3 种态度:

  • 破窗效应
  • 激进变革(隐含了大量业务知识,需要大量投入,风险高、回报不明显)
  • 渐进重构(代码互相缠绕、补充测试困难、很难找到入手点)

对待遗留资产的第 4 种态度:业务价值 < 实现业务价值 < 我有一些资产

对待遗留资产的四种基本实践:

  • 使用防腐层(新增消费者测试)
  • 在遗留资产上包装并暴露 API(自动化测试)
  • 找到遗留资产的接缝,进行扩展(继承、组合)
  • 绞杀者模式——细节遗留资产的边界,进行逐步替代(自动化测试)

绞杀者模式:
1、从价值出发
2、找到尽可能小的边界
3、使用自动化测试保护
4、按领域模型定义接口
5、编写适配代码
6、编写新代码,完成替换

重构支持设计演进,沉淀领域资产

演进式设计意味着持续重构

关注点分离是重构的核心要点