上周,Design&Pattern團隊舉行了主題為“設計模式在軟體開發的應用”的討論會。我是通過蟈蟈的Design&Pattern團隊《設計模式在軟體開發的應用》討論會議記錄和idior的Design&Pattern團隊《設計模式在軟體開發的應用》精華版才知道的。討論的內容非常精彩,可惜我給錯過了。
不過沒關係,我還可以做些亡羊補牢式的溫習和思考,千萬要記得,下次不要錯過了。
1. 什麼是設計模式
來源於建築,解決常見問題的優秀方案 。
-- idior
我感覺其實模式體現的就是一種思想,一種思維方式。
-- umlchina
有些東西,是在一定的積累之後的必須產物。
我同意,設計模式就是一種思想,但思想的基礎是要有一定的實踐經驗。
--vcfly.net
我認為在應用設計模式上,有兩種方式:從傳統的軟體開發出發,對體繫結構設計的時候,如果熟悉設計模式,那麼設計的軟體在擴充性和健壯性,都比較好;但如果從TDD的角度出發,設計模式主要還是在重構中體現。
-- wayfarer
設計模式是為了更好解決對象設計、對象通訊、重用, 建築學、邏輯學中都有這樣的概念。
--Zealot
《設計模式》中引用Christopher Alexander的話說:“每一個模式描述了一個在我們周圍不斷重複發生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重複勞動”。
它們協助設計者將新的設計建立在以往工作的基礎上,複用以往成功的設計方案。
目的是將物件導向的設計經驗作為設計模式記錄下來。
設計模式使人們更加簡單方便地複用成功的設計和體繫結構。將已證實的技術表述成設計模式也會使新系統開發人員更加容易理解其設計思路。
大師們的解釋已經足夠明了了。
2. 運用設計模式的最高境界
模式我覺得可以理解為軟體設計的一個理論,學好理論很重要,但更重要的是如何運用理論,就像懂得了孫子兵法,不一定你就能打勝仗。
我覺得模式的最高境界就是你在編程中不知不覺地使用模式去解決問題。
--dudu
most important, practice and think !
--Samuel
是啊。如果單獨學習設計模式的理論,卻無法應用到實踐上就沒用了。
-- wayfarer
我覺得設計模式屬於方法學的範疇。它的目的非常簡單:協助人們通過複用成功的解決方案或經驗來解決實際問題。學習設計模式的有效途徑之一就是在在實踐中學習,在實踐中理解,在實踐中總結。我很認同dudu的觀點,即:在編程中不知不覺地使用模式解決問題。這裡的不知不覺有兩種可能,一種是從未學習或接觸過設計模式,但是在實際工作中卻在不知不覺的使用它解決問題;另一種是對設計模式有深刻的瞭解,在思考和解決問題的時下意識的使用設計模式。我想最高境界裡的“不知不覺”更傾向於後者,前者雖然在做著設計模式的事情,但還沒有抽象到模式的層次,處於認識的混沌階段。
3. 在程式中使用設計模式
我覺得越是面向商業,我們所說的模式就用的越少。
--RoyDeng
關鍵是,我們是做項目,還是做產品。
--wayfarer
我覺得項目與產品開發真的不一樣。
項目最重要的是進度,品質可以放後考慮。
--jeseeqing
模式便於理解代碼和維護,對一個需要維護的系統,不應用模式,吃虧的是程式員。
--大壞蛋
模式的引入沒有阻礙我們公司的發展,其實用好了才是關鍵。
--蟈蟈
首先,我必須申明:我認為,在程式使用設計模式並不會降低開發效率,相反,很多情況下,這恰恰是提高開發效率的有效途徑之一。因此,我的觀點是不管是做項目,還是做產品,也不管公司是否要求使用設計模式,自己在寫代碼的時候都應該有意識的使用設計模式。
對於舊系統的升級,也應該考慮設計模式的使用。當然沒有必要把舊的系統全部推倒,只要從需要修改的地方重構就可 以了。這樣一步步的來,就像滴在水杯中的墨水一樣,最終墨水會擴散到整個杯子。
4. 使用設計模式需要重構代碼,而沒有TDD的重構又是危險和麻煩的,那麼是不是所有的模組都要TDD呢?
其實TDD也是這樣的,先寫測試後來代碼,保證所以的代碼是因為有測試才出的。
--蟈蟈
但在設計過程中,我會在某些模組中應用TDD的方式。
--wayfarer
沒有tdd,重構是很危險和麻煩的。
一些基礎模組很需要tdd。
-- idior
wayfarer和idior的想法和我是一致的,那就是:不需要在所有的模組中都使用TDD,而是在某些模組,如基礎類、業務類、資料訪問類等模組使用TDD就可以了。
5. 設計模式在項目開發中對你們的協助是怎樣的?(wayfarer)
好的維護性和可擴充性。
--jeseeqing
我覺得最大的好處就是省寫很多代碼。
維護很容易,擴充容易。
--蟈蟈
提高我的生產力啊。
還有那種寫很少代碼就能實現功能的虛榮感。
--Zealot
維護性和可擴充性,適應未來的變化。
--idior
提高了開發效率。
--dudu