原來不經常逛技術論壇,最近閑著看的比較多一點,看到了相當的內容是在討論設計模式的東西。今天,也閑侃一下
1、設計模式的角色是什么? 工具而已,而且不是一個很高級的工具,更不是一個全能的工具。什么時候決定使用設計模式呢,有需求,是你決定好了要干什么,接著才考慮怎么去實現它,讓設計模式幫你去實現!!!舉個例子,例如你要做的系統中的某個模塊,基于的數據來自于xml文件,思考之后,你需要基于xml文件去建立你的業務模型對象。那怎么合理的來封裝這種實現呢? 這個時候,你可能自然地去選擇用Composite模塊去封裝這種樹狀類型體系。 那你接著會看到,這個樹形對象的構造挺繁瑣的,你不希望用戶去完成這些工作,那么你可能會想到去封裝這種實例化過程,各種創建型模式選擇之后,你可能選擇了工廠模式。 數據有了,你可能接下來去實現核心的業務行為了,相當多的業務行為是基于前面你封裝的樹性對象結構之上。 你寫的行為多了之后,你可能覺得數據結構本身和這么多行為沾粘在了一起,你可能想,干脆將它們分開算了(雖然這樣有點打破封裝),怎么很好的分開呢? 這個時候你可能自然的去用了vistor模式...
2、如何去大致評估設計模式是否被正確使用了呢? 個人的經驗是從需求、設計原則、設計模式本身兩個層面來判斷。所謂需求來判斷,就是你使用這個設計模式是否在解決實際需求,是否是為了設計模式而設計模式。例如你可能用某個模式是為了以后更容易擴展,那么你看了,你的這種需求是真的存在的嗎?哪怕真的存在,需求有那么大嗎? 所謂的基于設計原則判斷,則是從技術角度在宏觀上做個評審~_~。例如直覺告訴你抽象層面的東西和實現層面的東西耦合在一塊了,例如你設計了一個狂大的接口等等... 設計模式的不恰當使用,會使得代碼變得更加不優雅,也會增加很多不必要的復雜度。 所謂從設計模式本身來判斷,則是以技術視角去審核一下你用這個模式的場景和模式本身使用的創建是否有差異,基本上每個模式的使用都會引來一些對應的副作用,那么你要看一下這種副作用恰恰是你所不能接受的...
3、如果你是單純的在設計階段,設計模式能幫助你什么呢? 個人經驗,無論是處在那個設計階段,對設計模式有較好的理解會有助你設計的時候思考問題,甚至更好的幫助你將業務需求轉換為技術需求,并合理的處理這些技術需求,進一步轉為具體的設計方案。但是要注意是有助于,絕對不是基于設計模式。 例如做概要設計的時候,精力還是集中在模塊劃分、模塊提供的主要服務、模塊之間的交互方式等。 進行詳細設計的時候,設計模式扮演的角色才會稍微更重一點。設計階段滿腦子設計模式,你可能會有兩個下場:一是過度設計,而是錯誤設計。
4、設計模式和重構? 設計模式基本上可以理解為是一個代碼級別的設計工具,同時也是重構時候的較為高級的手段。具體的,建議有時間可以看一下《重構與模式》,可能會有點體會。重構在一定程度上可以修正設計不足(個人覺得僅僅是一定程度),也能修理掉過度設計。
5、設計模式在學習過程中處于什么階段? 個人覺得基本上是如下路線:基礎知識、具體開發語言、語言層面技巧、設計模式、設計原則....(俺就是一個寫代碼的,再往下實在是不會了,更高層次的方法論沒有接觸過^_^) 學習的手段可以分為:經典書籍、實踐經驗、高手教誨等等。 國內作者寫的書有時間可以撒兩眼(不是說高手少,而是高手一般可能不會去寫書,丟不起那人^_^),沒時間就算了,要讀就讀經典。 實踐經驗是無論如何無法取代的,保證認真地態度去寫代碼,寫的時候瞎想想,見到好的代碼模仿模仿。 高手教誨就不用說了,如果你的團隊中有經驗老練的高手,那你非常幸運,成天不恥下問吧。 基礎不扎實,會導致典型的就設計模式而設計模式,這種人論壇上還很多的。 沒接觸設計模式的時候,你感覺寫代碼很流利;接觸一些后,你肯定會覺得自己滿腦子設計模式,不會寫代碼了,寫的時候老想著是否該用這個模式或者該用那個模式...;再過一段時間,基于設計模式的使用經驗和理解增多,你有會比較流利,你會有點自豪,覺得你是和大部分在不同層面上寫代碼; 再過一段時間,你可能會接觸一些設計原則的東西,你有麻煩了,又覺得肯能不怎么會寫代碼了,因為你腦子里想著很多松耦合、基于接口、開閉等等東西,老懷疑你設計模式用的對嗎,要不干脆不用了....; 再過一段時間,應該會恢復了,你可能又會有點自豪了,你會覺得你用模式是在設計原則指導之下使用的,而且這個時候你會覺得設計模式可以用的很活,多個模式之間的配合等等也是很自然的事情,因為這個時候你腦子想的更多的是設計模式對應的場景和副作用等等,而不是之前滿腦子設計模式相關的實現細節了
6、設計模式真的能成為寫代碼的人之間的交流語言? 如果能這樣,你可能在一個素質很高的團隊,羨慕你,實在是羨慕你!!! 一般別抱這種幻想,也別去強迫其他人使用設計模式,否則你可能會挨罵^_^。我的感覺是與其讓我遇到一個連設計模式都沒有聽說過的人,也不希望遇到一個滿口設計模式去不會真正用設計模式的人,那是很折磨人的^_^
7、。。。。
8、。。。。
本博客中的所有文章、隨筆除了標題中含有引用或者轉載字樣的,其他均為原創。轉載請注明出處,謝謝!