淺談組件復(fù)用與服務(wù)復(fù)用
復(fù)用是一個(gè)很不錯(cuò)的概念,深得“不要重復(fù)制造輪子”的思想精髓。然而具體實(shí)施起來一定會(huì)遇到很多問題,就好像那個(gè)DRY理論一樣,不是隨隨便便就可以做到的。下面對開發(fā)過程中的兩種復(fù)用形式:組件復(fù)用與服務(wù)復(fù)用進(jìn)行了簡單的分析。
我們經(jīng)常談到復(fù)用,在一個(gè)企業(yè)中,根據(jù)不同的場景,復(fù)用的形態(tài)和方式是不同的,大體可以分為組件復(fù)用和服務(wù)復(fù)用兩種方式。組件是按照一定的標(biāo)準(zhǔn)封裝的軟件實(shí)體,可以是為完成某種功能提供的API的集合,也可以是完成某一個(gè)技術(shù)和業(yè)務(wù)功能的實(shí)體;服務(wù)是通過組件暴露出來的供外部調(diào)用的接口和協(xié)議信息。服務(wù)不包括具體功能邏輯實(shí)體,靠組件來實(shí)現(xiàn)。
企業(yè)架構(gòu)中通常提到的技術(shù)復(fù)用和業(yè)務(wù)復(fù)用,可以簡單地映射到組件和服務(wù)上。技術(shù)層面的復(fù)用一般是一些API、或者抽象出的框架,比如日志,它可以稱之為組件,但是日志組件提供了記錄日志的API,并沒有包括具體的日志內(nèi)容,我們在使用的時(shí)候是通過日志組件提供的API來記錄相應(yīng)的日志內(nèi)容;再比如業(yè)界提供的一些框架,它是對應(yīng)用的高度抽象,自身也不包括具體的應(yīng)用或業(yè)務(wù)邏輯,這些需要我們在軟件實(shí)施過程中自己灌輸進(jìn)去。并且技術(shù)層面的復(fù)用往往是每個(gè)系統(tǒng)中都有該組件的相應(yīng)實(shí)體,比如A系統(tǒng)中會(huì)有日志組件、B系統(tǒng)中也會(huì)有日志組件。業(yè)務(wù)層面的復(fù)用通常采用調(diào)用服務(wù)的方式,是一種遠(yuǎn)程訪問,業(yè)務(wù)服務(wù)通常在一個(gè)企業(yè)中物理上只有一個(gè)實(shí)體,其他的系統(tǒng)通過服務(wù)來調(diào)用,比如銀行目前的渠道有網(wǎng)上銀行、ATM、手機(jī)銀行、電話銀行、柜臺(tái)等,這些系統(tǒng)中是沒有存取款業(yè)務(wù)邏輯實(shí)體的,存取款的交易都是通過調(diào)用主機(jī)相應(yīng)的服務(wù)來實(shí)現(xiàn)的。
所以,對于組件和服務(wù)的管理其實(shí)也有不同的策略,組件要管理的是軟件實(shí)體,服務(wù)管理的是服務(wù)的接口和協(xié)議信息,并且服務(wù)有一系列的特征,這個(gè)網(wǎng)上也有很多描述,可以根據(jù)不同需求調(diào)整服務(wù)的實(shí)現(xiàn)。當(dāng)前服務(wù)的協(xié)議通常有WebService、HTTP、EJB等,對應(yīng)其組件的實(shí)現(xiàn)可以采用不同的技術(shù),比如Java、C/C++等等。
以上對組件復(fù)用與服務(wù)復(fù)用的一些淺談,希望對大家有所幫助。
【編輯推薦】