请教下,项目中静态方法过多有什么缺点?

2021-03-29 16:23:34 +08:00
 NULL2020

最近被朋友拉拢一起搞个小项目,我算是目前最后入伙的。

前几天提了个建议,把 redis 的工具类改成静态方法的形式(现在是以 spring bean 的形式交给容器管理),方便调用。结果另一位后端说不要,静态方法太多不好,问他为什么,说叫自己去看 JVM (黑人问号脸)。

我思考几天,也 google 了下,也没见着有特别有说服力的说法,自己勉强想到了一个点,那可能就是会导致 JVM 静态方法区容量过大,最终引起 OOM ?

但是,说实话,一个小项目,也就那点代码量,连一个工具类这点内存都要省了吗?

6474 次点击
所在节点    Java
70 条回复
shenjinpeng
2021-03-29 17:30:23 +08:00
基于面向对象还是函数式编程 ? 如果以后要对缓存 /db driver 进行封装, 需要把 redis 也封装进去, 那之前写的不就废了 .
cccssss
2021-03-29 17:33:48 +08:00
静态方法怎么连的 redis ?静态工具类里写死的么?连接池咋解决的?
chendy
2021-03-29 17:35:02 +08:00
问题是为什么不用 spring 的 bean 的方式?
静态不方便加黑魔法,比如切面,比如 mock,等等等等
tabris17
2021-03-29 17:35:43 +08:00
不至于影响 JVM 效率,不过耦合度太高了,不符合面向接口编程的模式
NULL2020
2021-03-29 17:40:53 +08:00
@chendy 上面说了,因为方便。

看了几个回复,比较中肯的说法大概是 [不方便加黑魔法,比如切面] 之类的了,可能我暂时还没遇到有这样的业务场景吧,所以影响了我的选择
NULL2020
2021-03-29 17:42:12 +08:00
@cccssss 连接用的是 Spring 容器里的 redisTemplate,静态方法只是对它进行的简单封装
cccssss
2021-03-29 17:54:56 +08:00
@NULL2020
redisTemplate 咋注入到静态类?从 beanFactory 中去获取么?还是静态类加 @Component ?然后想用 redis 静态类时候再注入一下然后再用?
agdhole
2021-03-29 18:20:43 +08:00
额外造个 facade
chendy
2021-03-29 18:27:40 +08:00
@NULL2020 能说一下方便在什么地方么?
hefish
2021-03-29 18:38:09 +08:00
能一上来搞 springcloud 的,肯定是大神。我这儿一个活动管理系统,也被做成了分布式的,zookeeper 都用上了。 可能工程师是大户人家出身,出手阔绰。
dqzcwxb
2021-03-29 18:38:31 +08:00
楼主说的是静态获取 redis 对象,而不是静态创建 redis 链接
简单讲就是把 @Resource 注入变成 RedisaMange.inst()方式获取 redis 操作对象
二者实际上没有本质区别,都是单例只是获取方式的写法不同
你同事说的含糊其辞估计他也不懂只是不想改,你想改的理由也不充分
所以,不改
Cbdy
2021-03-29 18:40:42 +08:00
LZ 同事说得没错,去看看 JDK 源码
munan56
2021-03-29 19:29:34 +08:00
他只是不想改。
GM
2021-03-29 19:58:45 +08:00
@NULL2020

我就问一句:静态函数你怎么注入?如果你们没用依赖注入的话,当我没说过。

为什么我这么恶心静态函数调用,是因为我维护过一个系统,里面每个 Service 都是静态函数互相调用,任何一个函数调用,都会调用到 B 、C 、D...模块里面的多个静态函数,然后这 B 、C 、D...模块里面的多个静态函数里面,又分别调用 EFG... 里面的 N 个静态函数,总之,一句话,想调用任何一个函数,必须要会启动整个系统,才能成功调用。想简单 mock 一下来测试一个某个函数?不可能,因为全是静态函数调用。
4771314
2021-03-29 20:01:27 +08:00
@GM 那你是捡到包了啊 AA
NULL2020
2021-03-29 21:27:54 +08:00
@GM 你这种是典型的因为一个极端案例而全盘否认一个在某些场景合理的存在
NULL2020
2021-03-29 21:28:56 +08:00
@Cbdy 有高见不妨分享一下,没必要这么隐晦
Cbdy
2021-03-29 21:41:57 +08:00
@NULL2020 没有隐晦啊,JDK 有很多好的实践,可以学习一下
huijiewei
2021-03-29 21:47:07 +08:00
业务写静态是有多想不开

顶多工具类用用静态
kassadin
2021-03-29 22:51:22 +08:00
写一回测试就差不多 get 到了

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

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

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

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

© 2021 V2EX