2010-05-07 250 views
6

我已經研究並實施了幾年的設計模式,我想知道。什麼是一些新的設計模式(自GOF以來)?此外,與我自己相似,應該怎樣研究[接下來的軟件設計]?新的設計模式/設計策略

注意:我一直在使用TDD和UML一段時間。我對新的範式轉換和/或更新的設計模式感到好奇。

回答

2

我很驚訝沒有人提到Martin Fowler的書Patterns of Enterprise Application Architecture。這是一本優秀的書籍,其中有許多模式,其中許多用於現代ORM設計(存儲庫,活動記錄)以及一些UI層模式。強烈推薦。

+0

再一次,要指出那些不是真正的設計模式,它們是架構模式。類似,但更高的水平。 – 2010-05-07 21:13:36

1

維護方面的巨大變化是使用DVCS。如果你不知道一個是什麼或者沒用過一個,我強烈建議在兩個硬打者讀了:

水銀(汞):https://www.mercurial-scm.org/
混帳:http://git-scm.com/

他們做了很大程度上改變了通用編程環境的工作流程。不是我設計的模式/設計,但我不認爲TDD或UML是某種程度上的技術模式/設計。也許更像是圍繞編程的常見做法。

+1

我不會考慮VC相關技術來改變工作流程。我確實考慮過TDD和UML,因爲它改變了你設計和解決問題的方法。 – monksy 2010-05-07 02:16:59

+2

-1,與設計模式無關 – harto 2010-05-07 02:53:40

2

我的PCMEF (now PCBMER) framework

Here's它的一個簡單概述一個狂熱的追隨者和支持者。

這種類型的企業系統非常複雜,通過將其他一些設計模式組合到PCMBER框架(演示,控制,調解器,實體和資源)中,即使是最複雜的系統也很容易使用和管理。

+0

有趣..我得看看它。 – monksy 2010-05-07 02:40:28

4

大致有無數的設計模式。設計模式就是這樣:程序員用來完成任務的技巧重複出現。關於GoF模式最有用的是他們是多麼有名。在那裏,他們已經成爲一種語言 - 正是GoF希望實現的。

你可以在網絡和文獻中找到的許多其他模式都是「有用的技巧」,而不是你在與其他程序員說話時可以使用的語言。也就是說,過去十年左右出現了一些模式,特別是在網絡開發領域。請參閱Martin Fowler的patterns book中列出的模式。

+0

我不會說模式是「重複使用的技巧」。我認爲這比它更多。創建一個好的設計需要前瞻性的思考和理解系統是如何工作的,它將如何發展,哪裏需要靈活性,哪裏不需要。程序員使用許多技巧使他們的生活變得更加簡單,但技巧並不一定是對系統設計的前瞻性思考。其他人可能會不同意,但是當我聽到「技巧」時,我認爲是「快捷方式」而不是堅實的軟件設計。 – JasCav 2010-05-07 17:31:29

+0

@Jason這與設計模式有什麼關係?當您解決設計問題,然後使用解決方案的相同想法來解決其他地方的相同問題時,可以使用設計模式。這不是促進刨削,而是解決設計問題的想法重現。它需要有效地使用設計模式的經驗,並且喜歡選擇一種語言,如果你從宗教觀點出發,你會慘敗。你不會使用設計模式來做正確的事情,而且你經常使用設計模式,甚至沒有注意到它。 – wilhelmtell 2010-05-07 21:12:37

+0

我說我做了什麼的原因是因爲你說了你的答案。要說設計模式只是「技巧」,而GoF只是因爲「他們成名」纔有用,卻完全忽略了這樣一個事實,即一個好的設計需要規劃和理解如何在理解你爲什麼構建設計的過程中進行設計使用設計。當然,我可以偶然地碰到一個好的設計,就像建築師可能偶然發現建築物的好結構一樣。這並不意味着軟件或建築物設計得很好。設計模式不僅僅是「技巧」。 – JasCav 2010-05-08 05:20:09

2

其中一個我發現特別有用的較新的是Domain Driven Design。與其說是一種模式本身,更多的是一種思維模式 - 專注於領域對象 - 也就是你建模和構建其他應用程序的東西。

我發現它賦予了我們以前都知道但卻懶得處理的原則的含義 - 比如單一責任原則和分離關注。我現在特別重視那兩個。

我的另一個改進軸是TDD和依賴注入。我發現,有很多接口和類實現它們,我只能放棄這種只定義一次的恐懼。這並不是說它與DRY(不要重複自己)有很大沖突。如果他們的目的不同,可以有兩個具有相同屬性的類。封裝和SRP比僅定義屬性重要得多。

+0

這就是我一直在看。從OMG產生的東西...我發現GOF沒有太多變化。 – monksy 2010-05-07 02:41:16

+0

DDD不是一種設計模式。這是一種與客戶管理風格相結合的架構風格。 – 2010-05-07 16:57:17

2

嗯......人們提到的都不是設計模式。

GOF是以Java爲中心而編寫的。它探索的空間相當不錯。但是,一旦進入其他語言,一些模式不再是必需的(Observer很少用於像C#這樣的支持事件的語言),並且一些新的模式會出現。抓住Pro JavaScript Design PatternsDesign Patterns In Ruby書籍,看看這些完全不同的範例中待機模式會發生什麼變化。

我的最愛最近來自靠現代語言的功能性漂移。我非常喜歡nested closures以及解決GoF所做的一些相同問題的功能性方法(同樣,請參閱Ruby書中的優秀示例)。我現在也熱愛內部domain-specific languages的想法,這些想法可以打開成爲他們自己的一系列設計模式(包括嵌套閉包)。在不久的將來,事件聚合似乎也將在.Net世界中大顯身手。

其他一些已經出現但在GoF中沒有討論太多的大問題 - 可能是因爲它們更高級別,那麼這些人要去哪裏 - 是Inverse Of Control Containers,Message Bussing,Aspect-Oriented -Programming,Model-View-Controller,Model-View-Presenter,Model-View-ViewModel等等。順便說一句,這些不是設計模式,但是如果你期待超越TDD的進展,就可以開始關注行爲驅動開發和上下文/規範。

+1

+1:GoF模式是Java類型的,不同的語言有不同的習語。 – 2010-05-07 17:18:43

+1

我很驚訝你的評論Observer很少用在C#中。它融入了語言(「事件」類型)以及使用+ =運算符爲多個事件添加多個訂閱者的能力。這個。.NET框架提供了屬性和集合更改通知的接口定義;這些對於WPF和Silverlight中的數據綁定至關重要。如果「觀察者」模式沒有得到多少調用,那是因爲它已經成爲一個核心概念。 – 2010-05-07 17:48:41

+0

@Cyclon這正是我的觀點。對於observables的需求仍然存在,但GoF中的實現很少被使用(我還沒有看過IObservableCollection,但它可能會做類似的事情),它已經被語言特性所取代。 – 2010-05-07 18:05:09