设计模式(例如工厂模式、观察者等)需要知道写好代码吗?
当人们谈论在这里插入模式名时,我常常不知道这是什么意思,有时我意识到我实现了这个模式,甚至连名字都不知道。
我是一个自学的程序员,所以我试着学习模式,但它们是必要的吗?
我发现它们有时过于工程化,就像程序员有时高估并强迫自己使用的花哨的设计概念,即使他们可以编写干净和工作的代码,但这并不是一种常见的模式。
发布于 2014-01-21 15:13:17
为了编写好的代码,不需要设计模式。
它们是为常见编程问题的某些已知的好解决方案命名的。实际上,很有可能您使用了一些不知道的设计模式(例如,迭代器模式被构建成几种语言,因为它非常流行)。
了解设计模式的名称和含义只是对专业对话(以及对变量和方法的命名)的一种帮助--当您和另一方熟悉设计模式时,所发生的事情就更清楚了。
您不应该做的是寻找实现特定设计模式的方法--您应该朝另一个方向看--找到代码中已经存在的模式,如果代码更清晰,可以重命名代码。
因此,你不必为了成为一个好的编码器而研究或知道模式及其名称--如果你是一个好的编码者,那么你很有可能已经使用了很多模式而不知道。
发布于 2014-01-21 15:31:29
是的,模式是必不可少的。我将参考埃里克·利珀特( Eric )的如果我不使用软件设计模式呢?,他在其中指出:
变量是一种设计模式。方法是一种设计模式。运算符-加法、减法等-是一种设计模式。语句是一种设计模式。值是一种设计模式。引用是一种设计模式。表达式是一种设计模式。类是一种设计模式。您在编程过程中所做的一切都是一种设计模式。大多数情况下,这种模式在你的思维中根深蒂固,以至于你已经不再把它当作“设计模式”了。您必须学习的东西,如“单例模式”等等,只是没有(尚未)被输入您所使用的任何语言的模式。
这就说明了您使用了设计模式,甚至不知道它的名称。你还使用了一些你知道的名字,但没有意识到它们是模式。
关键是人们如何看待模式..。在某种程度上,我指责教育(或许是缺乏),因为他们期望设计模式像乐高( Legos )一样--“我们会得到一个抽象工厂,一个弗利华,一个单件和一个门面……所有的设计模式都会合二为一。”在真正开始对整个项目进行编码或思考之前,人们常常会问到“XYZ问题我需要什么模式”。
看看关于构建体系结构的原著“模式语言 (维基百科)”,模式是用来解决特定设计的东西。你想在钉墙里放个窗户吗?嗯,然后你放了一些残肢,一个头和一个底板等等(维基百科)。这是一个模式,你这样做是因为你想把窗户放在墙上。
请注意,在上面的示例中,问题首先出现,然后是设计模式。我需要这个,这就是我要解决的方法。相反,“我会在这里放置一些残废,底板等,这样我就有了一个窗口,因为我需要一个窗口”,这是一个错误的方式去做一个窗口的模式。同样,在软件开发中使用模式也是错误的。
另一件需要注意的是,如果你有两个人在做钉墙的工作,他们可以快速沟通,并理解当他们把窗户放进去时发生了什么。他们都知道和理解问题,模式和如何应用它。软件也是如此。我们有一个问题,需要创建太多的Integer对象?我们会放一个飞重。因此,两个编程人员进行了交流,并知道如何解决这个问题,因为他们能够谈论模式。
发布于 2014-01-21 15:12:40
不是的。模式最好应用于编写其他人(以及您自己)能够理解的代码。
巧妙地应用一个模式将使它成为一个奇特的设计概念,但是当一个模式适合一个问题时,使用它比想出一个创造性的解决方案更好。
模式通常都是陈词滥调,它们起作用,而且您可能在没有意识到的情况下使用了相当多的模式,但这不是忽略对它们的了解的借口,因为您会发现一些您不知道的东西,它将扩展您自己对编程的知识,而不是自己搞清楚所有的东西。作为一个自学的程序员,这是一项非常重要的开发工作。
https://softwareengineering.stackexchange.com/questions/224934
复制相似问题