知识卡片

模块与组件的本质区别:逻辑拆分与物理拆分

普通读书笔记卡

内容

模块和组件这两个词在日常交流里经常被混着用(”MySQL模块主要负责存储数据”“我们有安全加密组件”),但字典式定义(模块是”程序和数据结构的组织单位”,组件是”自包含的、可编程的、可重用的软件单元”)并不能真正帮人分清两者的区别。真正的区分标准是:拆分系统的角度不同——从逻辑的角度拆分系统,得到的单元叫”模块”;从物理的角度拆分系统,得到的单元叫”组件”。两者拆分的目的也不同:划分模块主要是为了职责分离,让每个模块只负责一块逻辑上独立的功能;划分组件主要是为了单元复用,”组件”的英文component也可以翻译成”零件”,零件是一个物理概念,强调”独立且可替换”。以一个学生信息管理系统为例:从逻辑角度拆分,可以分成”登录注册模块”“个人信息模块”“个人成绩模块”,这是按业务职责切的;从物理角度拆分,则是Nginx、Web服务器、MySQL这类可以独立部署、独立替换的物理单元,这是组件。理解这个区分的价值在于:讨论”要不要拆某个东西”时,先问清楚是在讨论逻辑职责的分离(该不该拆成模块),还是在讨论物理部署单元的独立与可替换(该不该拆成组件),这是两个维度上各自独立的决策,混为一谈容易让讨论变得鸡同鸭讲。

参考来源

- 位置:《从零开始学架构》第01讲《架构到底是指什么?》"模块与组件"(源文件:_epub-src/OEBPS/text00000.html) - 结论依据:原文说明"模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已……从逻辑的角度来拆分系统后,得到的单元就是'模块';从物理的角度来拆分系统后,得到的单元就是'组件'。划分模块的主要目的是职责分离;划分组件的主要目的是单元复用",并以学生信息管理系统的登录注册模块/Nginx-Web服务器-MySQL组件为例,直接支撑本卡片结论。 - 原始内容:模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已。从逻辑的角度来拆分系统后,得到的单元就是"模块";从物理的角度来拆分系统后,得到的单元就是"组件"。划分模块的主要目的是职责分离;划分组件的主要目的是单元复用。