软件架构中的模块与组件
模块与组件在软件架构中非常重要,但是概念理解起来,容易被混淆;为了理清自己的思路,查了一些资料,结合华仔的讲解,进行了总结:
概念
模块:
Module:A standard or unit of measurement; An independently operable unit that is a part of the total structure of a space vehicle
是作为度量的单位;独立运行的单元,是整体结构的一部分
主要是从度量单位,整体和部分这个角度来描述
组件:
Component:a part or element of a larger whole, especially a part of a machine or vehicle
元件,构建,组成部分
相同点
都是描述整体和部分的关系,都是为了降低系统的复杂度
都是基于功能划分的单位
模块和组件没有上下级包含的关系:模块中可以包含组件,组件中也可以划分模块
不同点
模块:
模块是按照逻辑拆分软件,主要是为了职责分离,基于业务拆分
从单个系统内部的角度来看,模块更多是横向的业务功能拆分,拆分后的模块,往往具有相同的级别
模块偏向内部设计的概念:项目中,划分为几个独立的功能模块;模块之间交互使用接口表达,接口作为门面模式,为了使模块之间解耦合
同一个系统内部,两个应用具有相同的业务等级,通常称为两个模块
同一个应用内部,使用包来区分模块;微服务中,随着业务发展,可以将模块划分为多个微服务
组件:
组件是按照物理拆分软件,主要是为了单元复用
自包含的、可编程的、可重用的、与语言无关的软件单元
从单个应用来看,组件更多从纵向对功能进行了拆分,拆分的组件有上下层的关系;例如:把数据持久化拆分为单独的数据库存储组件
组件偏向向外的概念:组件独立,对外强调可重用性;应用可以将某一部分特定的功能交给一个组件来完成;组件都有独立的封装
视图通常可以封装 UI 组件
总结:
模块和组件从不同的角度描述的话,概念可以互相转换。我们在做设计的时候,最关键是要能描述清楚它的职责边界,如何与其他部分进行交互,减少耦合等。
评论