复杂度来源:可扩展性
2018-07-27 本文已影响3人
空谷幽心
笔记
-
可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修改就可以支持,无须整个系统重构或者重建。
-
提升可扩展性的方法:面向对象和设计模式。
-
设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。
-
软件系统与硬件或者建筑相比,有一个很大的差异:软件系统在发布后还可以不断地修改和演进,这就意味着不断有新的需求需要实现。
-
如果每个点都考虑可扩展性,架构师会不堪重负,架构设计也会异常庞大且最终无法落地。
-
“预测”这个词,本身就暗示了不可能每次预测都是准确的。
-
预测变化的复杂性在于:
-
不能每个设计点都考虑可扩展性。
-
不能完全不考虑可扩展性。
-
所有的预测都存在出错的可能性。
-
对于架构师来说,如何把握预测的程度和提升预测结果的准确性,是一件很复杂的事情,而且没有通用的标准可以简单套上去,更多是靠自己的经验、直觉。
-
预测变化是一回事,采取什么方案来应对变化,又是另外一个复杂的事情。
-
第一种应对变化的常见方案是将“变化”封装在一个“变化层”,将不变的部分封装在一个独立的“稳定层”。
-
第二种常见的应对变化的方案是提炼出一个“抽象层”和一个“实现层”。