互联网是模块化的 - Gordon


互联网的关键架构原则之一是模块化;

模块化是一种设计原则,它有意使组件高度独立(“松散耦合”);
当一个系统由具有可识别边界的较小的独立部分组成时,它就是模块化的。

在设计模块化架构时,系统架构师以最小化组件之间依赖关系的方式分解系统。
模块化系统可以从组成部分分解和重组。事实上,形式上纯模块化的数学术语是组合性——可组合的属性。

如何判断系统是否模块化?
关键测试是是否可以在不更改其他部分的情况下添加、删除、修改或交换部分。
如果产品在设计上是模块化的,那么它的组件可以独立设计。如果在生产上是模块化的,它的组件可以独立生产。如果在使用中是模块化的,产品的用户可以在后期更换或“混合和匹配”组件。

为了使组件独立并保持它们的独立性,模块化采用了抽象、信息隐藏和严格的关注点分离。
必须仔细指定模块如何相互通信以保持独立性。
接口是组合性的一个重要方面,接口实际上是组合性的同义词。
接口有很多名称:API、协议、函数签名、合同.

因为模块是黑盒子,你可以改变模块内的任何东西,只要它不改变接口。模块让您可以自由地在不破坏任何功能的情况下快速发展系统的内部结构。

模块接口不能快速进化,否则系统会崩溃。
这给我们带来了一个两难境地:在正确的地方划定模块化的边界是至关重要的。模块化的边界决定了系统的哪些部分可以快速发展,哪些部分会及时冻结。在错误的地方画线,你会被卡住的!

模块化是一个设计问题,没有简单的答案,正确的边界取决于目标、价值观和更大环境中的协同进化契合度。
开放式系统是模块化系统。