正文

成功應(yīng)用程序的模式(2)

ASP.NET設(shè)計模式 作者:(美)Scott Millett


1.1  設(shè)計模式釋義

設(shè)計模式是高層次的、抽象的解決方案模板??梢詫⑦@些模式視為解決方案的藍本而不是解決方案本身。從中無法找到一種可以簡單地運用到應(yīng)用程序中的框架;相反,通常是通過重構(gòu)自己的代碼并將問題泛化來實現(xiàn)設(shè)計模式。

設(shè)計模式不僅適用于軟件開發(fā)領(lǐng)域,從工程到建筑的所有領(lǐng)域都能夠找到它的身影。實際上,模式的思想是由著名建筑大師Christopher Alexander在20世紀70年代引入的,目的是為設(shè)計討論構(gòu)建一張公共的詞匯表。他寫道:

本語言的元素是被稱為模式的實體。每一個模式描述了一個在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的解決方案的核心,這樣就可以一次又一次地使用該方案而不必做重復(fù)勞動。

Alexander的觀點不僅適用于建筑和城市規(guī)劃,也適用于軟件設(shè)計。

1.1.1  起源

當(dāng)今軟件體系結(jié)構(gòu)中比較流行的設(shè)計模式起源于程序員多年使用面向?qū)ο缶幊陶Z言而積累的經(jīng)驗和知識。Design Patterns: Elements of Reusable Object-Oriented Software(又被親切地稱為Design Patterns Bible,即“設(shè)計模式圣經(jīng)”)一書收錄了絕大多數(shù)最常見的模式。這本書是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人合著而成,而他們常被稱為“四人組”(GoF)。

他們收錄了23種設(shè)計模式并將它們歸納為3組。

●  創(chuàng)建型模式:處理對象構(gòu)造和引用。

●  結(jié)構(gòu)型模式:處理對象之間的關(guān)系以及它們之間如何進行交互以形成更大的復(fù)雜對象。

●  行為型模式:處理對象之間的通信,特別是在責(zé)任和算法方面。

所有模式均采用模板表達,這樣讀者就可以學(xué)習(xí)如何解讀模式并加以運用。我們將在第2章中講解使用設(shè)計模式模板所需的實用知識,并簡要介紹將要在本書剩余部分學(xué)到的所有模式。

1.1.2  必要性

模式對于軟件設(shè)計和開發(fā)而言至關(guān)重要。不管是在設(shè)計階段解決問題,還是在源代碼中,模式都支持通過共享的詞匯表來表達思想。模式提倡使用優(yōu)秀的面向?qū)ο筌浖O(shè)計,這是因為它們是圍繞可靠的面向?qū)ο笤O(shè)計原則而構(gòu)建的。

模式是描述復(fù)雜問題的解決方案的有效方式。如果具備設(shè)計模式的牢固知識,就可以與團隊中的其他成員快速、順暢地溝通,而不必糾結(jié)于底層的實現(xiàn)細節(jié)。

模式是語言不可知的,因此,可以將它們轉(zhuǎn)換成其他面向?qū)ο笳Z言。通過學(xué)習(xí)模式而獲得的知識將能夠運用于具體編程時采用的任何優(yōu)秀的面向?qū)ο笳Z言。

1.1.3  有效性

設(shè)計模式的使用價值和終極價值在于,它們是可靠的、經(jīng)過驗證的解決方案,它們的有效性毋庸置疑。如果是一名經(jīng)驗豐富的開發(fā)者并且已經(jīng)采用.NET或其他面向?qū)ο缶幊陶Z言從事編程工作多年,或許發(fā)現(xiàn)自己已經(jīng)在使用“GoF”書中提及的一些設(shè)計模式。但如果能夠辨別正在使用的模式,那么與其他同樣理解模式的開發(fā)者的溝通效率就會高得多,他們會理解您的解決方案的結(jié)構(gòu)。

設(shè)計模式的宗旨就是重用解決方案。當(dāng)然,并非所有問題都是一模一樣的,但如果能夠?qū)⒁粋€問題分解,并找出它與以前解決過的問題之間的相似之處,就可以運用這些解決方案。經(jīng)過數(shù)十年的面向?qū)ο缶幊虒嵺`,所遇到的大多數(shù)問題在之前已經(jīng)被解決過無數(shù)次,而且會有一種模式可用于幫助您實現(xiàn)解決方案。即使您認為自己遇到的問題是獨特的,也應(yīng)該可以通過將其分解成若干基本要素,將其泛化至一定程度,從而找出一種合適的解決方案。

設(shè)計模式的名稱非常有用,這是因為它反映出該模式的行為和目的,并為人們在集思廣益討論解決方案時提供常用的詞匯表。使用模式名稱討論,要比詳細地討論其具體實現(xiàn)如何工作更加容易。


上一章目錄下一章

Copyright ? 讀書網(wǎng) www.afriseller.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號