《管见》毕伟:组件化软件开发方法
- 时间:2022-12-06
- 来源:尊龙软件
在软件工程领域,软件的复用是一种很好地解决软件成本和质量的方式,而组件化软件开发是一种非常好的实现软件复用的开发方法。尊龙软件从20年前就开始使用组件化的方式进行软件的设计和开发,尤其关注业务逻辑的组件化,把这种类型的组件称为管理逻辑组件,通过对管理逻辑组件的组装、复用,形成可组合、可配置的应用,可以随需应变地满足不同客户的个性化需求,能极大提高软件交付的效率和质量。本文从组件化的软件架构、组件化软件开发过程及最佳实践几个方面对组件化软件开发方法进行论述。
软件开发是一项复杂的系统工程,软件产品交付的效率和质量,一直是软件工程领域持续优化改进的方向,也因此诞生了很多种软件开发方法。其中,组件化软件开发方法以松耦合和高可复用性,较好地降低了软件开发的复杂性,可以有效地提高软件交付的效率和质量。组件化的软件开发方法不单纯是一种开发方法论,它是以组件化的软件架构为基础,以组件构建为核心,通过组件的组合、复用形成应用,使应用具有较高的可配置性和可扩展性,极大提高应用交付的效率,同时也提高了应用的质量。
组件化的软件开发方法包含:组件化的架构框架和一套完整的组件化设计开发过程。
一、 组件化的软件架构
组件化的软件架构是一种架构模式,在这种架构模式下,软件系统由一系列的组件构成,这些组件通过组合、复用形成各种不同的应用。
1.组件的概念
组件是一组功能相关的逻辑、数据的聚合,组件是自包含和完备的,通常以一组完备的API形式开放给使用者,使用者不需要了解组件内部的逻辑,只需要关注API的使用,组件的实现逻辑和依赖由组件自己负责。按职能可将组件分为技术组件和业务组件。业务组件是把一组相关的业务逻辑封装为一个组件,也称为管理逻辑组件;按层次可以分为框架组件、平台组件、通用管理逻辑组件、领域管理逻辑组件、行业管理逻辑组件、个性化管理逻辑组件等;按来源可以分为开源组件、商业组件、自研组件等。
2.组件的特点
一个设计良好的组件应该具备如下五个特点:
(1)可管理
组件是基于统一的模型进行设计和实现,遵循统一的技术规范,由统一的元数据进行描述,有清晰的分类和分层,可由组件工具进行统一管理,以规范一致的模式进行使用。
(2)可复用
可复用是组件的一个核心特点。通常组件都是经过良好的设计和封装的,可以被多个场景复用。只有能够复用,才能更好地发挥组件的价值。
(3)可配置
为了更好地复用,组件在不同的场景下使用时不需要去修改组件自身,通常组件需要把在不同场景下使用可能会变化的作为可变参数,允许使用者通过配置不同的值,来满足不同使用场景下的需求,使组件具有更好的可复用性。可配置的内容通常包括环境信息、参数、规则、模型属性等。
(4)可扩展
在使用组件的过程中,当通过配置也无法满足场景化的使用需求时,组件的可扩展性就变得尤其重要,如果一个组件不具备可扩展性,将极大降低组件的复用价值。组件的扩展性通常可以通过良好的设计来实现,如支持继承,可局部逻辑重写;支持事件,通过前置后置事件,允许使用定制规则和逻辑,就可以更好地满足不同场景下的个性化使用需求,提高组件的可复用性,发挥出组件更大的价值。
(5)可融入
为了更好地复用,组件应该具备可融入性,遵循标准的技术规范,可以非侵入式地融入异构系统。组件本身具有较好的适应性,可以和不同的平台和应用系统融为一体,比如界面风格、接口兼容性等,以更好地发挥组件的复用价值。
3.组件框架
组件框架提供对组件全生命周期管理的规范、代码实现框架和管理工具。
二、 组件化的软件开发过程
在基于组件化架构的软件系统中,开发过程的一个显著特点就是在各个阶段都需要关注和组件相关的内容,下面分阶段进行叙述:
1.产品规划
产品规划阶段需要基于组件化的思路,形成产品的组件视图。按照企业架构的规划方法,在应用架构和技术架构中规划出组件视图,业务架构则不需要。应用架构中的组件视图是从应用功能角度来进行规划设计的,技术架构中的组件视图是从实现角度进行规划设计的,同时要考虑第三方组件的引入和统一管理。
2.分析设计
在基于组件化软件开发过程的分析设计阶段,会增加一个组件化的分析设计。通常在需求分析完成后实现设计之前进行。这个阶段的主要任务分为如下三个:
(1)组件分析抽象
在组件化的开发方法中,我们首先需要分析出当前需求是由哪些组件构成的,可以采取如下方法:
第一步,需要对管理和控制过程进行分析、抽象。遵循抽象化原则,对业务需求进行分析,找出当前管理和控制过程中的共性和个性事项(事项可以理解为用例,这个过程可以理解为用例分析)。
第二步,把所有的事项进一步分解为最基本的动作单元。把一个事项设计为一个组件可能粒度较粗,不符合组件的基本特征。我们需要对事项进一步分解为更小的、高度内聚的、有较强独立性的最基本的动作单元。
第三步,每个单元都用一个组件来实现。把每个基本的动作单元定义为一个组件,可以最大程度地解耦组件,使组件可以更灵活地组装和复用。
(2)组件关系矩阵
通过组件分析抽象,可以得出当前需求是由哪些组件构成的,随后可对这些组件之间的关系进行分析,形成组件矩阵视图,确定组件实现策略。是自研、使用开源组件还是采购商业组件?如自研,是扩展现有组件还是实现新的组件?
(3)组件接口设计
在此阶段,还需要设计出每个组件的公开的API接口规约,确定组件的基本结构,如:是一个前端组件还是后端组件,或者是前后端都有的组件?组件支持的使用模式和部署模式。
3.组件开发
在开发阶段,需要按照统一组件框架的规范进行开发。在前期分析设计阶段的成果基础上,进一步基于领域驱动设计的思想细化设计,更多关注组件的可配置性和可扩展性设计,并基于低代码平台进行实现和交付。
4.组件使用
组件发布后可供使用。一个或多个组件可以组合形成一个复合组件,也可以组合、复用形成应用功能。组件的使用会走相应的流程控制,整个使用过程通常会被日志记录。根据组件特点,使用方式可能也存在差异。主要有四种使用模式:
(1)直接API调用
每个组件都会有一组公开的API,直接调用是最简单的方式。此种形式下,使用者对组件形成直接依赖,通常需要引用组件的代码发布包,如服务端的jar包或客户端的js文件。
(2)页面Url调用
有些有用户界面的组件,则可以通过页面Url直接引用的方式来使用。比如在某功能页面中直接打开组件页面进行操作。通常这种类型的组件页面具有良好的可融入性,可以适应不同场景下的界面风格。此模式下使用者和组件如果是间接依赖,则把一个或多个类似特性的组件统一独立部署,直接依赖则是和使用者部署在一起。
(3)控件模式
有些组件有用户界面,同时还以UI控件的模式呈现。则可以把这些组件配置集成到界面设计工具中,以拖拽的方式可视化地使用,可对组件的属性、事件等进行配置,极大简化组件的使用。通常这种模式下使用者和组件采用间接依赖的模式,把类似特性的控件统一独立部署,供所有使用者以一致方式使用。
(4)服务模式
一些功能比较复杂、使用形式多样,并且具备较强的独立性的组件,可以以服务的模式使用。组件可以独立发布为一个微服务,使用者通过RESTFUL服务的模式调用组件的相关功能。有些组件的服务端也可以和使用者部署到一起,同时把API发布为RESTFUL服务,以服务的模式供使用者调用。
5.组件运维
组件运维包含组件的缺陷修复和版本管理等。组件设计时通常应该遵循基本的开闭原则,已经被使用的组件的接口不允许修改,以确保组件在缺陷修复和版本升级时可以保持最大的兼容性,降低运维的复杂性。
6.组件管理
在组件化架构的软件系统中,通常会有很多的组件,这些组件是重要的资产,需要统一进行管理。组件管理系统可以对组件的全生命周期进行统一管理,包括组件的设计开发、组件发布、组件使用、组件授权、组件运维分析、组件文档等。
三、 组件化软件开发最佳实践
事物都有两面性,组件化软件开发方法较好地解决了软件复用和软件可配置、可组合性的问题,较好地提升了软件研发的效率和质量。但是,该方法也存在一些不足,如果使用不当,可能无法发挥出组件化软件开发方法的优势,尊龙软件在多年的组件化软件开发方法实践中,总结出了一些最佳实践,分述如下:
1.设计驱动
基于组件化的软件开发方法,对研发团队提出了更高的要求,需要团队有更高的分析设计能力,所以在软件开发的过程中一定要更关注组件的设计,做好产品的整体规划和设计,以组件为核心,遵循良好的设计原则,对组件的分层、组件的粒度、组件接口优先进行设计。
2.独立团队
在组件化的软件架构中,一个系统由很多组件组合复用形成,这些组件之间会形成复杂的关系网,从另一个方面增加了系统的复杂性,在开发和使用过程中会额外增加沟通成本和运维成本。为解决这个问题,建议每个组件都由独立的团队研发。组件本身就具备自包含和完备性,有一定的独立性,可以由一个团队独立完成,通过良好的接口设计和文档样例,减少团队的沟通,简化组件的使用,通过完善的日志和运维工具,降低组件运维难度。对于一些通用性强、复杂性高的组件,可以成立专门的组件研发团队进行研发。
3.敏捷交付
组件化的软件开发方法和敏捷开发方法结合起来,以迭代的方式进行交付,可以更有效地提高整体软件交付的效率和质量。
4.一体化协同
组件化的软件开发方法同样涉及到软件研发的各个不同阶段,涉及到人、过程、工具的相互协作。如何让各个不同阶段的成果复用,让不同角色的人能够共同高效地参与,过程措施如何更好地落实和管理,组件资产如何更有效地管理,没有一个很好的平台工具支持是很难做到的。尊龙软件研发的尊龙九天智能一体化平台把先进软件工程理论和实践融为一体,涵盖了从需求、设计、开发、测试、部署、应用、监控、运维的信息系统全生命周期管理,提供的云原生、一体化协同设计、智能低代码开发、智能组件等能力,完整支持组件化软件开发方法,同时结合多种软件开发方法,充分发挥组件化软件开发方法的优势,全面提升企业的信息技术创新能力。
组件化软件开发方法,在提升软件研发的效率和质量上有着独特的优势。基于组件化的架构设计和一套完整的组件化的设计开发过程,结合一体化的协同研发平台和工具,通过搭积木的方式完成基于组件的组合、复用,形成的可组合、可配置、可扩展的应用系统,可以随需而变地满足客户越来越复杂多变的业务需求,加速企业的数字化转型。