Frank Buschmann

Applying Patterns
 

下一頁


要在實際的專案當中使用樣式,需要的不只是實作樣式的詳細指導方針而已,有許多重要的議題還未論及。例如,我們要如何把樣式,整合進已部分存在的設計當中呢?因此,除了樣式的實作方式外,我們還需要使用樣式的一般性指導原則。

 

6.1 Introduction

 

就如同我們所學過的,每個定義完整的樣式都會提供如何實作的資訊,也會提供如何進一步改良以及如何與其他樣式結合的資訊。但是這些資訊,都是針對樣式本身的,它並沒有告訴我們該如何的在實際的工作中,將樣式整合到我們的專案裡,也沒有告訴我們該依何種順序、運用哪些種類的樣式來解決問題,遇到單一樣式無法獨立處理的問題時,又該如何的解決等等。

要能有效地應用樣式解決問題,就必須能回答上述所有的問題。否則任意使用樣式的結果,可能會造成系統沒有必要的複雜性,更糟的是,所建構出來的架構,甚至可能無法提供我們所需要的特色。舉例來說,有許多的樣式是以引入一層間接處理的方式來解決設計上的問題,但同時串聯數個這樣的樣式 ,將導致極無效率的多層間接處理。相反的,我們希望可以同時串聯數個這樣的樣式,而不會導致極無效率的多層間接處理,並且仍能保有這些樣式原有的本質。

由上面的例子顯示,樣式的運用並非機械式的工作(mechanical task),而是需要一些經驗,才能以有意義的方式將它們結合在一起,以構成較大的結構。之所以會如此的理由很明顯;大型軟體架構所帶來的問題及影響,主要是來自於它的規模及本質上的複雜性。而這些問題及影響,與樣式所要闡述的設計議題是無關的。

針對軟體架構的樣式語言,是一種提供樣式有效應用的方法(請參閱 Chapter 7, Towards Pattern Languages),它所提供的複合樣式,並不只是提供解決特定設計問題的方案而已。它同時也提供一個隱含於樣式中的程序,以協助運用樣式:即何時、如何、以甚麼順序。有個很好的嘗試範例就是 Kent Beck ‘Smalltalk Best Practise Patterns’  [Bec97],但是到目前為止,在軟體的架構設計上,我們並沒有這樣子的樣式語言,而且在最近的未來中,似乎也不太可能會有。時至今日,大部分軟體架構的樣式,都是以樣式目錄及樣式系統的方式組織起來的[GHJV95] [BMRSS96] [PLoP94] [PLoP95] [PLoP96];然而這些方式,並無法提供我們在使用這些樣式時,所需要的支援。

要能有效的應用樣式目錄或樣式系統,是需要依靠適當的指引的,這個指引要能讓我們使用樣式時,就好像是一個使用樣式設計系統多年的軟體架構專家一樣。就算是不行,至少也要能讓我們瞭解,在應用樣式時,可能會發生的問題及陷阱。因此,我們所尋覓的指引,應該不只是三言兩語的告訴我們,甚麼該做,或是甚麼不該做;而是要有更結構化的描述格式-該指引是針對哪些樣式應用的問題?而這些問題會在何時發生?以及該如何的正確運用樣式以避免上述的問題?

因此,樣式的應用指引本身也必須是樣式:描述一個情境,在這情境下所發生的問題,以及問題的解決方式。這使得我們可以使用一個適當的樣式格式,來描述這些樣式應用指引。

在本章中,我們將舉出數個應用樣式的樣式。這些樣式都是在過去數年中所發掘出來的,並反映了我們以及我們散佈全球的同事,在使用樣式來設計並實作大型軟體系統時,所學到的東西。

在我們所提出的樣式應用樣式中,有一些是直接從 Christopher Alexander 的研究中所建立的 [Ale79] [ANAK87],其他的則是我們在使用樣式設計軟體時,從所獲得的經驗中得到的 [Gab96]。就整體而言,它們彼此互補且都具有完整的實作指引,並伴隨著定義良好的軟體架構樣式。在此,我們將會使用 Christopher Alexander 的樣式描述格式:Name-Context-Problem-Solution-Example,來描述我們的樣式應用樣式。

 

6.2 A Pattern Language for Applying Patterns

 

在開始描述我們的樣式應用樣式細節前,我們先概略的描述一下這些樣式的意圖,以及它們所面對的情境。總體來說,一共有9個樣式: 

9 個樣式彼此緊密相連,你從第一個樣式 Piecemeal Growth 開始,接著會被引導至下一個將會使用到的樣式。每一個樣式的使用在前一個樣式的情境當中都是很合理的,並使之更加完整。換句話說,我們的樣式應用樣式構成了一個樣式語言。下面的圖表概略的表示出這些樣式間彼此的相依關係:

 

 

就如同我們先前所說的,Applying Patterns 的整體目標是支援樣式目錄及樣式系統中樣式的使用。從技術的觀點來說,我們希望能支援發展者在定義軟體架構時,可以符合欲建構系統的需求。事實上,樣式可以幫助他們針對手上的設計問題去建立最有效的解決方案。從人性的觀點來看,Applying Patterns 的意圖是希望賦予發展者了解,並控制使用樣式去建構系統程序的能力,以便能在建造系統時更有創意,並能對他們自己的設計及程式碼感到自在。

本樣式語言在下面三個條件下會運作得最好:

6.3 節中,我們將會再論及'Applying Patterns’ 的目的及先決條件,並討論它們詳細的內容。在此之前,我們先列出這個語言本身的內容:


下一頁