這是一篇譯文,你可以參看本文在TSS上的 英文原文,這是我的第一篇譯文,有很多不當(dāng)之處請(qǐng)見諒,若能指出則更好了。
在GoF的設(shè)計(jì)模式那本書中作者清楚的指出在使用設(shè)計(jì)模式的時(shí)候所使用的語(yǔ)言是非常重要的:
不幸的是,這一點(diǎn)經(jīng)常被忽略,程序員們經(jīng)常把設(shè)計(jì)模式和方法混用。Martin Fowler 解釋了兩者的不同:
如果你曾經(jīng)看見一個(gè)看起來象C++方法集合的Java或者C#的應(yīng)用程序,你就知道了混合這兩個(gè)概念所產(chǎn)生的壞處了。不管你對(duì)模式和方法這兩個(gè)概念之間的差異理解到何種程度,你所能想到的程序設(shè)計(jì)語(yǔ)言就只是你設(shè)計(jì)時(shí)所使用的程序語(yǔ)言。這也是Prags鼓勵(lì)每一個(gè)人每年學(xué)習(xí)一門新的語(yǔ)言的一個(gè)原因。你可以結(jié)合你所知道的所有程序設(shè)計(jì)語(yǔ)言來進(jìn)行設(shè)計(jì),但至少你不是一個(gè)絕望的“鄉(xiāng)下人”(?)。
編程語(yǔ)言的發(fā)展弱化了模式和方法之間的概念模糊。在1998年,Peter Norvig 辯駁道大部分的 GoF 模式在 Dylan 和 Lisp 中都看不到蹤影或者非常簡(jiǎn)單的使用。在那以后,Greg Sullivan 也對(duì) Scheme 做出相同的觀點(diǎn)。Jan Hannemann 也指出 Java+AspectJ 也是如此。設(shè)計(jì)模式表現(xiàn)的不如方法那樣好。他們至多平分秋色。
在編碼層,大部分的設(shè)計(jì)模式都是有代碼異味的。當(dāng)程序員在 Review 代碼的時(shí)候看到了一個(gè)設(shè)計(jì)模式,他們陷入了睡夢(mèng)般的熟悉。醒醒吧!那是設(shè)計(jì)模式呢還是來自某種古老的語(yǔ)言的一種陳舊的方法?
http://www.aygfsteel.com/qujinlong123/
在GoF的設(shè)計(jì)模式那本書中作者清楚的指出在使用設(shè)計(jì)模式的時(shí)候所使用的語(yǔ)言是非常重要的:
The choice of programming language is important because it influences one's point of view. Our patterns assume Smalltalk/C++ language-level features, and that choice determines what can and cannot be implemented easily. (Design Patterns, p.4)(程序設(shè)計(jì)語(yǔ)言的選擇非常重要,它將影響人們理解問題的出發(fā)點(diǎn)。我們的設(shè)計(jì)模式采用了 Smalltalk 和 C++ 層的語(yǔ)言特性,這個(gè)選擇實(shí)際上決定了哪些機(jī)制可以方便的實(shí)現(xiàn)。) |
不幸的是,這一點(diǎn)經(jīng)常被忽略,程序員們經(jīng)常把設(shè)計(jì)模式和方法混用。Martin Fowler 解釋了兩者的不同:
Recipes tend to be more particular, usually tied to a particular programming language and platform. Even when patterns are tied to a platform, they try to describe more general concepts.(方法依賴于特定的編程語(yǔ)言和平臺(tái)使它更加的特殊。即使是當(dāng)模式依賴于平臺(tái)的時(shí)候,他們也只是去描述更加一般的概念。) |
如果你曾經(jīng)看見一個(gè)看起來象C++方法集合的Java或者C#的應(yīng)用程序,你就知道了混合這兩個(gè)概念所產(chǎn)生的壞處了。不管你對(duì)模式和方法這兩個(gè)概念之間的差異理解到何種程度,你所能想到的程序設(shè)計(jì)語(yǔ)言就只是你設(shè)計(jì)時(shí)所使用的程序語(yǔ)言。這也是Prags鼓勵(lì)每一個(gè)人每年學(xué)習(xí)一門新的語(yǔ)言的一個(gè)原因。你可以結(jié)合你所知道的所有程序設(shè)計(jì)語(yǔ)言來進(jìn)行設(shè)計(jì),但至少你不是一個(gè)絕望的“鄉(xiāng)下人”(?)。
編程語(yǔ)言的發(fā)展弱化了模式和方法之間的概念模糊。在1998年,Peter Norvig 辯駁道大部分的 GoF 模式在 Dylan 和 Lisp 中都看不到蹤影或者非常簡(jiǎn)單的使用。在那以后,Greg Sullivan 也對(duì) Scheme 做出相同的觀點(diǎn)。Jan Hannemann 也指出 Java+AspectJ 也是如此。設(shè)計(jì)模式表現(xiàn)的不如方法那樣好。他們至多平分秋色。
在編碼層,大部分的設(shè)計(jì)模式都是有代碼異味的。當(dāng)程序員在 Review 代碼的時(shí)候看到了一個(gè)設(shè)計(jì)模式,他們陷入了睡夢(mèng)般的熟悉。醒醒吧!那是設(shè)計(jì)模式呢還是來自某種古老的語(yǔ)言的一種陳舊的方法?
http://www.aygfsteel.com/qujinlong123/