從Spring ioc中引申出的一句話是比較經(jīng)典的:別來找我,在那等著,我會(huì)去找你。
被動(dòng)模式,與這個(gè)概念很相近:別把東西給我,告訴我在哪能取到它。
被動(dòng)模式可以理解為三種模式: 開發(fā)模式, 部署模式,云模式。
一. 開發(fā)模式
實(shí)際上在我們的代碼開發(fā)中,就一直在使用這種開發(fā)模式,例如

class ClassB
{ InterfaceA ref = createInterfaceA(); }
使用create方法,而不是直接new。也就是說告訴了ClassB,在create方法中獲得InterfaceA.
這是一個(gè)很簡(jiǎn)單的例子,受它直接影響的,是系統(tǒng)的擴(kuò)展性。在一個(gè)可擴(kuò)展(伸縮)的系統(tǒng)中,例如在Eclipse產(chǎn)品程序,或是基于可插拔模塊的應(yīng)用程序開發(fā)中,則是隨處可見的被動(dòng)應(yīng)用模式,這樣的系統(tǒng),對(duì)于現(xiàn)有組成部分在開發(fā)過程中很容易解決,但是對(duì)于未知組成部分(擴(kuò)展性),只能通過被動(dòng)模式解決,例如Extwind,在基于osgi的web應(yīng)用程序中,Dynamic IoC和Extension-Point所做的事。
二. 部署模式
目前web應(yīng)用程序的部署,可以總結(jié)為這樣一句話:需要部署的時(shí)候就來找我,別忘了把東西帶上!
這與現(xiàn)在的服務(wù)理念完全相悖,快遞公司都有上門取貨這項(xiàng)服務(wù)。
如果以開發(fā)模式來看,這就屬于 Deploy deploy = new FixedDeploy() ,而不是getDeploy()。
這是一種陳舊的部署模式,毫無擴(kuò)展性和伸縮性,它讓很多原本簡(jiǎn)單的事情變得很復(fù)雜,雖然這是一種部署模式,但是它將影響到后來的架構(gòu)模式。
Extwind的部署模式:需要部署的時(shí)候,給我個(gè)電話,告訴我東西在哪,我去取。
這個(gè)“電話”就是一個(gè)部署描述符(Deploy Description),它描述了部署方式,應(yīng)用程序或模塊的存放地(Repository)等細(xì)節(jié),Extwind通過這個(gè)描述符從指定的Repository中獲取應(yīng)用程序并部署。
如果以面向?qū)ο髞砜此?,可以將這個(gè)描述符理解為一個(gè)interface,它將影響到部署模式的擴(kuò)展性和伸縮性。
Extwind中的repository與maven中的repository很像,對(duì)于它的定義,主要有2個(gè)方面:
1. 組件庫,這可以通過maven來幫助完成
2. 部署庫,由應(yīng)用程序生成的受支持的部署庫,部署時(shí),只需要將描述符指向該庫或庫中的某些組件。
三. 云模式
用一個(gè)例子來理解云模式:
新增一臺(tái)386,可以為云增加1%的計(jì)算能力;
新增一個(gè)集群環(huán)境,可以為云增加20%的計(jì)算能力;
這里的計(jì)算能力就是一種資源,可以理解為服務(wù)能力。之前提到過,對(duì)于未知資源,只能通過被動(dòng)模式來獲取,Extwind將會(huì)通過云模式來提供可伸縮的服務(wù)環(huán)境。
Extwind要做的事情只有一件:讓原本簡(jiǎn)單的事情,不要太復(fù)雜。
posted on 2009-07-02 15:24
Phrancol Yang 閱讀(362)
評(píng)論(0) 編輯 收藏