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

使用设计模式的疑问

  •  
  •   JustinJie · 2021-04-19 11:17:17 +08:00 · 2604 次点击
    这是一个创建于 443 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 首先作为一个 crud 开发者, 大量的 if-esle, 重复的工作让我感到是时候提升自己了
    2. 所以最近在看设计模式, 初涉设计模式, 就想到工作中的功能, 每看一个就想能否套用
    3. 现在感觉自己有点陷入设计模式的怪圈, 是否有必要在 crud 的工作中, 考虑设计模式, 是否会过度设计呢 ?

    大佬们 指点指点

    17 条回复    2021-04-22 17:04:39 +08:00
    4kingRAS
        1
    4kingRAS  
       2021-04-19 11:20:47 +08:00   ❤️ 2
    JustinJie
        2
    JustinJie  
    OP
       2021-04-19 11:32:25 +08:00
    @4kingRAS # 1 感谢 马上看下
    huifer
        3
    huifer  
       2021-04-19 12:29:39 +08:00
    就单表而言可以尝试模板模式,其他的操作可能并没有办法说直接使用某个设计模式。
    abersheeran
        4
    abersheeran  
       2021-04-19 13:04:51 +08:00
    设计模式就是代码模板……我个人觉得如果你能自己想到好的方式,那么别去看模板。如果你实在想不出来,先看模板,然后在多次练习之后忘掉它们。
    zjsxwc
        5
    zjsxwc  
       2021-04-19 14:36:15 +08:00
    设计模式根本上是 SOLID 原则的实践例子。

    个人对设计模式试用体会。

    - 为了减少 Bug 出现,就不修改已有代码,或者无法修改三方代码根本接触不到三方源代码、或者没权限修改三方代码等等类似的场景。

    - 配合依赖注入容器进行黑魔法。

    - 常见的代码共识或者说习俗,比如为了节省内存提高性能的单例,参数很多且能够按需配置参数初始化时的 builder 、遍历树结构的 visitor 、编辑器支持撤销 undo 的命令模式、搞事件系统时用的观察者模式等等。

    - 弥补当前编程语言表达能力的不足,比如 C#有了 delegate 就不用啰啰嗦嗦的和 Java 一样写一大堆类来实现观察者模式,比如动态语言 Ruby 、JS 、PHP 都可以运行时动态的给对象加方法,也就不需要和 Java 一样写一大堆类来实现代理模式 /装饰器模式等等。
    slert
        6
    slert  
       2021-04-19 15:09:55 +08:00
    放心吧 CRUD 是用不到了 如果你有兴趣造轮子的话 或许会用到
    3dwelcome
        7
    3dwelcome  
       2021-04-19 15:43:05 +08:00
    就像用 MD 来描述 BLOG 一样,也有人想用纯文本来描述后台表单之类的界面,并且做得也不错。

    但是也不是每个需求都能抽象化,你 if else 要化简成配置文件,其实还挺难的。

    我个人建议是,如果造轮子,那就多写一些源代码预处理工具。代码变少后,修改和维护成本就降低了。
    BeautifulSoap
        8
    BeautifulSoap  
       2021-04-19 15:59:16 +08:00 via Android
    crud 你想用设计模式都不太能用到啊
    也就工厂,单例这几个常用的,但问题是这几个模式就算你没学过设计模式平时也都在用。。。。。
    unco020511
        9
    unco020511  
       2021-04-19 16:15:41 +08:00
    crud 好像没啥能设计的吧
    niub
        10
    niub  
       2021-04-20 09:22:05 +08:00
    我的理解是:看情况。
    我前两年总结过一次工厂模式配合策略模式的优化实践:地址在这里(有兴趣就看看吧): https://www.cnblogs.com/cone/p/12002913.html

    项目中对于复杂或多变的需求,巧用设计模式能够解决很多问题,没什么好怀疑的。至于要不要优化,像 if else 这种逻辑判断,如果目前超过 2 次或 3 次,而且可预见的,未来还会有更多的 if else,那就赶紧重构了。
    niub
        11
    niub  
       2021-04-20 09:28:15 +08:00
    补上一条回答:
    我看到楼上有较多人回答 crud 没什么能设计的,这个理解我觉得有问题,我以 Java 为例,灵活定义接口,抽象类,配合设计模式真的会让代码可读性提升不是一点半点,你要是始终面向过程编码,那当我没说。
    312ybj
        12
    312ybj  
       2021-04-20 11:58:26 +08:00
    一楼推荐的阿里文字已经很好了,“找到变化,封装变化”。 设计模式针对的就是变化。 楼上有人说 crud 用不到设计模式,curd 也是服务于业务,而业务是多变的。技术是业务需要的一个工具,当掌握每种设计模式的应用场景、特征、优缺点,以及每种设计模式的关联关系,就能很好地满足日常业务的需要。
    312ybj
        13
    312ybj  
       2021-04-20 13:11:54 +08:00   ❤️ 1
    如果是真要学习设计模式的话, 必须要在实践中用到, 你先看看策略模式吧 我之前写过一篇博客 https://juejin.cn/post/6937158601584672804, 后面可以加上责任链之类的。书籍的话,还是要买一本,推荐《设计模式就该这样写》,给你推荐一个网站 https://refactoringguru.cn/design-patterns/catalog 。 祝你早日掌握设计模式的精髓
    jones2000
        14
    jones2000  
       2021-04-20 19:31:06 +08:00
    只要能完成任务,上线,就可以了, 至于你怎么实现无所为了。 就跟你打架一样, 你是用华丽的十连斩,还是直接上去狂咬, 能把人干趴下就可以。
    hhjswf
        15
    hhjswf  
       2021-04-20 20:49:09 +08:00
    @niub 这种意义不是特别大吧,可以写在配置里。。
    niub
        16
    niub  
       2021-04-21 08:55:27 +08:00
    @hhjswf 写配置?意思是业务逻辑写配置吗?我的理解是,端口 | IP 等这些环境信息写写配置,还可以,业务代码,类似逻辑判断这种写配置有点离谱吧,你目前是这么做的?(不杠,正常交流)
    Nauyus
        17
    Nauyus  
       2021-04-22 17:04:39 +08:00
    学习设计模式的三个阶段:不会用,滥用,合理使用
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1097 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:55 · PVG 05:55 · LAX 14:55 · JFK 17:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.