---
title: '学架构笔记6：可扩展性复杂'
pubDate: 1995-07-31
tags:
  - '笔记'
description: '学架构笔记6：可扩展性复杂'
---

可扩展性指系统为了应对将来需求变化而提供的一种扩展能力。就是以后有新需求来的时候，改起来就会简单点。

自从面向对象思想和设计模式出现后，程序的可扩展性都得到了很大程度的解决。但是，可扩展性是否存在还得看技术人员写程序时候的想法。

## 预测变化

世界上唯一不变的就是变化了，现代互联网软件的迭代更是将这个理念发挥到极致。三天一个小需求，五天一个大需求是常见的事情。

如果能在设计架构的时候，就能预测到未来的需求，以后写需求的时候能少写些代码，对于技术人员来说就是最好不过的事了。

当然理想是美好的，现实却是复杂的。

如果预测错了，那么本架构设计对于后面的变化没有益处，甚至还可能有坏处。多做的工作也就白费了。

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

## 应对变化

就算在设计阶段已经预测到了变化，但是，如果实现变化又是另一回事了。

### 变化层和稳定层

系统需要拆分出变化层和稳定层，即有哪些是必然需要的，而哪些是未来可能需要的，也不用考虑未来不会需要的。

#### 抽象

对于变化层来说，需要对代码中多个接口实现进行抽象，而这点就将可扩展性的复杂度体现了出来。

而在抽象后，由于抽象不能轻易修改了，那么后续加入的新的实现是否还能沿用这个抽象。

设计模式在这里被运用地淋漓尽致。这也是为什么新手总觉得设计模式啰嗦而老手总觉得设计模式很有用。

## 总结

学习了软件中可扩展性带来的复杂度。

_先这样吧_

若有错误之处请指出，更多地关注[煎鱼](http://www.jianyujianyu.com)。
