知识卡片

可扩展性的两个基本条件:正确预测变化与完美封装变化

普通读书笔记卡

内容

可扩展性指系统应对未来需求变化的能力,当新需求出现时不需要或只需少量修改就能支持,不必推倒重来。设计一个具备良好可扩展性的系统,缺一不可地需要两个条件:正确预测变化,以及完美封装变化。这两者是两个独立的难题,而不是解决了一个另一个就自动跟着解决——预测得再准,如果封装变化的方案本身选错了,扩展起来照样很麻烦;反过来即使有一套很灵活的封装方案,如果压根没预测到真正会发生的那类变化,这套灵活性也无从施展。理解这个二元结构对判断”什么时候该做可扩展性设计、做到什么程度”很有帮助:一种务实的做法是,先把可能性大的变化点列出来,按发生概率、影响时长(短期还是长期)、一旦发生所需改造成本这几个维度评估,如果评估下来某个可扩展性设计的代价过高、而预测本身又不够确定,不如暂时不做,等真正的需求出现后再重构——过早为了”看起来很完美”而做的通用化和抽象,很多时候都是基于推测,一旦真正落地时发现事实并非如此,这些提前投入的工作量反而是浪费。另外一个容易被低估的思路是:与其追求设计上无懈可击的灵活性,不如接受一定程度的冗余和浪费——适度的冗余往往能大幅降低方案本身的复杂度,把”设计得多聪明”换成”留一点余量”,有时候是性价比更高的选择。

参考来源

- 位置:《从零开始学架构》第06讲《复杂度来源:可扩展性》(源文件:_epub-src/OEBPS/text00000.html) - 结论依据:原文说明"设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。但要达成这两个条件,本身也是一件复杂的事情",作者在读者留言回复中进一步补充"设计的时候考虑可扩展性,但如果评估后发现可扩展性设计的代价太大,那就暂时不做,等到真的有需求时再重构"以及"一定的冗余和浪费,能够大大减少方案的复杂度",直接支撑本卡片结论。 - 原始内容:设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。但要达成这两个条件,本身也是一件复杂的事情,我来具体分析一下。