设计模式是否是你发明的东西

时间:2008-12-24 19:28:01

标签: design-patterns reducing

是否设置了设计模式,或者每个具有足够技能的软件开发人员是否识别并减少其代码以开发新模式。有效地创建自己的“设计”模式。

编辑 - 感谢您的回复。实际上,我只是重构和/或减少代码,在编写代码之前,应首先将问题与现有设计模式进行比较。如果找到匹配,那么我应该使用它,否则我只是重构代码(这不是一件坏事,通常不会产生任何新的通常有用的“模式”。)

8 个答案:

答案 0 :(得分:7)

这不是一个或两个问题。

设计模式是常见问题的通用解决方案。

已经存在许多现有的设计模式,每个模式都适用于不同的问题(或不同的上下文),但设计模式的规范并未关闭。肯定会创建和/或找到更多模式。

要记住的重要一点是,对于真正成为模式的解决方案,它需要足够通用以便重用,并且需要应用于重复出现的问题。

我认为大多数程序员随着时间的推移会独立发现许多相同的模式。设计模式目录的真正目的是让所有人都能一劳永逸地同意特定模式的特定模式,例如外观模式,然后在更高的抽象层次上讨论它。

答案 1 :(得分:6)

如果您阅读有关设计模式的文献,您会看到它是一个总括性术语,至少涵盖以下类型的知识:

  • 解决常见问题

  • 每个程序员应该知道的有用的编程技术,即应该是常用的

  • 常用语言中的损失的变通方法(最初的Gang of Four书中包含许多C ++中的损失的解决方法,比如Smalltalk)

设计模式的另一个重要方面是它们为程序员提供了一个共同的词汇来讨论这些事情。因此,要成为一种设计模式,必须在社区之间共享并获得同意的名称。要回答您的问题,您可能会创建新的设计模式,但首先要做的是创建新的,然后让社区同意值得(以及称之为)。

当然,新问题将变得普遍,有用的新编程技术将被发明,新的损失将产生对新的解决方案的需求。但是它不会经常发生并且发明新的解决方案将是吨的工作。 “四人帮”一书几乎完全是对现有实践的编纂 - 本书的主要新贡献是共享词汇。这是一个值得做出的贡献,但是对于我们这些听过炒作并且希望在新瓶子里有更多旧葡萄酒的东西的人来说,这是令人失望的。

如果您想创建新的设计模式,留下完善的路径。例如,在面向对象的世界中,模式几乎无处不在。 (尽管围绕多方法调度或基于原型的语言仍然存在模式的机会。)相比之下,功能程序员仍在等待让某人识别并命名大多数常见解决方案和良好实践。如果你是一个伟大的思想家和作家,你可能会对这个领域产生巨大的影响。

答案 2 :(得分:2)

"gang of four"'s Design Patterns book确实有一套明确的模式。 Microsoft模式和实践团队发布的团队也有像CABSCSF这样的模式。这是否意味着每个模式都被覆盖?当然不是。开发人员和团队经常提出自己的模式,以满足他们的需求,并在整个项目中使用。

所以我们不想重新发明轮子 - 使用已经存在的模式 - 但不要觉得你只受限于其他人正在做的事情。

答案 3 :(得分:2)

在你(1)多次需要它之前,它不是一个“模式”; (2)可以独立于特定问题域的方式描述它。

那就是说,如果我按照自己的方式行事,我会宣布暂停新模式,或者拥有一个官方模式语言库,它不会成为“模式”,直到它被记录,同行评审和显示不要复制现有的模式。

大多数情况下,当人们谈论“制作模式”时,他们的确意味着他们找到了他们想要重复使用的代码片段。

答案 4 :(得分:1)

没有理由不能将自己的模式和反模式记录下来,作为与他人分享你学到的东西的方式;但是,每个技术娴熟的软件开发人员都不太可能真正发现其他地方尚未发现和记录的内容。在发布这样的模式之前,请确保另一种模式尚未涵盖此案例,以避免以后出现尴尬。

答案 5 :(得分:1)

设计模式的主要用途之一是与其他程序员沟通设计的方法。如果您创建自己的,那么只有您会意识到它们并且它对通信没有用。

通常开发人员会创建我们自己的设计模式,将这些模式与已发布的模式相关联,为我们提供新的想法和见解,并提高我们的沟通能力。

答案 6 :(得分:0)

如果你发现自己在一个有很多极端抽象机会的大项目中工作,你可能也会这样做。

但是,总的来说,设计模式是由那些花时间研究大型软件开发的人创建的,而不是自己和其他项目。

http://en.wikipedia.org/wiki/Design_Patterns

答案 7 :(得分:0)

软件设计模式通常适用于重复出现的问题,而不是项目特定的。您为自己的问题域找到的解决方案可能被认为是模式,如果它们足够通用并且可以重复使用以用于类似问题的类似项目。

模式存储库不断增长,因为软件开发出现问题需要越来越多的解决方案。