设计模式在现实世界中的普及程度如何?你在日常工作中是否使用它们 - 与同事讨论如何以及在哪里应用它们 - 还是它们更多地仅是学术概念?
它们实际上为您的工作提供了实际价值吗?还是它们只是人们谈论时显得聪明的东西?
注:出于这个问题的目的,忽略像 Singleton 这样的“简单”设计模式。我谈论的是设计您的代码以便您可以利用 Model View Controller 等模式。
设计模式在现实世界中的普及程度如何?你在日常工作中是否使用它们 - 与同事讨论如何以及在哪里应用它们 - 还是它们更多地仅是学术概念?
它们实际上为您的工作提供了实际价值吗?还是它们只是人们谈论时显得聪明的东西?
注:出于这个问题的目的,忽略像 Singleton 这样的“简单”设计模式。我谈论的是设计您的代码以便您可以利用 Model View Controller 等模式。
在我看来,问题:“你是否使用设计模式?”,单独提出来有点缺陷,因为普遍的答案是“是”。
让我解释一下,我们程序员和设计师都使用设计模式...我们只是不总是意识到它。我知道这听起来很陈词滥调,但你不会去寻找模式,而是模式会找上门来。你设计东西,它可能看起来像一个现有的模式,你以那种方式命名它,以便每个人都明白你在说什么,你的设计决策背后的基本原理更加强大,因为已经在之前被广泛讨论过。
我个人将模式用作沟通工具。就是这样。它们不是设计解决方案,也不是最佳实践,也不是工具箱中的工具。
别误解我的意思,如果你是初学者,有关模式的书籍将向你展示如何“使用”他们的模式而不是其他错误的设计来解决问题。你可能会从这个练习中学到东西。然而,你必须认识到,这并不意味着每种情况都需要相应的模式来解决。每种情况都有一些怪癖,在那里需要你思考替代方案,并做出没有完美答案的困难决定。那就是设计。
然而,反面模式是完全不同的一类。你实际上希望积极避免反面模式。这就是为什么反面模式如此有争议的原因。
回到你最初的问题:
“我使用设计模式吗?” 是!
“我是否积极倾向于设计模式?” 不是。
我确实尝试过使用它们。它们确实有助于维护代码的可读性和可维护性。然而,有些人会滥用它们,通常是通过强制将系统强行套入一个不存在的模式。
我会在适当的时候使用设计模式。我认为看到开发人员仅仅为了炫技而在代码中实现设计模式是有点悲哀的。但对于正确的任务,设计模式可以非常有用和强大。
除了简单的设计模式外,还有许多在“现实世界”中使用的设计模式。Stackoverflow使用了模型-视图-控制器(MVC)模式作为良好的示例。我在雇主的项目中多次使用了类工厂,并且我已经看到许多已编写的项目也在使用它们。
我并不是说每个设计模式都被使用,但是许多设计模式确实被使用了。
是的,我们会使用设计模式,通常发生在我们开始设计某个东西时,有人注意到它类似于一个现有的模式。然后我们会查看它并看看它如何帮助我们实现目标。
我们还会使用未记录的模式,这些模式是从大量设计中出现的。
请注意,我们并不经常使用它们。
是的,我的日常工作中会使用Factory、Chain of Responsibility、Command、Proxy、Visitor和Observer等技术。至于MVC方面,这个网站似乎使用得很好,在最新的播客中,开发人员对它赞不绝口。
是的,设计模式或抽象模式是我的生活的一部分,无论我看到哪里,我都开始看到它们。因此,我被它们包围着。但是,正如你所知道的,一知半解是很危险的。因此,我强烈建议您阅读GoF书籍。
关于设计模式的主要问题之一是,大多数开发人员只是不理解这个概念,或者不相信它们的作用。而且大多数时候他们会争论变量、循环或开关等问题。但是,我坚信如果你不会说出模式语言,你的软件将无法走得远,你会发现自己处于维护噩梦中。
正如你所知道的,反模式也是很危险的事情,当你对设计模式缺乏专业知识时就会发生。而重构反模式则更加困难。关于这个问题的推荐书籍是《反模式:重构软件、架构和危机项目》。