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

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

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

7955 次点击
所在节点    程序员
47 条回复
billlee
2021-06-14 13:27:57 +08:00
CRUD 都是框架搞好设计模式,我们照着框架文档用就行了吧
x940727
2021-06-14 13:32:28 +08:00
@billlee CRUD 难道就永远都是 Controller -> Service -> Dao,然后 if 、else 、for 就完事了吗?总归要有点追求的吧,而且这样的代码约束小,复用性差,改动起来风险大,随着代码量越来越多,还会出现很多重复代码,毕竟业务肯定会耦合,你写一下我写一下,看起来就很乱了。
sheeta
2021-06-14 14:07:08 +08:00
策略模式,模板模式整了一点
BeautifulSoap
2021-06-14 14:12:53 +08:00
等等 lz 你完全搞错了一件事,设计模式只是用来设计小组件或部分功能时的,不是用来设计整个程序或系统的,设计模式也帮不上这种忙

lz 你想要设计出一个更健壮的软件或系统,需要的是别的方面知识。比如 Layered Architecture 。再上面点就是 DDD 了,或者 Clean Architecture 这些
bnm965321
2021-06-14 14:21:38 +08:00
对第三方服务时候,各种 Adapter Pattern 应该写了不少
janus77
2021-06-14 14:27:40 +08:00
最简单一个,单例总会写吧?
MarkLeeyun
2021-06-14 14:44:03 +08:00
追求代码复用嘛。用点设计模式,但不要太复杂。避免给自己挖坑。
ericgui
2021-06-14 15:40:24 +08:00
适度复用代码是好的,但你不能为了复用而复用
我见过那种为了复用而复用的蠢货,最后还是一坨屎
ikas
2021-06-14 15:49:16 +08:00
你无时无刻不在用设计模式
Cbdy
2021-06-14 15:55:20 +08:00
CRUD,看一下 Clean Code 我觉得就可以了
chendy
2021-06-14 17:10:43 +08:00
设计模式不是强行上的
需要有比较复杂的业务和合适的场景才能用
Ariver
2021-06-14 17:36:36 +08:00
jdbc 是线程安全的吗
raaaaaar
2021-06-14 17:40:22 +08:00
不要故意去套就行,除非是单纯学习。如果经验比较丰富的话,哪些场景可以用都有数了,而如果没什么经验,建议在你感觉自己无法掌握了,感觉复杂度比较高的时候就可以考虑用了
jtsai
2021-06-14 17:49:27 +08:00
cs 这个学科,我想不到有什么比设计模式更没用的知识
x940727
2021-06-14 18:32:26 +08:00
@BeautifulSoap DDD 这个东西,严格实行目前来看并不是一个很现实的想法,顶多借鉴部分思想,因为这个玩意目前来看,业务方面要求编程人员有全局认知,技术方面要求程序员有高度抽象的能力。这就不符合现在大部分程序员都是螺丝钉,哪里有用往哪搬的情况。
x940727
2021-06-14 18:36:21 +08:00
@BeautifulSoap 还有我说的三层架构不就是 Layered Architecture 么……主要是在代码不停迭代的过程中,会出现相同功能的代码多次开发的情况,因为有可能原来的业务不完全适用,但是大部分适用的情况,这种情况如果设计巧妙一点的话,就可以复用了。
wolfie
2021-06-14 18:42:32 +08:00
扩展功能 或者 新功能复用老代码时候 再重构。
有些框架源码追读是真的累。
Mutoo
2021-06-14 18:55:50 +08:00
个人觉得 Functional Programming 更适合 CRUD
renmu123
2021-06-14 19:12:13 +08:00
不会,又不是不能用.jpg
BeautifulSoap
2021-06-14 19:30:31 +08:00
@x940727

你的意思是你同时有参与一堆项目,然后发现这些项目一些功能模块是可以共用的,但是不完全共用,所以想看看是不是能用设计模式解决这个问题让它们共用?

如果是这样的话,没人能给你具体的答案。因为不同业务逻辑和模块千差万别,我们不是你,并不知道这些业务功能到底怎么回事,适用什么设计模式。有可能你翻翻设计模式可以找到合适的解决方法,但实际上大部分情况是没有任何一种设计模式能解决你现成的业务抽象问题(当然单例模式、工厂方法这些简单的类生成的设计模式是例外)

那么解决这个问题的核心是什么,是对业务的建模和抽象能力。往往代码设计的问题源于建模抽象做得有一定问题。你说的似乎能共用但又不能共用,那一个可能性就是你的建模抽象做得还不够,那就需要你不断持续地重新设计模型、重构代码,找到一个能共用的模型,还觉得不够你可以找你的组员一起帮你思考和抽象(到这地步就是个团队交流的问题了)。但是理想是美好的,现实是没有银弹的,最终结果可能就单纯只是这代码你看着像能共用能抽象但实际上根本不能。

我说了这么多看起来似乎是什么都没说的空话,但是的确事实也就是这样,你的问题来源于各种业务的抽象,但我们这些旁观的人不是你也无法帮你建模。所以我才说你真要找答案,就往更高的那一层去找,比如 DDD 这个,虽然的确 DDD 可以很宏观很抽象,但也有 Entity, ValueObject,约束的设计之类比较细节的东西可以提供参考。抽象的问题你肯定得借助一些更抽象的东西

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

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

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

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

© 2021 V2EX