2010-05-07 261 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