我已经学习并实践设计模式几年了,我想知道有哪些新的设计模式(自GOF以来)?此外,像我这样的人应该学习什么(关于软件设计方面)?
注意:我已经使用TDD和UML一段时间了。我对新的范式转变或新的设计模式很感兴趣。
我已经学习并实践设计模式几年了,我想知道有哪些新的设计模式(自GOF以来)?此外,像我这样的人应该学习什么(关于软件设计方面)?
注意:我已经使用TDD和UML一段时间了。我对新的范式转变或新的设计模式很感兴趣。
我发现特别有用的新技术之一是领域驱动设计(Domain Driven Design)。它不仅是一种模式,更是一种思维方式——集中关注领域对象,即你建模并构建应用程序的事物。
我发现它赋予了我们之前都知道但懒得处理的原则以意义,例如单一职责原则和关注点分离。尤其是对这两个原则,我现在更加认真对待。
另一个提高我的方面是测试驱动开发(TDD)和依赖注入。我发现通过大量接口和实现类来释放只定义一次的恐惧。这并不意味着与DRY(不要重复自己)相冲突。如果两个类的目的不同,则拥有相同属性也是可以的。封装和单一职责原则比只定义一次属性更为重要。
嗯...人们提到的所有东西都不是设计模式。
GOF书是隐含着Java的思想写的,它很好地探索了这个领域。然而,一旦你进入其他语言,有些模式就不再必要了(在支持事件的语言如C#中,Observer几乎不使用),并且会出现一些新模式。拿起Pro JavaScript Design Patterns或Design Patterns In Ruby这些书,看看这些非常不同的范例中所使用的基本模式发生了什么变化吧。
我最近最喜欢的是依赖于现代语言的函数漂移。我非常喜欢嵌套闭包和用函数式方法解决GoF处理的问题的方式(再次参见Ruby书的优秀示例)。我还深深爱上了内部领域特定语言的概念,这开启了一系列自己的设计模式(包括嵌套闭包)。此外,事件聚合似乎即将在.Net世界中大放异彩。
还有一些其他重要的模式出现了,但在GOF中没有被讨论,可能是因为它们比那些家伙所追求的更高级,比如控制反转容器、消息总线、面向方面的编程、模型-视图-控制器、模型-视图-展示器、模型-视图-视图模型等等。
顺便说一句,这些不是设计模式,但如果你想超越TDD,请开始研究行为驱动开发和上下文/规范。
从维护方面来看,DVCS的使用是一个巨大的变化。如果你不知道什么是DVCS或者没有使用过,我强烈建议阅读以下这两个主流工具:
Mercurial (hg): https://www.mercurial-scm.org/
git : http://git-scm.com/
它们已经在改变常见编程环境的工作流程。虽然不是一种模式/设计,但我认为TDD或UML在某种程度上也不是技术模式/设计。也许更像是围绕编程的常见实践。