共性和可变性分析

来源:互联网 发布:java如何调用rest api 编辑:程序博客网 时间:2024/05/17 20:31

考虑设计中什么应该是可变的。这种方法与关注引起重新设计的原因刚好相反。它不是考虑什么会迫使设计发生改变,而是考虑什么能够在不引起重新设计的前提下改变。这时主要关注的就是对变化的概念进行封装,这时许多设计模式的主题。

如何在问题领域中找到不同变化,如何找到不同领域中的共同点。找到变化的地点,称为“共性分析”,找出如何变化,称为“变性分析”。

共性分析就是寻找一些共同的要素,它们能够帮助我们理解系列成员的共同之处在哪里。可变分析揭示了系列成员之间的不同,可变性只有在给定了共性之后才有意义。

共性分析寻找的是不可能随时间而改变的结构,而可变分析则要找到可能变化的结构。可变性分析只在相关联的共性分析定义的上下文中才有意义。从架构的视角来看,共性分析为架构提供长效的要素,而可变分析则促进他适应实际使用所需。也就是说,如果变化是问题领域中各个特定的具体情况,共性就定义了问题领域中将这些情况联系起来的概念。共通的概念将用抽象类表示。可变性分析所发现的变化将通过具体类(也就是从抽象类派生而来的具有特定实现的类)实现。

 

共性和可变性分析、三种视角与抽象类之间的关系

共性分体与问题领域的概念视角互相关联,可变性分析与特定情况的实现互相关联。

规约视角处于在中间,共同点与变化点都与这个视角有关。规约描述了如何与一组概念上相似的对象沟通,这些对象的每一个都表现出共有概念的变化情况。规约将称为实现层次上的抽象类或接口。

在面向对象设计的新视野中,我们可以这样说:

与抽象类的映射

讨论

抽象类 —> 核心概念

抽象类代表了将所有派生类联系起来的核心概念,这个核心概念定义了派生类的共同点。

共同点 —> 抽象类

共同点定义了我们需要使用的抽象类

变化点 —> 抽象类的派生类

从共同点中识别出的变化点成为抽象类的派生类

规约 —> 抽象类的接口

这些类的接口对应于规约层次

 

将类的设计过程简化成一个含有两个步骤的程序:

当你定义……

你必须问自己……

抽象类(共性)

需要用什么接口来处理这个类的所有责任

派生类(可变性)

对于这个给定的特定的实现(这个变化),应该怎样根据给定的规约来实现它。

 

规约视角和概念视角之间的关联:规约标识了用来处理此概念所有情况(即概念视角所定义的共性)所需的接口。

规约视角和实现视角之间的关联:对于给定的规约,怎样实现这个特定的情况(变化点)。
原创粉丝点击