軟件開發(fā)是一項復(fù)雜的系統(tǒng)工程,軟件產(chǎn)品交付的效率和質(zhì)量,一直是軟件工程領(lǐng)域持續(xù)優(yōu)化改進的方向,也因此誕生了很多種軟件開發(fā)方法。其中,組件化軟件開發(fā)方法以松耦合和高可復(fù)用性,較好地降低了軟件開發(fā)的復(fù)雜性,可以有效地提高軟件交付的效率和質(zhì)量。組件化的軟件開發(fā)方法不單純是一種開發(fā)方法論,它是以組件化的軟件架構(gòu)為基礎(chǔ),以組件構(gòu)建為核心,通過組件的組合、復(fù)用形成應(yīng)用,使應(yīng)用具有較高的可配置性和可擴展性,極大提高應(yīng)用交付的效率,同時也提高了應(yīng)用的質(zhì)量。
組件化的軟件開發(fā)方法包含:組件化的架構(gòu)框架和一套完整的組件化設(shè)計開發(fā)過程。
一、 組件化的軟件架構(gòu)
組件化的軟件架構(gòu)是一種架構(gòu)模式,在這種架構(gòu)模式下,軟件系統(tǒng)由一系列的組件構(gòu)成,這些組件通過組合、復(fù)用形成各種不同的應(yīng)用。
1.組件的概念
組件是一組功能相關(guān)的邏輯、數(shù)據(jù)的聚合,組件是自包含和完備的,通常以一組完備的API形式開放給使用者,使用者不需要了解組件內(nèi)部的邏輯,只需要關(guān)注API的使用,組件的實現(xiàn)邏輯和依賴由組件自己負責(zé)。按職能可將組件分為技術(shù)組件和業(yè)務(wù)組件。業(yè)務(wù)組件是把一組相關(guān)的業(yè)務(wù)邏輯封裝為一個組件,也稱為管理邏輯組件;按層次可以分為框架組件、平臺組件、通用管理邏輯組件、領(lǐng)域管理邏輯組件、行業(yè)管理邏輯組件、個性化管理邏輯組件等;按來源可以分為開源組件、商業(yè)組件、自研組件等。
2.組件的特點
一個設(shè)計良好的組件應(yīng)該具備如下五個特點:
(1)可管理
組件是基于統(tǒng)一的模型進行設(shè)計和實現(xiàn),遵循統(tǒng)一的技術(shù)規(guī)范,由統(tǒng)一的元數(shù)據(jù)進行描述,有清晰的分類和分層,可由組件工具進行統(tǒng)一管理,以規(guī)范一致的模式進行使用。
(2)可復(fù)用
可復(fù)用是組件的一個核心特點。通常組件都是經(jīng)過良好的設(shè)計和封裝的,可以被多個場景復(fù)用。只有能夠復(fù)用,才能更好地發(fā)揮組件的價值。
(3)可配置
為了更好地復(fù)用,組件在不同的場景下使用時不需要去修改組件自身,通常組件需要把在不同場景下使用可能會變化的作為可變參數(shù),允許使用者通過配置不同的值,來滿足不同使用場景下的需求,使組件具有更好的可復(fù)用性。可配置的內(nèi)容通常包括環(huán)境信息、參數(shù)、規(guī)則、模型屬性等。
(4)可擴展
在使用組件的過程中,當(dāng)通過配置也無法滿足場景化的使用需求時,組件的可擴展性就變得尤其重要,如果一個組件不具備可擴展性,將極大降低組件的復(fù)用價值。組件的擴展性通??梢酝ㄟ^良好的設(shè)計來實現(xiàn),如支持繼承,可局部邏輯重寫;支持事件,通過前置后置事件,允許使用定制規(guī)則和邏輯,就可以更好地滿足不同場景下的個性化使用需求,提高組件的可復(fù)用性,發(fā)揮出組件更大的價值。
(5)可融入
為了更好地復(fù)用,組件應(yīng)該具備可融入性,遵循標準的技術(shù)規(guī)范,可以非侵入式地融入異構(gòu)系統(tǒng)。組件本身具有較好的適應(yīng)性,可以和不同的平臺和應(yīng)用系統(tǒng)融為一體,比如界面風(fēng)格、接口兼容性等,以更好地發(fā)揮組件的復(fù)用價值。
3.組件框架
組件框架提供對組件全生命周期管理的規(guī)范、代碼實現(xiàn)框架和管理工具。
二、 組件化的軟件開發(fā)過程
在基于組件化架構(gòu)的軟件系統(tǒng)中,開發(fā)過程的一個顯著特點就是在各個階段都需要關(guān)注和組件相關(guān)的內(nèi)容,下面分階段進行敘述:
1.產(chǎn)品規(guī)劃
產(chǎn)品規(guī)劃階段需要基于組件化的思路,形成產(chǎn)品的組件視圖。按照企業(yè)架構(gòu)的規(guī)劃方法,在應(yīng)用架構(gòu)和技術(shù)架構(gòu)中規(guī)劃出組件視圖,業(yè)務(wù)架構(gòu)則不需要。應(yīng)用架構(gòu)中的組件視圖是從應(yīng)用功能角度來進行規(guī)劃設(shè)計的,技術(shù)架構(gòu)中的組件視圖是從實現(xiàn)角度進行規(guī)劃設(shè)計的,同時要考慮第三方組件的引入和統(tǒng)一管理。
2.分析設(shè)計
在基于組件化軟件開發(fā)過程的分析設(shè)計階段,會增加一個組件化的分析設(shè)計。通常在需求分析完成后實現(xiàn)設(shè)計之前進行。這個階段的主要任務(wù)分為如下三個:
(1)組件分析抽象
在組件化的開發(fā)方法中,我們首先需要分析出當(dāng)前需求是由哪些組件構(gòu)成的,可以采取如下方法:
第一步,需要對管理和控制過程進行分析、抽象。遵循抽象化原則,對業(yè)務(wù)需求進行分析,找出當(dāng)前管理和控制過程中的共性和個性事項(事項可以理解為用例,這個過程可以理解為用例分析)。
第二步,把所有的事項進一步分解為最基本的動作單元。把一個事項設(shè)計為一個組件可能粒度較粗,不符合組件的基本特征。我們需要對事項進一步分解為更小的、高度內(nèi)聚的、有較強獨立性的最基本的動作單元。
第三步,每個單元都用一個組件來實現(xiàn)。把每個基本的動作單元定義為一個組件,可以最大程度地解耦組件,使組件可以更靈活地組裝和復(fù)用。
(2)組件關(guān)系矩陣
通過組件分析抽象,可以得出當(dāng)前需求是由哪些組件構(gòu)成的,隨后可對這些組件之間的關(guān)系進行分析,形成組件矩陣視圖,確定組件實現(xiàn)策略。是自研、使用開源組件還是采購商業(yè)組件?如自研,是擴展現(xiàn)有組件還是實現(xiàn)新的組件?
(3)組件接口設(shè)計
在此階段,還需要設(shè)計出每個組件的公開的API接口規(guī)約,確定組件的基本結(jié)構(gòu),如:是一個前端組件還是后端組件,或者是前后端都有的組件?組件支持的使用模式和部署模式。
3.組件開發(fā)
在開發(fā)階段,需要按照統(tǒng)一組件框架的規(guī)范進行開發(fā)。在前期分析設(shè)計階段的成果基礎(chǔ)上,進一步基于領(lǐng)域驅(qū)動設(shè)計的思想細化設(shè)計,更多關(guān)注組件的可配置性和可擴展性設(shè)計,并基于低代碼平臺進行實現(xiàn)和交付。
4.組件使用
組件發(fā)布后可供使用。一個或多個組件可以組合形成一個復(fù)合組件,也可以組合、復(fù)用形成應(yīng)用功能。組件的使用會走相應(yīng)的流程控制,整個使用過程通常會被日志記錄。根據(jù)組件特點,使用方式可能也存在差異。主要有四種使用模式:
(1)直接API調(diào)用
每個組件都會有一組公開的API,直接調(diào)用是最簡單的方式。此種形式下,使用者對組件形成直接依賴,通常需要引用組件的代碼發(fā)布包,如服務(wù)端的jar包或客戶端的js文件。
(2)頁面Url調(diào)用
有些有用戶界面的組件,則可以通過頁面Url直接引用的方式來使用。比如在某功能頁面中直接打開組件頁面進行操作。通常這種類型的組件頁面具有良好的可融入性,可以適應(yīng)不同場景下的界面風(fēng)格。此模式下使用者和組件如果是間接依賴,則把一個或多個類似特性的組件統(tǒng)一獨立部署,直接依賴則是和使用者部署在一起。
(3)控件模式
有些組件有用戶界面,同時還以UI控件的模式呈現(xiàn)。則可以把這些組件配置集成到界面設(shè)計工具中,以拖拽的方式可視化地使用,可對組件的屬性、事件等進行配置,極大簡化組件的使用。通常這種模式下使用者和組件采用間接依賴的模式,把類似特性的控件統(tǒng)一獨立部署,供所有使用者以一致方式使用。
(4)服務(wù)模式
一些功能比較復(fù)雜、使用形式多樣,并且具備較強的獨立性的組件,可以以服務(wù)的模式使用。組件可以獨立發(fā)布為一個微服務(wù),使用者通過RESTFUL服務(wù)的模式調(diào)用組件的相關(guān)功能。有些組件的服務(wù)端也可以和使用者部署到一起,同時把API發(fā)布為RESTFUL服務(wù),以服務(wù)的模式供使用者調(diào)用。
5.組件運維
組件運維包含組件的缺陷修復(fù)和版本管理等。組件設(shè)計時通常應(yīng)該遵循基本的開閉原則,已經(jīng)被使用的組件的接口不允許修改,以確保組件在缺陷修復(fù)和版本升級時可以保持最大的兼容性,降低運維的復(fù)雜性。
6.組件管理
在組件化架構(gòu)的軟件系統(tǒng)中,通常會有很多的組件,這些組件是重要的資產(chǎn),需要統(tǒng)一進行管理。組件管理系統(tǒng)可以對組件的全生命周期進行統(tǒng)一管理,包括組件的設(shè)計開發(fā)、組件發(fā)布、組件使用、組件授權(quán)、組件運維分析、組件文檔等。
三、 組件化軟件開發(fā)最佳實踐
事物都有兩面性,組件化軟件開發(fā)方法較好地解決了軟件復(fù)用和軟件可配置、可組合性的問題,較好地提升了軟件研發(fā)的效率和質(zhì)量。但是,該方法也存在一些不足,如果使用不當(dāng),可能無法發(fā)揮出組件化軟件開發(fā)方法的優(yōu)勢,遠光軟件在多年的組件化軟件開發(fā)方法實踐中,總結(jié)出了一些最佳實踐,分述如下:
1.設(shè)計驅(qū)動
基于組件化的軟件開發(fā)方法,對研發(fā)團隊提出了更高的要求,需要團隊有更高的分析設(shè)計能力,所以在軟件開發(fā)的過程中一定要更關(guān)注組件的設(shè)計,做好產(chǎn)品的整體規(guī)劃和設(shè)計,以組件為核心,遵循良好的設(shè)計原則,對組件的分層、組件的粒度、組件接口優(yōu)先進行設(shè)計。
2.獨立團隊
在組件化的軟件架構(gòu)中,一個系統(tǒng)由很多組件組合復(fù)用形成,這些組件之間會形成復(fù)雜的關(guān)系網(wǎng),從另一個方面增加了系統(tǒng)的復(fù)雜性,在開發(fā)和使用過程中會額外增加溝通成本和運維成本。為解決這個問題,建議每個組件都由獨立的團隊研發(fā)。組件本身就具備自包含和完備性,有一定的獨立性,可以由一個團隊獨立完成,通過良好的接口設(shè)計和文檔樣例,減少團隊的溝通,簡化組件的使用,通過完善的日志和運維工具,降低組件運維難度。對于一些通用性強、復(fù)雜性高的組件,可以成立專門的組件研發(fā)團隊進行研發(fā)。
3.敏捷交付
組件化的軟件開發(fā)方法和敏捷開發(fā)方法結(jié)合起來,以迭代的方式進行交付,可以更有效地提高整體軟件交付的效率和質(zhì)量。
4.一體化協(xié)同
組件化的軟件開發(fā)方法同樣涉及到軟件研發(fā)的各個不同階段,涉及到人、過程、工具的相互協(xié)作。如何讓各個不同階段的成果復(fù)用,讓不同角色的人能夠共同高效地參與,過程措施如何更好地落實和管理,組件資產(chǎn)如何更有效地管理,沒有一個很好的平臺工具支持是很難做到的。遠光軟件研發(fā)的遠光九天智能一體化平臺把先進軟件工程理論和實踐融為一體,涵蓋了從需求、設(shè)計、開發(fā)、測試、部署、應(yīng)用、監(jiān)控、運維的信息系統(tǒng)全生命周期管理,提供的云原生、一體化協(xié)同設(shè)計、智能低代碼開發(fā)、智能組件等能力,完整支持組件化軟件開發(fā)方法,同時結(jié)合多種軟件開發(fā)方法,充分發(fā)揮組件化軟件開發(fā)方法的優(yōu)勢,全面提升企業(yè)的信息技術(shù)創(chuàng)新能力。
組件化軟件開發(fā)方法,在提升軟件研發(fā)的效率和質(zhì)量上有著獨特的優(yōu)勢。基于組件化的架構(gòu)設(shè)計和一套完整的組件化的設(shè)計開發(fā)過程,結(jié)合一體化的協(xié)同研發(fā)平臺和工具,通過搭積木的方式完成基于組件的組合、復(fù)用,形成的可組合、可配置、可擴展的應(yīng)用系統(tǒng),可以隨需而變地滿足客戶越來越復(fù)雜多變的業(yè)務(wù)需求,加速企業(yè)的數(shù)字化轉(zhuǎn)型。
評論