commonality and variability analysis (CVA) 共性可变性分析

共性可变性分析

设计模式不能用于所有的设计中,但他们提供的思想是相同的。这些思想中,最重要的一条就是可以使用CVA找到系统中的变化,然后按照设计模式的原则(对接口编程、使用对象聚集封装变化)获得灵活和易于测试的设计。

造成紧耦合程序设计的原因就是**

开发人员经常在弄清楚实体本身之前就考虑实体之间的关系**,过早得注意实现细节。

首先,使用CVA找到问题领域中存在的各种概念(共性)和具体的实现(可变性)。这时我们最感兴趣的是找到其中的概念,但是这一过程中也会发现许多可变性。问题域中任何没有包含在这些概念中的实体(比如可能有一些属于“某种”对象的对象)也应该找出来。然后,在所需功能的概念全部找到之后,继续为封装这些概念的抽象定制接口。接着考虑你将如何使用从该抽象派生的具体实现,根据这一点派生接口。

CVA方法和设计模式的区别是:
CVA强调尽早关注抽象,这样更可能找到最有用的抽象。设计模式关注这些抽象之间的关系,但是对于找出最重要的抽象帮助不大。设计模式可以使我们利用来自过去成功设计的真知灼见,而CVA做不到这一点。

分析得到共性和可变性之后,就自然可以形成若干独立的模型(继承结构)。下步任务是确定概念之间的关系。这个过程中,设计模式会对确定概念间关系有指导作用,但不是决定作用。概念间的关系还是要有问题本身来决定,这样才能得到符合真实世界情况的关系模型,在此基础上,设计模式会帮助优化该模式。

要指出的是,CVA和经典的“名词动词分析法”并不相悖。名词动词分析法中,程序员提取需求描述中的名词和动词,由此来确定系统中的对象及其行为。CVA方法在此基础上更进了一步,在得到具体事物之后要求提取出事物间的共性,也就是概念,以此作为抽象接口的设计蓝图。如果在初始阶段就作如此分析,那么设计过程基本上就满足了“依赖倒置”原则。最终得到的设计也会具有一定的灵活性(但并不能保证这一点,毕竟左右设计结果的因素很多)。

参考

设计模式解析笔记 - 共性和可变性分析