# 系统架构设计

## 核心思想原则

### 分治法

即分而治之。

将庞大的计算、存储压力向下级分摊。又可以看做是去中心化的一种实践方式。

数据中心只承担一些核心数据的存储工作；每个服务器都可以存储部分非通用的数据，承担部分的计算及负载压力。下级路由、智能终端设备、智能移动设备等，都可以分摊服务器的压力。


### 高内聚，低耦合

耦合性与内聚性是模块独立性的两个定性标准，将软件系统划分模块时，尽量做到高内聚低耦合，提高模块的独立性，为设计高质量的软件结构奠定基础。

***对外***低耦合，***对内***高内聚

有个例子很容易明白：

> 一个程序有50个函数，这个程序执行得非常好；然而一旦你修改其中一个函数，其他49个函数都需要做修改，这就是高耦合的后果。一旦你理解了它，你编写概要设计的时候设计类或者模块自然会考虑到“高内聚，低耦合”。

1. 耦合、内聚的评估标准是***强度***，耦合越弱越好，内聚越强越好；
2. 所谓***过度***指的是由于错误理解导致的效果相反的设计；
3. *耦合指的模块之间的关系*，最弱的耦合设计是通过一个主控模块来协调n个模块之间的运作。还是举一个我举过的例子：客户要求在界面上增加一个字段，你的项目要修改几个地方呢？如果你只要修改项目文档，那么你的开发构架就是最低强度的耦合，而这种设计 成熟的开发团队都已经做到了，他们使用开发工具通过项目模型驱动数据库和各层次的代码，而不是直接修改那些代码；
4. *内聚指的是模块内部的功能*，最强的内聚就是功能单一到不能拆分，也就是原子化；
5. 所以***强内聚和弱耦合是相辅相成的，一个良好的设计是由若干个强内聚模块以弱耦合的方式组装起来的。***

### 前后端分离

参考资料：

* <https://segmentfault.com/a/1190000002978095>
* <http://2014.jsconf.cn/slides/herman-taobaoweb/index.html>

注意点： 前后端分离不单指Web的前后端，也包括客户端（前）和服务器（后）的分离。
