[架构设计] 组件和模块的区别

简介: 组件(Component)和模块(Module)又是一对容易混淆的名词,也常常被用来相互替换。两者是否有差异往往取决专业背景、所在领域、以及视角。个人总结,从设计上来看,组件强调复用,模块强调职责(内聚、分离),或者说组件是达到可复用要求的模块。
组件(Component)和模块(Module)又是一对容易混淆的名词,也常常被用来相互替换。两者是否有差异往往取决专业背景、所在领域、以及视角。个人总结,从设计上来看,组件强调复用,模块强调职责(内聚、分离),或者说组件是达到可复用要求的模块。

Module, 中文为模块或模组。它的核心意义是分离职责,属于代码级模块化的产出。本身是一组具有一定内聚性代码的组合,职责明确。对外的接口可以是松散的,也可以是集中的。SEI的定义如下:
  An implementation unit of software that provides a coherent set of responsibilities.
它以问题分解的形式,来解决软件设计问题。它更强调一个内聚的概念,形式上可以是Java中的包,也可以是一个源代码目录。

Component,中文称为组件,或者构件。使用非常比较广泛,它的核心意义在于复用,相对模块,对于依赖性有更高的要求。
我大概整理了一下,两个定义 (参考Component based software programming):
  • 可以复用的模块,概念上与模基本等同,只是明显有依赖性的要求。(最早提出时概念)。
  • Component-Based Software Development中提倡的组件定义如下(Component Software):
除了完成某个特定功能外,还要具备如下条件的代码组合:
    • 符合特定的接口要求(交互的要求)
    • 具有明确的上下文依赖 (复用的要求)
它可以独立发布(二进制或源代码的形式),也可以进行组合。这样软件开发就变成了组件的组装了。

         和OOP中的Objects相比,一个类也可以视为一个组件,但更多的情况下,组件提供了更为高层的系统视角。Component如同一片树林,Object只是树。

         Eclipse中的Plugin和COM(Component Object Model)就是Component Software的典型代表。


两者的关系取决于软件本身和视角。Eclipse框架下的一个插件可能包含若干个模块,因为从Eclipse的角度来看,每个Plugin是用来复用的。
而一个应用的模块(如GUI)下也可能使用了多个组件,因为复用的是每个控件。

另外也有人从发布形式上来区分,其实也不尽然。一个模组可能以静态库、动态库存在(skia被应用到一个应用中的场景),一个组件也可能以源码的形式存在(Chromium中的Browser Component)。发布形式其实是取决于产品需求的,不可能准确的区分出两个设计上的概念。

欢迎一起讨论!

参考:

转载请注明出处: http://blog.csdn.net/horkychen
目录
相关文章
|
9天前
|
负载均衡 5G 网络性能优化
深入解析LTE(长期演进技术)的基本架构及其关键组件
深入解析LTE(长期演进技术)的基本架构及其关键组件
54 2
|
29天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
30天前
|
Kubernetes API 调度
Kubernetes 架构解析:理解其核心组件
【8月更文第29天】Kubernetes(简称 K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。它提供了一个可移植、可扩展的环境来运行分布式系统。本文将深入探讨 Kubernetes 的架构设计,包括其核心组件如何协同工作以实现这些功能。
83 0
|
1月前
|
机器学习/深度学习 算法 数据库
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
在我们选择阿里云服务器的架构时,选择合适的云服务器架构对于提升业务效率、保障业务稳定至关重要。阿里云提供了多样化的云服务器架构选择,包括X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等。本文将深入解析这些架构的特点、优势及适用场景,以供参考和选择。
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
|
20天前
|
XML Java 数据库
在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂
【9月更文挑战第8天】在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂。日志作为系统行为的第一手资料,传统记录方式因缺乏全局视角而难以满足跨服务追踪需求。本文通过一个电商系统的案例,介绍如何在Spring Boot应用中手动实现日志链路追踪,提升调试效率。我们生成并传递唯一追踪ID,确保日志记录包含该ID,即使日志分散也能串联。示例代码展示了使用过滤器设置追踪ID,并在日志记录及配置中自动包含该ID。这种方法不仅简化了问题定位,还具有良好的扩展性,适用于各种基于Spring Boot的微服务架构。
31 3
|
3天前
|
编解码 Linux 开发工具
Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明
支持x64_64架构、aarch64架构(需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc++.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9)。
|
1月前
|
存储 安全 虚拟化
深入解析:Docker的架构与组件
【8月更文挑战第27天】
123 5
|
1月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
45 2
|
1月前
|
程序员
软件设计与架构复杂度问题之战略编程与战术编程的主要区别如何解决
软件设计与架构复杂度问题之战略编程与战术编程的主要区别如何解决
|
1月前
|
消息中间件 运维 NoSQL
基础架构组件选型及服务化
【8月更文挑战第22天】本文概述了分布式系统中常见的基础架构组件及其选型与服务化的重要性。

热门文章

最新文章