组件、插件、模块、子应用、库、框架等概念辨析
网上有许多讲组件化、模块化等概念的文章,但大家一般都是将这两个概念混为一谈的,并没有加以区分。而且实际上许多人对于组件、插件、模块、子应用等概念的区别也不甚明了,甚至于许多博客文章专门解说这几个概念都有些谬误。
之前已经写了一篇文章专门对组件和模块两个概念进行辨析,现在我们对于更多的概念在更高的层次上进行辨析。
想分清这几个概念我觉得结合一下软件的渐进式开发场景更容易理解。但是下面的篇幅会比较长,所以按惯例还是先说结论,不耐烦的同学可以先看:
1.概念区别
- 组件:代码重用,功能相对单一或者独立,无统一接口。组件化开发的成果是基础库和公共组件。
- 插件:近乎组件,有统一接口
- 模块:高内聚,松耦合,功能相对复杂,有多个统一接口。模块化开发的基础是框架。
- 子系统:高于模块,需要生命周期管理。子系统开发的基础是容器。
1.1.组件和插件
插件的概念比较形象,一般存在一个“插拔”过程,所以要求可插拔的插件有一个相同的接口(这里所说的接口只是概念上的接口,即调用方法及参数等)。而组件是不存在这个相同接口的。
拿我们最常见的网络请求功能举例,无论哪种开发语言,github上可能都有多种网络请求组