《从 0 开始学架构》学习归整(一)复杂度问题的来源 可扩展篇

内容纲要

可扩展

可扩展性是指系统为了应对将来变化而提供的一种扩展能力,当有需求变化时,系统不需要或者仅需少量的更改就可以支持,不需要整个系统重构。

具有良好扩展性的系统的基本条件:

  1. 正确预测变化
  2. 完美封装变化

预测变化

Q:为什么要预测变化?
A:大部分系统发布后,会不断有新的需求需要实现。预测将来可能产生的变化并作出合理的设计,可以为后续的需求实现提供便利。

预测变化的复杂性

唯一不变的是变化 ╮(╯▽╰)╭️

预测的复杂性在于:

  1. 不能每个设计点都考虑可扩展性
  2. 不能完全不考虑可扩展性
  3. 所有的预测都存在出错的可能

预测变化的难点

  • 没有通用标准
  • 不同发人会有理解偏差
  • 需要凭经验、直觉来判断

应对变化

方案一

变化封装在一个变化层,将不变封装在一个稳定层

方案一

难点

  1. 拆分变化层和稳定层
    • 不同的人有不同的理解
    • 有时候变化和稳定的界线会模糊不清并可能随时间推移产生变化
  2. 设计变化层和稳定层之间的接口
    • 稳定层
      • 越稳定越好
    • 对于变化层来说
      • 在差异的多个实现方式中找到共同点
      • 保证新加入功能时对原先接口影响尽可能小

方案二

提炼出一个抽象层(稳定)和一个实现层(变化)

典型实践

  • 设计模式
  • 规则引擎

装饰者模式 ↓
装饰者模式

总结

不论哪种方案,其核心始终在于分离“变化”和“稳定”

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注