摘抄自:《Pattern-Oriented Software Architecture Volume 1: A System of Patterns》 WILEY出版社出版
略有改动
所谓“启用技术”(enabling techniques),就是从目前软件体系结构中抽象出来的更加底层的原理。通过这些原理,我们又可以在不断的时间中创造有价值的软件体系结构/模式。
一些最重要的启用技术是:
- 抽象 (Abstraction)
- 封装 (Encapsulation)
- 信息隐藏 (Information Hiding)
- 模块化 (Modularization)
- 事务分离 (Separation of Concerns)
- 耦合和内聚 (Coupling and Cohesion)
- 充分性、完整性和原始性 (Sufficiency, Completeness and Primitiveness)
- 策略和实现分离 (Separation of Policy and Implementation)
- 接口和实现的分离 (Separation of Interface and Implementation)
- 单一引用点 (Single Point of Reference)
- 分而治之 (Divide - and - Conquer)
一. 抽象:
抽象是人们处理复杂问题的基本原理之一。通过注重基本的,本质的特征可以在错综复杂的对象海洋 中保持清晰的概念。比如:工厂模式,层模式。
二. 封装,信息隐藏, 模块化, 耦合和内聚, 接口和实现分离:
面向对象思想的精髓之一。只提供给用户需要的部分,对不需要的部分进行隐藏。而且这样可以减少对系统其中一个模块进行修改的时候对系统其他部分的影响。当然这是在不修改接口的情况下,接口相当于契约,是系统承诺向用户提供的东西,所以是系统相对稳定的部分。修改的可能性不大。
三. 充分性,完整性,原始性:
大概意思是抽象的具体实现,必须要实现抽象的全部的特性。(比如,要完全的实现抽象定义的接口)而且,要保证每一个模块的具体实现都是容易实现的。
这里我也没有看懂。有人看懂了,欢迎交流。
四. 单一引用点:
软件系统内的任何条目都应该仅仅被声明和定义一次。这个原理的主要目标是避免不一致的问题。
五. 分而治之:
这个既来自于古代政治学又来自于组合算法(例如 合并-分类)的原理是很又名的。我们多次在软件体系结构中使用这个原理。个人认为这种思想又是其他启用技术的基础。当我们将一个系统的结构进行细分,当我们把一个大问题进行细分的时候,其实我们都在运用这种方法。没有分治的思想,系统的结构将一片混乱。因为无论人和计算机都更加善于解决一个小规模的,曾经解决过的问题。
这些原理其实都不是鼓励的,像上面相同颜色的启用技术,个人认为实际包含的中心思想都是一致的,都体现的是一种封装隐藏的思想。所以放在一起。更有甚者,有些启用技术是相对的。比如,单一引用点 和 接口和实现分离原则实际上存在矛盾。因为在在分离原则中一个特定功能至少需要两个引用点,一个在组件的接口部分,一个在组件的实现部分。这个时候就需要对各个具体的应用做具体的分析了。