彦祖们,写 CRUD 的时候会使用设计模式吗?

2021-06-14 13:25:52 +08:00
 x940727

本人写了挺多年的 Java 了,各种设计模式的书也看得不少,但是在运用到项目当中的时候,总感觉不太对劲,好像大部分都是多此一举,不仅不直观、增加理解难度,还会增加工作量,请问彦祖们写 CRUD 的时候会使用设计模式吗?具体是怎么使用的呢?

7919 次点击
所在节点    程序员
47 条回复
x940727
2021-06-14 19:35:42 +08:00
@Mutoo 我也是这么认为的。
x940727
2021-06-14 19:36:28 +08:00
@BeautifulSoap 其实并不是同时参与一堆项目,而是一个项目有很多人参与开发,然后每个人对于业务的理解程度,还有技术水平都有出入,就导致在设计上有缺失,随着项目功能开发的越来越多,就导致项目当中有很多很多重复的代码。就比如说现在有个充值功能,然后支付完成后回调这个动作会有很多种后续操作,但是因为一开始的支付并没有考虑这么多,就导致回调的处理代码随着业务增加写了一份又一份,这如果使用策略模式的话就会香很多,所以就问问大家有没有在项目当中使用到设计模式。
kaedea
2021-06-14 20:44:32 +08:00
CAP 模式
shakoon
2021-06-14 21:28:16 +08:00
用啊,一些常用的查询会做成函数或者存储过程
Leviathann
2021-06-14 21:32:22 +08:00
现在比较倾向于认为 design pattern 是一种语言
用来交流的
crclz
2021-06-14 21:55:32 +08:00
首先 web 框架( aspnetcore springboot )就在很大程度上帮你规划了代码。
另外,DDD 其实不难的。如果觉得 DDD 难,不知道有没有认真去读 IDDD 这本书。DDD 的战略层面的核心在于按照领域领域知识分离关注点(模块化),战术层面的核心在于按照函数依赖来分离关注点(模块化)。这种模块化的设计思路是不以语言、框架为转移的。总的来说 DDD 是一个只有学习成本、没有使用成本的东西,说什么落地难都是扯淡。
xckai123
2021-06-14 21:57:39 +08:00
设计模式写框架或者基础层用的多,平常基于框架写业务实现基本上就是堆基础代码;如果是个人项目就算了,如果是小组协作项目,反而是最基础的代码大家很容易理解你的思路,可以快速接手;自己在主框架外实现一些自己的设计模式你让跟你协作的人或者接手你项目的人情何以堪,轮 shishan 是怎么堆成的?
msaionyc
2021-06-14 22:55:45 +08:00
不要为了用一样东西而用
bthulu
2021-06-15 09:20:52 +08:00
crud 要个毛的设计模式, 宁愿复制粘贴, 不比你设计模式跳来跳去的香的多
linbiaye
2021-06-15 09:26:41 +08:00
如果是比较重要的项目,建议还是 oo 这一套,否则各种逻辑堆积在臃肿的 service,两三年后接手的开发就是心里一万句 mmp,愤而重构。虽然最后都会成为屎山,设计模式能大大减缓屎山的形成速度。
x940727
2021-06-15 09:46:09 +08:00
@crclz 一个人当然没有学习成本,一个团队有没有学习成本呢?不知道你对 DDD 理解这么深刻,有在团队里面推行这个东西吗?推行的结果怎么样呢?反正我是试过了,效果非常差。DDD 这个东西,有句话叫 [问就是都知道,用过没有就是都没有] 不是没有原因的。
kahlkn
2021-06-15 09:57:37 +08:00
我觉得如果是单纯的业务系统中的业务代码部分,大概率很难碰到。碰到的话,因为思维惯性,也会考虑 if else 方式解决。 我之前碰到过一个 根据传入的 Code 走不同业务的需求,if else 也能解决,策略模式也能解决。大致就是业务代码中设计模式很难碰到,碰到了也是惯性的 if else 。

不过如果写的是 框架代码,每个公司都会有的自己的框架包的那种代码,那里面出现涉及模式的概率比业务代码大得多了。
autulin
2021-06-15 10:15:13 +08:00
会的,看业务,设计模式用对了可以使代码更清晰,以及少写很多代码
polyang
2021-06-15 10:32:40 +08:00
自己 CRUD 时很难有机会用到设计模式,顶多用用单例和建造者这些,设计模式一般在框架中用的比较多一点。
312ybj
2021-06-15 10:32:44 +08:00
我大概一年前也问过类似的问题,那时候我特别想学习并实践设计模式。别人说别为了设计模式而设计模式, 问题是我都没用过,我都不知道该不该用,后来我尽量去凑使用场景。大概使用了 策略模式 职责链模式,使用 code 代替 if else, 使用 handler 代替 service,再参考一些技术帖子 https://mp.weixin.qq.com/s/qRjn_4xZdmuUPQFoWMBQ4Q ,感觉还是有点收获的,学习设计模式还是能提高自己的抽象能力的。 还有网上大部分案例真的不怎么滴,给的案例都是 system.out ,真正的业务给你整这个??? 建立楼主还是多找点使用场景,使用设计模式,到时候便能体会到底好不好用。 设计模式一定要学,也一定要用。
https://juejin.cn/post/6937158601584672804
https://juejin.cn/post/6959141486143209485
A555
2021-06-15 10:41:49 +08:00
策略用的多点
LarryWang
2021-06-15 10:55:44 +08:00
完全不需要。
人生苦短,CRUD,我用无远:enhancer.io
reactsub1
2021-06-15 11:00:17 +08:00
从实战的角度来讲,凭个人长期 CRUD 的开发和经验来讲,真的没有什么必要。即便是写大型互联网应用,基于 API, 微服务解耦程序,提高复用度即可。在面对一个具体的 CRUD 功能模块实现上,谈不上任何设计模式。
zardly666
2021-06-15 11:09:27 +08:00
一般会用策略+模板方法+责任链
a719031256
2021-06-15 13:43:31 +08:00
@x940727 你这想法太理想了,或者说你还是 cs 思想,现在 java 写业务用原来那套会疯的

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

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

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

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

© 2021 V2EX