在软件中,您如何区分组件和模块?
7 回答
我会说答案取决于你问谁。
我认为差异是粒度和角色之一。在我的理解中,软件组件是一个自包含的实体,具有定义良好(最好是稳定)的接口,与系统的其余部分交互,从系统架构的角度来看,它具有重要意义。一个例子是数据访问抽象层。
对我来说,一个模块宁愿是一个可部署的源代码包,其中包含具有共同目的的代码,但在系统中不扮演任何重要角色(这意味着替换它不需要更改系统的整体架构)。一个示例是 Web 服务中的 JSON 序列化程序。
一般来说,
- 组件是为解决方案中的特定服务提供服务的元素的相对细粒度的分组。
- 一个模块是更细粒度的,并充当软件提供的一个或多个相关服务的分组。
一个模块倾向于使用许多组件来提供其服务,而一个组件可能由少数几个类和其他组件构成。
无论如何,它是主观的,取决于应用程序的规模。对于小型应用程序,可能只有一个程序(一个模块)和多个组件。在中型应用中可能有多个模块和许多组件。在大型应用程序中,您可能需要引入术语子系统,它比模块更细粒度!
模块是赋予软件新功能的能力。
组件是元素
组件通常被视为遵循某种软件接口规范的独立的、可插拔的项目。一个很好的例子是 GUI 项目,例如增强的文本框和下拉菜单。基本上任何不是完整程序但可以插入另一个程序以增强其功能的东西。
在过去的几年里,模块这个词已经失宠。Module是一个比较通用的名词,但是有些语言把它作为关键字,即Modula 2。VB.NET有一个Module关键字,但那只是一个普通的类,有静态成员,我的理解是大多数VB程序员更喜欢使用类关键字。
组件是在软件系统级别定义的(如在运行时看到/想到的)。它们是执行系统的元素,共同构成一个更大的系统。这些组件/元素之间使用连接器(接口)进行交互。想象一下黑盒子在它们之间进行通信,不关心它们的实现/源代码。
模块是在编程语言级别定义的(例如,一组 5 个类组成一个提供某些功能的模块)。它们是根据该代码集合提供的功能在源代码级别定义的。(例如:应用程序中负责与数据库交互的持久性类)。
请注意,模块也是一种组件(通过分类并与组件共享“is-a”关联)。
参考:Len Bass,软件拱门。在实践中和蒂莫西·莱斯布里奇博士的讲座
组件:黑盒模块。
但实际上并没有任何显着差异。不要试图在这里寻找深层含义。
组件只是模块的另一个名称,它们是同一个东西。通常组件是您可以在软件工程书籍中找到的术语,而模块具有更广泛的用法。