當前位置: 首頁 > 走進企業(yè) > 高端對話

《管見》畢偉:組件化軟件開發(fā)方法

中國電力網(wǎng)發(fā)布時間:2022-12-07 17:26:04

在軟件工程領域,軟件的復用是一種很好地解決軟件成本和質量的方式,而組件化軟件開發(fā)是一種非常好的實現(xiàn)軟件復用的開發(fā)方法。遠光軟件從20年前就開始使用組件化的方式進行軟件的設計和開發(fā),尤其關注業(yè)務邏輯的組件化,把這種類型的組件稱為管理邏輯組件,通過對管理邏輯組件的組裝、復用,形成可組合、可配置的應用,可以隨需應變地滿足不同客戶的個性化需求,能極大提高軟件交付的效率和質量。本文從組件化的軟件架構、組件化軟件開發(fā)過程及最佳實踐幾個方面對組件化軟件開發(fā)方法進行論述。

軟件開發(fā)是一項復雜的系統(tǒng)工程,軟件產(chǎn)品交付的效率和質量,一直是軟件工程領域持續(xù)優(yōu)化改進的方向,也因此誕生了很多種軟件開發(fā)方法。其中,組件化軟件開發(fā)方法以松耦合和高可復用性,較好地降低了軟件開發(fā)的復雜性,可以有效地提高軟件交付的效率和質量。組件化的軟件開發(fā)方法不單純是一種開發(fā)方法論,它是以組件化的軟件架構為基礎,以組件構建為核心,通過組件的組合、復用形成應用,使應用具有較高的可配置性和可擴展性,極大提高應用交付的效率,同時也提高了應用的質量。

組件化的軟件開發(fā)方法包含:組件化的架構框架和一套完整的組件化設計開發(fā)過程。
一、 組件化的軟件架構

組件化的軟件架構是一種架構模式,在這種架構模式下,軟件系統(tǒng)由一系列的組件構成,這些組件通過組合、復用形成各種不同的應用。

1.組件的概念

組件是一組功能相關的邏輯、數(shù)據(jù)的聚合,組件是自包含和完備的,通常以一組完備的API形式開放給使用者,使用者不需要了解組件內部的邏輯,只需要關注API的使用,組件的實現(xiàn)邏輯和依賴由組件自己負責。按職能可將組件分為技術組件和業(yè)務組件。業(yè)務組件是把一組相關的業(yè)務邏輯封裝為一個組件,也稱為管理邏輯組件;按層次可以分為框架組件、平臺組件、通用管理邏輯組件、領域管理邏輯組件、行業(yè)管理邏輯組件、個性化管理邏輯組件等;按來源可以分為開源組件、商業(yè)組件、自研組件等。

2.組件的特點

一個設計良好的組件應該具備如下五個特點:

(1)可管理

組件是基于統(tǒng)一的模型進行設計和實現(xiàn),遵循統(tǒng)一的技術規(guī)范,由統(tǒng)一的元數(shù)據(jù)進行描述,有清晰的分類和分層,可由組件工具進行統(tǒng)一管理,以規(guī)范一致的模式進行使用。

(2)可復用

可復用是組件的一個核心特點。通常組件都是經(jīng)過良好的設計和封裝的,可以被多個場景復用。只有能夠復用,才能更好地發(fā)揮組件的價值。

(3)可配置

為了更好地復用,組件在不同的場景下使用時不需要去修改組件自身,通常組件需要把在不同場景下使用可能會變化的作為可變參數(shù),允許使用者通過配置不同的值,來滿足不同使用場景下的需求,使組件具有更好的可復用性??膳渲玫膬热萃ǔ0ōh(huán)境信息、參數(shù)、規(guī)則、模型屬性等。

(4)可擴展

在使用組件的過程中,當通過配置也無法滿足場景化的使用需求時,組件的可擴展性就變得尤其重要,如果一個組件不具備可擴展性,將極大降低組件的復用價值。組件的擴展性通??梢酝ㄟ^良好的設計來實現(xiàn),如支持繼承,可局部邏輯重寫;支持事件,通過前置后置事件,允許使用定制規(guī)則和邏輯,就可以更好地滿足不同場景下的個性化使用需求,提高組件的可復用性,發(fā)揮出組件更大的價值。

(5)可融入

為了更好地復用,組件應該具備可融入性,遵循標準的技術規(guī)范,可以非侵入式地融入異構系統(tǒng)。組件本身具有較好的適應性,可以和不同的平臺和應用系統(tǒng)融為一體,比如界面風格、接口兼容性等,以更好地發(fā)揮組件的復用價值。

3.組件框架

組件框架提供對組件全生命周期管理的規(guī)范、代碼實現(xiàn)框架和管理工具。
二、 組件化的軟件開發(fā)過程

在基于組件化架構的軟件系統(tǒng)中,開發(fā)過程的一個顯著特點就是在各個階段都需要關注和組件相關的內容,下面分階段進行敘述:

1.產(chǎn)品規(guī)劃

產(chǎn)品規(guī)劃階段需要基于組件化的思路,形成產(chǎn)品的組件視圖。按照企業(yè)架構的規(guī)劃方法,在應用架構和技術架構中規(guī)劃出組件視圖,業(yè)務架構則不需要。應用架構中的組件視圖是從應用功能角度來進行規(guī)劃設計的,技術架構中的組件視圖是從實現(xiàn)角度進行規(guī)劃設計的,同時要考慮第三方組件的引入和統(tǒng)一管理。

2.分析設計

在基于組件化軟件開發(fā)過程的分析設計階段,會增加一個組件化的分析設計。通常在需求分析完成后實現(xiàn)設計之前進行。這個階段的主要任務分為如下三個:

(1)組件分析抽象

在組件化的開發(fā)方法中,我們首先需要分析出當前需求是由哪些組件構成的,可以采取如下方法:

第一步,需要對管理和控制過程進行分析、抽象。遵循抽象化原則,對業(yè)務需求進行分析,找出當前管理和控制過程中的共性和個性事項(事項可以理解為用例,這個過程可以理解為用例分析)。

第二步,把所有的事項進一步分解為最基本的動作單元。把一個事項設計為一個組件可能粒度較粗,不符合組件的基本特征。我們需要對事項進一步分解為更小的、高度內聚的、有較強獨立性的最基本的動作單元。

第三步,每個單元都用一個組件來實現(xiàn)。把每個基本的動作單元定義為一個組件,可以最大程度地解耦組件,使組件可以更靈活地組裝和復用。

(2)組件關系矩陣

通過組件分析抽象,可以得出當前需求是由哪些組件構成的,隨后可對這些組件之間的關系進行分析,形成組件矩陣視圖,確定組件實現(xiàn)策略。是自研、使用開源組件還是采購商業(yè)組件?如自研,是擴展現(xiàn)有組件還是實現(xiàn)新的組件?

(3)組件接口設計

在此階段,還需要設計出每個組件的公開的API接口規(guī)約,確定組件的基本結構,如:是一個前端組件還是后端組件,或者是前后端都有的組件?組件支持的使用模式和部署模式。

3.組件開發(fā)

在開發(fā)階段,需要按照統(tǒng)一組件框架的規(guī)范進行開發(fā)。在前期分析設計階段的成果基礎上,進一步基于領域驅動設計的思想細化設計,更多關注組件的可配置性和可擴展性設計,并基于低代碼平臺進行實現(xiàn)和交付。

4.組件使用

組件發(fā)布后可供使用。一個或多個組件可以組合形成一個復合組件,也可以組合、復用形成應用功能。組件的使用會走相應的流程控制,整個使用過程通常會被日志記錄。根據(jù)組件特點,使用方式可能也存在差異。主要有四種使用模式:

(1)直接API調用

每個組件都會有一組公開的API,直接調用是最簡單的方式。此種形式下,使用者對組件形成直接依賴,通常需要引用組件的代碼發(fā)布包,如服務端的jar包或客戶端的js文件。

(2)頁面Url調用

有些有用戶界面的組件,則可以通過頁面Url直接引用的方式來使用。比如在某功能頁面中直接打開組件頁面進行操作。通常這種類型的組件頁面具有良好的可融入性,可以適應不同場景下的界面風格。此模式下使用者和組件如果是間接依賴,則把一個或多個類似特性的組件統(tǒng)一獨立部署,直接依賴則是和使用者部署在一起。

(3)控件模式

有些組件有用戶界面,同時還以UI控件的模式呈現(xiàn)。則可以把這些組件配置集成到界面設計工具中,以拖拽的方式可視化地使用,可對組件的屬性、事件等進行配置,極大簡化組件的使用。通常這種模式下使用者和組件采用間接依賴的模式,把類似特性的控件統(tǒng)一獨立部署,供所有使用者以一致方式使用。

(4)服務模式

一些功能比較復雜、使用形式多樣,并且具備較強的獨立性的組件,可以以服務的模式使用。組件可以獨立發(fā)布為一個微服務,使用者通過RESTFUL服務的模式調用組件的相關功能。有些組件的服務端也可以和使用者部署到一起,同時把API發(fā)布為RESTFUL服務,以服務的模式供使用者調用。

5.組件運維

組件運維包含組件的缺陷修復和版本管理等。組件設計時通常應該遵循基本的開閉原則,已經(jīng)被使用的組件的接口不允許修改,以確保組件在缺陷修復和版本升級時可以保持最大的兼容性,降低運維的復雜性。

6.組件管理

在組件化架構的軟件系統(tǒng)中,通常會有很多的組件,這些組件是重要的資產(chǎn),需要統(tǒng)一進行管理。組件管理系統(tǒng)可以對組件的全生命周期進行統(tǒng)一管理,包括組件的設計開發(fā)、組件發(fā)布、組件使用、組件授權、組件運維分析、組件文檔等。
三、 組件化軟件開發(fā)最佳實踐

事物都有兩面性,組件化軟件開發(fā)方法較好地解決了軟件復用和軟件可配置、可組合性的問題,較好地提升了軟件研發(fā)的效率和質量。但是,該方法也存在一些不足,如果使用不當,可能無法發(fā)揮出組件化軟件開發(fā)方法的優(yōu)勢,遠光軟件在多年的組件化軟件開發(fā)方法實踐中,總結出了一些最佳實踐,分述如下:

1.設計驅動

基于組件化的軟件開發(fā)方法,對研發(fā)團隊提出了更高的要求,需要團隊有更高的分析設計能力,所以在軟件開發(fā)的過程中一定要更關注組件的設計,做好產(chǎn)品的整體規(guī)劃和設計,以組件為核心,遵循良好的設計原則,對組件的分層、組件的粒度、組件接口優(yōu)先進行設計。

2.獨立團隊

在組件化的軟件架構中,一個系統(tǒng)由很多組件組合復用形成,這些組件之間會形成復雜的關系網(wǎng),從另一個方面增加了系統(tǒng)的復雜性,在開發(fā)和使用過程中會額外增加溝通成本和運維成本。為解決這個問題,建議每個組件都由獨立的團隊研發(fā)。組件本身就具備自包含和完備性,有一定的獨立性,可以由一個團隊獨立完成,通過良好的接口設計和文檔樣例,減少團隊的溝通,簡化組件的使用,通過完善的日志和運維工具,降低組件運維難度。對于一些通用性強、復雜性高的組件,可以成立專門的組件研發(fā)團隊進行研發(fā)。

3.敏捷交付

組件化的軟件開發(fā)方法和敏捷開發(fā)方法結合起來,以迭代的方式進行交付,可以更有效地提高整體軟件交付的效率和質量。

4.一體化協(xié)同

組件化的軟件開發(fā)方法同樣涉及到軟件研發(fā)的各個不同階段,涉及到人、過程、工具的相互協(xié)作。如何讓各個不同階段的成果復用,讓不同角色的人能夠共同高效地參與,過程措施如何更好地落實和管理,組件資產(chǎn)如何更有效地管理,沒有一個很好的平臺工具支持是很難做到的。遠光軟件研發(fā)的遠光九天智能一體化平臺把先進軟件工程理論和實踐融為一體,涵蓋了從需求、設計、開發(fā)、測試、部署、應用、監(jiān)控、運維的信息系統(tǒng)全生命周期管理,提供的云原生、一體化協(xié)同設計、智能低代碼開發(fā)、智能組件等能力,完整支持組件化軟件開發(fā)方法,同時結合多種軟件開發(fā)方法,充分發(fā)揮組件化軟件開發(fā)方法的優(yōu)勢,全面提升企業(yè)的信息技術創(chuàng)新能力。

組件化軟件開發(fā)方法,在提升軟件研發(fā)的效率和質量上有著獨特的優(yōu)勢?;诮M件化的架構設計和一套完整的組件化的設計開發(fā)過程,結合一體化的協(xié)同研發(fā)平臺和工具,通過搭積木的方式完成基于組件的組合、復用,形成的可組合、可配置、可擴展的應用系統(tǒng),可以隨需而變地滿足客戶越來越復雜多變的業(yè)務需求,加速企業(yè)的數(shù)字化轉型。

評論

用戶名:   匿名發(fā)表  
密碼:  
驗證碼:
最新評論0