Frank Buschmann

Applying Patterns
 

上一頁 下一頁


Step-wise Refinement(逐步細緻化)

Context:我們正在逐個成長程序的起點,並嘗試指定一個軟體架構。

Problem:

我們如何以最有效率的方式,來解決一個給定的設計問題呢?有三個影響因素必須考慮:

 

Solution:


逐步細緻化的方式來解決設計問題。以新的元件及關聯來擴充給定的架構,並將現有的元件逐一詳細化。選擇適當的樣式來協助這些細緻化的工作。這些樣式不應只是著重於解決手邊的設計問題,它們的特性 ,也必須同時符合我們所要細緻化結構的設計準則及其特性。

 

將無法以單一樣式解決的複雜問題,切割成幾個小問題;使得它可以利用多個樣式的結合來解決。切記一種問題只用一個機制解決: 若某個設計問題與我們之前處理過的問題類似,則必須以類似的處理方式解決;即使用同樣的樣式及設計準則。這樣可以幫助我們避開複雜及拼湊式的設計結構。以一次一個樣式的方式應用所選擇的樣式以支援正確的實作。

當要細緻化自成體系(self-contained)的次系統或大型元件時,都必須先定義一個穩定的設計核心。這可以支援我們定義出一種結構-它可以被擴充及調適 ,而無須修改它的關鍵元件與抽象概念。若某個特定的設計問題找不到合適的樣式來解決時,使用適當的分析工具與設計方法來建立解決方案。或者;更好的是;以樣式來引導問題的分析及解決方案的設計,例如在 [Coad95] 中所提到的樣式。 

Example:

我們以實作一個擲骰子遊戲;'Game of Greed' [Ree92];的互動程式為例。就像許多有著人機介面的系統一樣,它的基礎架構是可以藉由 Model-View- Controller [BMRSS96] 樣式來定義。

若要細緻化此結構中的 Model 部分,我們可以應用某個領域相關的樣式;此樣式會提供一個一般化的結構,以組織擲骰子遊戲 [Ree92]。這個樣式定義了三種參與者-遊戲元件表示遊戲本身;用以管理遊戲的規則及查核骰子投擲的有效性。遊戲組織者元件;用以管理目前的排名、參賽者以及遊戲的進度。參賽者元件;代表玩這個遊戲的參與者。

在下一步的細緻化步驟裡,我們將定義在這擲骰子遊戲中,三個元件間的基礎合作關係。經由問題的分析顯示,這個問題非常類似我們之前處理 Model- View-Controller 樣式中,三個元件間合作關係的問題。因此我們可再次利用類似的方式來解決問題;應用發行-訂閱(Publisher-Subscriber)觀察者(Observer)樣式。

在我們所設計的結構中,遊戲元件可以利用代表遊戲規則的元件,以及代表骰子和擲骰子杯的元件,並予以更進一步的細緻化。Objectifier [PLoP94] 樣式可以協助將規則實作成物件。Manager [PLoP96] 樣式可以用來協助組織骰子的管理:擲骰子杯就是一個管理者,骰子則是被管理的標的。我們可以利用其它的樣式,對遊戲組織者及遊戲者元件做進一步的細緻化。

一步接著一步地,我們逐漸地細緻化原有的結構,直到所有的細節都被充分地展開為止。然而,整個細緻化的過程,仍一直由被細緻化的原有結構所引導。


上一頁 下一頁