DDD-第六课

第六课-领域模型和软件资产的持续演进与沉淀

image-20200816194959598

本讲大纲:

1.从资产视角看软件开发;

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

3.遗留资产的共存与改进;

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

开发活动的业务价值和资产价值

image-20200816200232748

为什么强者恒强?

image-20200816200751251

1.资产复用;

2.质量提升;

3.迅捷响应;

4.数据洞察。

资产分类:

1.技术资产;

2.通用领域资产;

3.业务领域资产。

image-20200816201431611

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

领域资产的汉堡包隐喻:

image-20200816201934936

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

image-20200816202041341

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

image-20200816202143170

权利和义务

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

image-20200816202520592

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

image-20200816202912946

演进式设计:勇气和谦卑

一、敢于在信息不全时做出决策

1.问题域的渐进认知;

2.能力的持续提成;

3.避免过度设计。

image-20200816203236165

二、相信未来一定会变化,为变化做好充分准备

1.业务应用层的自动化测试

2.领域层的自动化测试

a.提供者测试;

b.消费者测试。

image-20200816203416607

三、始终假定自己可能不正确,并使用各种机会检验

image-20200816203754985

image-20200816203824245

统一语言!!!

遗留资产的共存与改进

遗留资产

image-20200816204117544

1.遗留资产充斥技术债务;

2.接口不清晰,边界模糊,副作用未知;

3.代码理解困难,修改可能导致不可预知的副作用;

4.往往缺乏自动化测试。

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

image-20200816211446630

对待遗留资产的第四种态度:

image-20200816211624330

四种基本实践:

1.使用防腐层;

2.在遗留资产上包装并暴露清晰的API;

3.找到遗留资产的接缝,进行扩展;

4.细分遗留资产的边界,进行逐步替换。

使用防腐层:

image-20200816212105436

在遗留资产上包装并暴露API:

image-20200816212316328

找到遗留资产的接缝,进行扩展:

image-20200816212516137

细分遗留资产的边界,进行逐步替换:

image-20200816212615496

image-20200816212628865

1.从价值出发;

2.找到尽可能小的边界;

3.使用自动化测试保护;

4.按领域模型定义接口;

5.编写适配代码;

6.编写新代码,完成替换。

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

image-20200816213028953

image-20200816213043851

image-20200816213134132

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

image-20200816213204137

image-20200816213251997

image-20200816214628881