Frank Buschmann

Applying Patterns
 

上一頁 下一頁


Piecemeal Growth逐個成長)

Context我們想要設計一個新的軟體系統。

Problem:

我們要如何確定這個系統是結構完善並組織良好的。亦即它的架構必須符合特定功能性,或非功能性的需求,並且讓軟體架構師、系統設計師與程式設計師都能直覺的感到很自然。有三股力量必須加以平衡:

 


 

Solution:

逐個成長的方式來構建系統架構 [Gab96]。本流程是一種展開的過程-即先考慮整體再處理細部零件 [Ale79];以及控制系統改良與細部設計的程序。展開是指裝修空間(differentiating space;譯者按:語出建築學;是指在蓋房子的時候,先把大樓的骨架及外觀蓋好後,再依據當時需要來調整內部的空間,如裝潢與隔間等):即把某個給定的結構用新元件來加以擴充,或把某些現有的元件以更適合的-即更符合整體大結構的結構來替代。

應用於軟體建構上,這表示要先定義一個架構願景:也就是系統的基本結構與後續改良的設計原則。此架構提供了逐個成長發展流程的基礎,而設計原則影響後續改良步驟的結果。此外,架構願景還可協助架構設計師與程式設計師溝通。

接著以逐步細緻化的方式來展開這個骨架結構:即一個抽象層次接著一個抽象層次地,並依據每個不同的設計問題來展開。就這樣地,我們分別地考慮每一個問題本身的需求,再由架構願景以及包含此解決方案的上層結構 ,來管控展開的過程。而我們所加入這個架構的每一部份都像一個新的整體,可以一直被展開直到整個架構完成為止。

然而,若是發生了某個設計問題的最佳化解決方案,無法與須包含此方案的其他結構整合時;便可使用以修補替代大堆頭式設計的方式來調整現存的結構。

如同上述討論的結果,逐個成長程序可以幫助我們構建一個明確而連貫的軟體架構。且由於逐步細緻化以修補替代大堆頭式設計兩者間相互平衡的影響,我們可以 使用三個觀點,來觀察每一個設計問題:即系統觀點、問題本身的觀點及會影響解決方案的低階議題的觀點。在每一個抽象化層次中,系統的設計都遵循共同的準則;從它初具的結構 ,直到每一個實作的細節都是如此。

 

Example:


假設我們要建構一個互動式的軟體系統,那麼我們可以採用Model-View-Controller 樣式 [BMRSS96] 來定義它的架構願景Model-View-Controller樣式引入了一種結構,它把核心功能從資訊的控制及顯示中抽離出來。

 

藉由逐步細緻化樣式,我們可以展開此架構大綱。舉例來說,在 Model-View- Controller樣式中,三個元件間的溝通可以透過發行-訂閱(Publisher - Subscriber)觀察者(Observer)樣式來協助。Model Controller之間的關係可以經由應用 Command Processor 樣式 [BMRSS96] 給予細緻化,ViewModel之間的關係可以使用 View Handler 樣式 [BMRSS96] 來處理。Model本身則可以依據 Layers 樣式 [BMRSS96] 予以結構化。


現在,我們可以更進一步地將 Command Processor 細緻化,SingletonCommand Composite樣式[GHJV95] 可以派上用場。其他的部分,則可以使用其它的樣式來細緻化,並展開其細部結構。

 


一步接著一步地,系統會逐漸地成長,直到其完整的架構被定義完成為止。空間會被我們所應用的樣式逐漸裝修,但總是會依據我們所要精練的大結構中,所事先描述的準則來進行。


上一頁 下一頁