V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aneureka
V2EX  ›  编程

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

  •  
  •   aneureka · 2018-11-12 21:05:01 +08:00 via Android · 3982 次点击
    这是一个创建于 1963 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    但其实在实践中,你自己慢慢总结,留下来的也是这些东西
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1232 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:23 · PVG 07:23 · LAX 16:23 · JFK 19:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.