领域驱动设计-软件核心复杂性应对之道 11-13
11. 分析模式的应用
马丁 分析模式:表示业务建模中的常见构造
分析模式的最大作用是借鉴其他项目的经验,把那些项目中所做的广泛的设计方向讨论和实现结果的经验与当前的模型结合起来。
记账:钱不会无中生有,也不会无故消失。它只能从一个账户迁移到另一个账户。
当你可以幸运地使用一种分析模式时,它一般并不会直接满足你的需求。但它为你的研究提供了有价值的指导,而且提供了明确抽象的词汇。它还可以指导我们的实现,从而省去很多麻烦。
我们应该把所有分析模式的知识融入到知识消化和重构的过程中,从而形成更深刻的理解,并促进开发。当我们应用一种分析模式时,所得到的结果通常与该模式的文献中记载的形式非常相像,只是因具体情况不同而略有差异。但有时也完全看不出这个结果与分析模式本身有关,然而这个结果仍然是受该模式思想的启发而得到的。
但有一个误区是应该避免的。当使用一个众所周知的分析模式中的术语时,一定要注意,不管其表面形式的变化有多大,都不要改变它所表示的基本概念。这样做有两个原因,一是模式中蕴含的基本概念将帮助我们避免问题,二是在通用语言中使用被广泛理解或至少是被明确解释的术语可以增强通用语言。如果在模型的自然演变过程中模型的定义也发生改变,那么就要修改模型名称了。
很多对象模型都有文献资料可查,其中有些对象模型专门用于某个行业的某种应用,而有些则是通用的模型。大部分对象模型都有助于开阔思路,但只有为数不多的一些模型精辟地阐述了选择这些模式的原理和使用的结果,而这些才是分析模式中最有用的部分。这些精化后的分析模式大部分都很有价值,有了它们,可以免去一次次的重复开发工作。尽管我们不大可能归纳出一个包罗万象的分析模式类目,但针对具体行业的类目还是能够开发出来的。而且在一些跨越多个应用的领域中适用的模式可以被广泛共享。
这种对已组织好的知识的重复利用完全不同于通过框架或组件进行的代码重用,但是二者唯一的共同点是它们都提供了一种新思路的萌芽,而这种新思路先前可能并不十分明晰。一个模型,甚至一个通用框架,都是一个完整的整体,而分析则相当于一个工具包,它被应用于模型的一些部分。分析模式专注于一些最关键和最艰难的决策,并指明了各种替代和选择。它们提前预测了一些后期结果,而如果单靠我们自己去发现这些结果,可能会付出高昂的代价。
12. 将设计模式应用于模型
策略模式
组合模式
13. 通过重构得到更深层的理解
1)以领域为本
2)用一种不同的方式看待事物
3)始终坚持与领域专家对话
探索团队
- 自主决定
- 注意范围和休息
- 练习使用通用语言
借鉴先前的经验
分析模式
针对开发人员的设计
软件不仅仅是为用户提供的,也是为开发人员提供的
柔性设计
重构的时机
持续重构
- 设计没有表达出团队对领域的最新理解
- 一些重要的概念被隐藏在设计中了
- 发现了一个能令某个重要的设计部分变得更灵活的机会
危机就是机遇
进化论,进化模型,长期的缓慢变化或稳定变化会被相对来说很短的、爆发性的快读变化所打断。然后事物会进入一个新的平衡。软件开发与物种进化之间的不同点是前者具有明确的目的方向性(虽然在某些项目上可能并不明显),尽管如此它仍遵循这种进化规律。