天天看點

設計模式_第三篇_我對模式的了解和認識

在我看來,如果僅僅從編寫代碼的角度去看待軟體的設計,而不涉及整個系統和硬體問題。在一個項目中,整個系統和硬體的相關問題由項目組中的另一些人完成,軟體的設計模式主要涉及的工作就是軟體架構的設計(軟體邏輯架構),就是我們通常所說的三層架構:UI層,業務層和資料庫層。當然标準的叫法不是這樣的,但是為了形象一些,我們都這麼叫。

所謂的三層架構,對于沒有多少程式設計經驗的人來說,的确是很難體會,是以我舉個簡單的例子。如果程式要完成一個資料庫檢索功能,那麼,程式需要最終使用者告訴它檢索條件conditions是什麼,然後程式會對這個條件進行一些必要的檢查,如果沒符合程式要求,程式就根據這個條件建立一條SQL語句,像“select [ * ] from [ table ] [ where conditions ]”,到資料庫中執行,把結果顯示給使用者。是以,使用者輸入的條件地方處在UI層,根據條件建立一條SQL語句就處在業務層,而執行這條SQL語句是由資料庫層來完成。不熟悉這三層架構的程式員,我以前就是這樣,經常迷惑的問題是,一個功能函數,應該寫在UI層,還是業務層,資料庫層?寫在它們中的哪個類裡?

對于軟體架構,.NET和Java都有自己想法,一個軟體架構是由多個設計模式完成的,比如,對于一般的三層架構,資料庫層一般采用資料工廠,業務層通常複雜點,一般采用多個設計模式。

看一下下面這個靜态結構圖:

待。

那麼,這三層都寫些什麼呢……(待)

順便說一下設計模式的起源、産生和發展。

設計模式是如何産生發展的。

1987年,Ward Cunninghan和Kent Beck在一起用Smalltalk做設計使用者界面的工作。他們決定使用Alexander的理論發展一個有五個模式的語言來指導Smalltalk的新手,是以,《Using Pattern Languages for Object-Oriented Programs》論文發表。Ward Cunninghan是一名著名的程式員,他對模式研究和極限程式設計有較大影響,Kent Beck是XP程式設計(Extreme Programming)的創始人。

之後,Jim Coplien開始搜集C++語言的成例。成例就是當時的代碼模式。這些C++成例發表在91年出版的《Advanced C++ Programming Styles and Idioms》一書中。

1990到1992年,“四人組”開始搜集模式。

1993年8月,Kent Beck和Grady Booch主持了在科羅拉多山區度假村召開的第一次關于模式的會議。Grady Booch是UML創始人之一。

1995年,“四人組(GoF)”的《設計模式》一書出版,這是在面向對象程式設計中使用模式化方法研究的開創性著作。“四人組”是四個人,有Gamma、Helm、Johnson和Vlissides。說起他們能“聚在一起”,并最終成書,簡直近乎不可思議。在寫作該書時,他們四人分散在北美大陸的不同角落:魁北克、伊利諾斯、紐約、加州。Vlissides甚至用“3個時區”強調他們地理分布上的跨度。

至此,參加模式研究人,以及确定的模式呈爆炸性增長。程式設計模式語言大會(Pattern Language of Programming,PLoP)每年定期在美國舉行,大會論文也彙編成書公開發表。現在,模式不斷的應用到軟體工程各個方面,如開發組織,軟體處理,項目配置管理等。

模式的起源

模式并非起源于軟體工程行業。模式的研究起源于建築設計大師Christopher Alexander關于城市規劃和建築設計的著作。但盡管著作針對建築學領域,但實際上适用于所有的工程設計領域,包括軟體開發設計領域。

亞曆山大在他的著作中指出,使用現在的設計方法設計出的建築物,不能滿足所有工程設計的基本目的:改善人類的條件。他想發明的建築結構,是使人類在舒适和生活品質上受惠的建築結構。

亞曆山大的著作很多,推薦《建築的永恒之道》和《模式語言》。據說,一個建築系學生說他去書店買亞曆山大的著作,很奇怪為什麼每個書店都這兩本書缺貨……大概都被計算機系的學生買走了。正如量子實體學在上個世紀初處在科學哲學的前夜一樣,目前軟體工程學現在正處在産生自己的科學哲學的前夜。