类库、框架、模块、组件等概念介绍

软件架构介绍一文,将软件架构本质定性为元素(element)和这些元素之间的关系(relation)。这里,汇总下软件架构中常见的元素,方便统一交流。这些元素包括但不限于类库、框架、模块、组件、服务、平台等。

类库(Library)

类库是一组可复用的功能或工具的集合,应用程序通过调用它们,从而达到复用功能的目的。简单来说,类库就是日常开发中说的二方包(内部公共包)、三方包(第三方公共包)。具体来说,如前端开发各种基础脚本库、Java项目里依赖的各种jar包,都是类库。
类库根据其所在的语言或平台环境的不同,可以是编译后的二进制执行代码(xxx.exe)或中间代码(如jar包)形式,也可以是源代码(JavaScript里的类库,常见于解释执行语言)。类库的调用关系一般在开发阶段引入目标应用,运行期执行实际调用。
如Java开发中,三方库公共托管平台有Maven Repository阿里云等。

框架(Framework)

框架是基于一组类库或工具,在特定领域里根据一定规则组合成的开放性的应用骨架,比如Spring Framework、Angular、React等。框架具有如下特性:
(1) 支撑性 + 扩展性:框架不解决具体的业务功能问题,开发人员可在框架的基础上添加各种具体的业务功能、定制特性,从而形成具体的业务应用系统。
(2) 聚合性 + 约束性:框架是多种技术点按照一定规则形成的聚合体。采用某种框架也就意味着对框架进行技术选型。在很多种可能的技术备选中确定一种具体的框架,后续的其他工作都会从这一出发,也需要遵循这些规则,所以框架本身影响了研发过程的方方面面。

脚手架

在一个具体的框架之上,添加一些基本或者可复用的功能,这时就得到一个介于框架和应用之间的一个结构,一般将其称为脚手架(Scaffold)。使用脚手架可以快速实现类似的项目。

模块(Module)

模块是业务或系统按照特定维度的一种划分,也可以看作各种功能按照某种分类聚合的一种形式。如一个网站,一方面可以从业务上划分为注册模块、注销模块、登录模块、退出模块等。另一方面,也可以说用户模块聚合了用户注册、用户验证等业务功能。这样,在设计和开发应用的过程中,就可按照模块去组织。模块一般是系统在较大粒度上的解耦划分,仅次于系统或子系统的级别。

组件(Component)

组件是一组可以复用的业务功能的集合,包含一些对象及其行为。组件可以直接作为业务系统的组成部分,粒度一般小于模块,也是一种功能的聚合形式,比如日志组件、权限组件等。根据组件的形式,行为和用途的不同,组件还有一些延伸的概念。

构件(Composite)

构件是具有层次组合关系的多个组件组合形成的复杂组件形式。如一个前端可复用页面构件,左边组合了一个TreeView组件,右边组合了一个GridView组件等。

部件(Widget)

部件主要是有UI界面的构建,如操作系统自带的天气小部件、日历小部件等。

插件(Plugin)

系统运行时可以即插即用、随时停用或卸载的组件,一般有确定的生命周期且不会影响主业务。如IDEA的各种插件、Eclipse插件等。

服务(Service)

结构化信息标准促进组织(Organization for the Advancement of Structured Information Standards)把服务定义为:

一种允许访问一个多个功能的机制,其中访问需要使用规定的接口,并且与服务描述中指定的约束和策略一致。  

服务是一组对外提供业务处理能力的功能的集合,服务需要使用明确的接口方式(如 FTP、HTTPS等),服务描述里应该包括约束和策略(比如参数、返回值、通信协议、数据格式等)。微服务架构中的微服务和这里的服务概念一致。

平台(Platform)

一般来说,平台是一个领域或方向上的生态系统,是很多解决方案的集大成者,提供了很多的服务、接口、规范、标准、功能、工具等。如J2EE平台,包含企业级应用开发的各种技术能力。

参考

高可用可伸缩微服务架构 程超 梁桂钊 秦金卫 方志斌 张逸 等著

猜你喜欢

转载自blog.csdn.net/wangxufa/article/details/125363242