不用模式的理由

2021-08-22 11:12:53 字數 2121 閱讀 8113

週日去找sunway看他的半冰箱膠卷及掃瞄器,一起吃完晚飯出來時,我想起reallike說過的一句話:不要跟sunway談模式。於是趁機challenge了一下,結果還是比較有收穫的。

關 於模式的問題我曾經跟令狐有過多次的討論。sunway並不能算是乙個嚴格的模式反對者,他只是反對在自己專案中採用模式。為此他舉了很多的例子,基本上 我還是比較認可的。例子我就不一一枚舉了,有過一定的程式設計實踐經驗的人多少都會碰到類似的問題,但意識到的人並不多,我作一下大致的總結:

問 題主要表現在幾個方面。

一方面是對於模式的初學者來說,很容易陷入為了模式而模式的誤區。這裡所指的初學者與學習設計模式的時間長短無關,而在於對設計模 式的理解上,僅僅是把所有的模式背下來是遠遠不夠的。用我不厚道的話來說就是:「這只是一本人肉reference」。

另一方面是這種對模式的「硬用」實 際上是低效的,因為很多時候你對某個模式的「硬用」根本就是錯誤的,結果必然導致在實現這一錯誤的「硬用」上花費很多不必要的時間,影響開發效率。

還有一 方面就是乙個人對模式的「硬用」錯誤,在團隊中開始可能還不被發覺(因為只要能用,這種潛在的問題通常是不容易發現的),隨著專案的不斷修改,可能到很後面才發現這裡的「硬用」有問題,再來修改的代價就會很大。

最後 一 方面是在團隊開發中,各人的理解各不相同,也許乙個人認為應該在這裡要用a模式,但另乙個人卻認為應該用b模式,或者乙個人「硬用」的模式對另乙個人理解 **造成了不必要的障礙。

諸如此類都是sunway拒絕在專案中使用模式的合理理由,對此我基本上表示贊同。

模式的起源與其它計算機理論有 很大的不同,它源於建築設計大師christoph.alexander的模式思想——甚至可以說是一種哲學思想,它與一般意義上的西方哲學有很大的不 同,而是接近於東方的古老哲學思想。在這一哲學思想中,有乙個核心形容詞叫做「生機勃勃」。當年gof就是受到這一哲學思想的影響,從大量的實踐經驗中總 結出來設計模式的想法——他們發現在一些看上去「生機勃勃」的**中,存在著一些共性的東西,他們對這些共性的東西加以總結,得出我們現在所知道的設計模 式。

c.alexander在《建築的永恆之道》一書裡談論到建築模式語言時就說到過,同樣的模式用在不同的地方,會有不同的效果,必須結合很多的方面綜合考慮,唯一的原則就是要使最終的建築具有那種生機勃勃的無名特質。

所 以,光會背模式和堆砌模式完全沒有意義,因為這樣的模式是「死」的,而不會是生機勃勃的。要會用好設計模式不是看幾本書就能明白的,你需要在不用模式的情 況下編寫大量的**,慢慢地去體會那種對「生機勃勃」的感覺——當然你也可以說我這是經驗主義,但對於程式設計這種事情來說,經驗就是很重要的。

回 到sunway的話題上。他作為一名leader,重要的是能夠讓整個team高效地運作,而要達到這個目標,合理的投入產出分析是必要的。因為幾乎不可 能要求整個team的所有成員都有足夠豐富的經驗去正確地運用模式,並且不會給別的成員帶來誤解,所以在他的team他的專案中使用模式帶來的成本過於 高,那麼不用當然比用要好。

因為模式這個東西,不僅僅是 乙個名字,還會跟環境、跟語言,跟很多東西相關。設計模式在設計時是可以作為乙個名詞交流的。但在實際編碼的時候,絕大多數情況不會像書上的例子那樣單 純,是需要根據情況實際調整的(或者)根據需求,寫出一些**,這些**事後可以發現跟某種模式相符。

另外還有一點,就是設計模式使用不當,很容易產生「過度設計」的問題,但是現在又沒有乙個有效的模式可以防止過度使用模式。

最 近看了一點《建築的永恆之道》,總的感覺,我覺得它提到的模式,更像是一種東方文化和西方文化的雜交產物,是一種無法精確定量的東西。雖然它提到說模式必 須可以明確的表達出來。但是模式受到周圍很多環境和事件的影響,很難用乙個絕對教條的方法去歸納和實施。從一方面來說,模式本身可以精確定義和重現,這個 是很典型的西方哲學方法。但是,模式的應用,卻受到很多外界條件的影響,甚至是一些難以描述的神秘狀態的影響,同乙個模式,在這個條件下應用,是合適的, 是好的,在另乙個環境下,可能就變成了乙個不好的,不合適的,這個又很東方化。

的確是這樣,模式本身是明確的,但是應用模式的環境(包括軟硬體環境和人的環境)卻是千變萬化的,沒有經驗和對「生機勃勃」的感覺是很難用好的。

也許對於小團隊,一次性的專案來說,模式的「硬用」可能影響還小一些,或者會有一些好處,但是對於大團隊,常變化的專案來說,為了避免模式「硬用」而完全禁用模式也不失為一種有效的管理方法。

總之我認為,模式絕對是個好東西,但不是絕對的好東西。

採用設計模式理由

設計沒有標準,模式充滿變化,我們對設計與模式的 就是希望能從沒有標準的設計中體驗設計的樂趣,從充滿變化的模式中尋求問題的解決之道。我這裡所謂 設計沒有標準 其實並非沒有標準,現實是設計的標準實在太多了。我們都希望找到最好的設計方案,然而什麼是最好,每個人都有自己的 哈姆雷特 滿足客戶需求的設計就是最...

模式,用還是不用

近兩年模式炙手可熱,加上各種框架的遊行,幾乎開發人員已經到了言必談模式的地步,但是畫虎不成反類犬,經常模式應用不僅沒有帶來很好的結構,反而使得 難以維護。以前和乙個同學討論技術的時候,她說了一句今天聽來特別經典的話 好的設計並不容易理解 的確如何,有時和其它程式設計師解釋一些設計的時候,總是要花許多...

加薪的理由

月了,春天到了,也需要考慮給專案成員加薪了。加薪的目的很簡單,減少專案成員流失和提高積大家的極性。物價在漲,現在就是招同一水平,較去年同期的工資也會高一些,所有加點工資,留下乙個有經驗的成員是很划算的。但光憑上迷理由,想讓老闆同意加薪,漲幅不會有多少,同時也需要更多的理由讓每個成員的加薪都能接受。1...