如果你在程序中使用到“设计模式”,是不是说明你所使用的编程语言“不够强大”?

2018-11-12 21:05:01 +08:00
 aneureka

今天刚读完《黑客与画家》,里面有一段是这么说的(第十三章):

「在面向对象编程的世界中,我们大量听到“模式”这个词,我觉得那些“模式”就是现实中的因素,也就是人肉编译器。当我在自己的程序中发现用到了模式,我觉得这就表明某个地方出错了。程序的形式应该仅仅反映它所要解决的问题。」

不知道大家对此是什么看法,关于语言设计

4019 次点击
所在节点    编程
11 条回复
BinRelay
2018-11-12 21:07:48 +08:00
按照你这个逻辑 编程语言应该自己写代码
aneureka
2018-11-12 21:15:16 +08:00
@BinRelay 我认为作者主要认为“设计模式”是编程思想,而具体设计程序的时候代码应该只包含业务逻辑。
lhx2008
2018-11-12 21:27:40 +08:00
事实上,SpringBoot 很多地方已经用了设计模式,并且进行了一定的抽象,比如 Spring JPA 动态代理接口、模板模式,Filter Chain 责任链模式,Applicationlistener 实现了观察者模式,还有 IOC / AOP 等解耦方法,Bean 的工厂模式,单例模式等等。
但是设计模式这种东西业务还是会用到的,比如策略模式,工厂模式,适配器,装饰器等等。
lhx2008
2018-11-12 21:30:55 +08:00
设计模式还是太过抽象了,比如,在 Java 中 使用 lambda 表达式,你就可能已经使用了好几种模式:命令模式、策略模式、闭包 等(抽象的理解),当然底层还有责任链模式。
ianva
2018-11-12 21:34:09 +08:00
设计模式的作用被夸大了,让一些动态语言和函数式语言里很简单就做到的东西变复杂了,当然如果从另一个角度看 haskell 里那些 functor,monad 也算是一种模式

王垠也聊过一些,http://www.yinwang.org/blog-cn/2013/03/07/design-patterns
Wincer
2018-11-12 21:35:03 +08:00
这么说吧,本书的作者是 lisp 狂热粉丝。而我们通常所说的设计模式存在的原因很大一部分是因为静态语言不易扩展,一直在重复的使用某种代码结构,久而久之便成模式了。而 lisp 在这方面相较其它语言要先进很多(宏),所以作者才会表达设计模式没有什么卵用。
yidinghe
2018-11-12 21:44:20 +08:00
如果把程序比作小说,那么设计模式就好比修辞手法。修辞仅仅是讲故事的手段,而不能决定故事本身,设计模式也仅仅是实现业务逻辑的手段。两者都可以用得好也可以用得坏。
Jex
2018-11-12 21:46:05 +08:00
Recursion schemes
darrenxyli
2018-11-13 05:37:24 +08:00
屁股决定脑袋,这作者...就比如说银行要排队是因为银行不行吗,不是啊。模式是提供一共使效率更高的策略。比如针对银行,异步排队,责任链流水线划分或者转接客服不就是个适配器吗。
zhazi
2018-11-13 07:38:26 +08:00
我觉得有一定道理,设计模式不过是在特定场景做出的特定处理,总结出来的一套方法论,如果语言表达能力比较强,真就没啥设计模式的事了,就拿 java 举例,通过 java8 之后这些年,策略模式 观察者模式平时会接触到的一些,可以被替换了
julyclyde
2018-11-13 12:07:37 +08:00
主要是现在太多的培训、教程、教材,空对空的讲授这些东西,让人觉得这帮人就是“很 java、很炒作概念”,产生方案

但其实在实践中,你自己慢慢总结,留下来的也是这些东西

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/507155

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX