什么是组件
在软件界,”组件“这个词有很多不同的用法。例如用户界面的组件、类似数据库系统这样的大型基础设施对象、能够被重用的任何软件工件都可以被称之为”组件“。组件并没有统一的定义,以下的定义是从《大象——ThinkinginUML》摘录的。
组件是系统中实际存在的可更换部分,它实现特定的功能,符合一套接口标准并实现一组接口。组件代表系统中的一部分物理实施,包括软件代码(源代码、二进制代码或可执行代码)或其等价物(如脚本或命令文件)。
一个组件应当具有完备性、独立性、逻辑性和透明性。
完备性:组件包含一些类和接口,一个组件应当能够完成一项或一组特定的业务目标(或说功能)。从调用者的观点看,它不需要调用多个组件来完成一个业务请求。例如我们将组件A定义为用户注册,那么我们应该在组件A中包含所有实现用户注册的必需的类和接口,在任何时候,仅通过组件A就可以注册一个用户而无须访问组件外的其他类;而组件B定义为用户维护组件,我们就应当在组件B中包含所有实现用户维护的必需的类和接口,使用者可以通过组件B完成维护用户的功能而无须访问组件外的其他类。
?独立性: 组件应当是可以独立部署的,与其他组件无依赖关系,最多仅保持关联关系。例如可以把组件A部署到服务器1,把组件B部署到服务器2,虽然组件A和B都共同使用用户数据,但是A与B之间无依赖关系。也就是说,组件与组件之间应当是松耦合关系。
逻辑性 :组件是从软件构件设计的观点来定义的,并非从需求中可以直接导出。组件建立在系统分析和设计的基础上,对已经实现的功能进行逻辑划分。组件的定义是为了规划系统结构,将一个复杂的系统分解为一个个具有完备功能的、可独立部署的小模块。这些小模块可大可小,从理论上说,可任意选择一部分功能定义一个组件。
透明性:组件的修改应当只涉及组件的定义以及组件中所包含的类的重新指定,而不应当导致类的修改。例如当一个组件的功能变化时,它所包含的类可能从原来的类A、类B、类D变成类B、类C、类D,但是类A、B、C、D都不应当被修改。
为什么需要组件
软件的开发是非常复杂的,不仅如此,复杂性的增加导致成本的同步增长。影响开发具有成本效益的软件的重要因素包括:
集成化的工具和开发环境 开发软件需要集成化的工具和开发环境。用制造业的话说,这对应于制造某个产品所需的机器和资源,是完成复杂制造任务至关重要的问题。人员和组织 软件开发是高度人员密集型的行业,人员素质仍然是软件业最重要的因素软件工程实践 软件工程实践包括使机构能够使用集成化的工具和开发环境,高效地生成软件的方法论、开发过程和最佳实践。体系架构和重用 体系架构和重用市值构建软件的一组体系结构原则、模式和可重用的工件。
组件就是包含在第四点中的。基于组件的开发就是一个重要的在控制软件成本方面是有效的方案。
除此以外,基于组件的开发方式对于提升软件的成熟度、灵活引入新的技术方案、快速迭代开发、有效的进行本地化部署和有效集成和进化成解决方案都是非常有帮助的。
产品经理和架构师要不断思考如何重用,组件化产品设计和技术架构师是他们不可或缺的思维方式。
组件图的基本要素
组件(Component):它是包含了行为描述的,通过提供接口(provided interfaces)与需求接口(required interfaces)来表述接口对外提供的行为以及所需的接口,一般这些接口都通过端口来暴露,比如 http 端口,react的 props 等。
接口(Interface)有两种组件接口:提供接口(Provided interface)和需要接口(Required Interface )
提供接口(Provided interface)顾名思义就是组件提供出去供组件使用方调用的接口 。用直线关联到圆形符合的组件表示组件提供了对接口的实现。
需要接口(Required Interface )就是组件需要外部提供的接口。用直线关联到半圆形的组件表示对接口的使用。
以上图为例,"Another Component"通过直线关联到了”圆形“表示”Another Component“是接口的提供方,而”Component“通过直线关联的是”半圆形“表示”Component“对接口进行使用。
端口 (port):端口 表明组件对外提供接口的交互点,和网络中的端口概念相似,它定义了组件对外的出口。通过端口,我们可以限制组件的外部可见性,其他组件与该组件交流,只能通过对应的端口,因此我们通过端口了解到一个组件能够支撑的功能范围
组件图使用案例
下图是一个”统一搜索引擎“的组件图。由一个前端的搜索框、后端提供了搜索服务和搜索内容的保存服务。
立即咨询: 13716188458 / 18588225959,助您抢占市场先机。项目经理在线