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