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

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

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

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

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

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

6474 次点击
所在节点    Java
70 条回复
kop1989
2021-03-29 16:31:25 +08:00
完全没必要纠结。

我问你 1+1 等于几,你肯定会说等于 2 。而不会让我去用计算器。
因为你清楚 1+1 真的等于 2 。
同理。
Jooooooooo
2021-03-29 16:32:16 +08:00
不要过早 /过度优化.
NULL2020
2021-03-29 16:37:19 +08:00
@Jooooooooo 这段时间合作下来,我就觉得他有点这个问题,前面搞了两个月,注册登录权限都还没搞好,网上随便拿个轮子改一下,顶多一周搞定。

还有,一上来就整了套 spring cloud 微服务,汗。。
opengps
2021-03-29 16:39:24 +08:00
现在的硬件资源很充沛,不用过早纠结
你大量静态会增加初始化时候的内存占用,但是实际上一个不合理的全表查询就已经吞掉了大量的内存,所以这个优化的必要性,其实根本不必要这么早
winnerczwx
2021-03-29 16:41:30 +08:00
假设他说的是对的

基于以上假设, 从程序员角度他是优秀的

从项目创始人角度, 他是不合格的

你们需要的是用最短时间做出 MVP 版本, 而不是纠结用不用静态类
securityCoding
2021-03-29 16:51:46 +08:00
为什么要把 redis 操作方法静态化
kiripeng
2021-03-29 16:53:35 +08:00
只考虑技术相当于,经济学家不懂政治。。。。
quan01994
2021-03-29 16:55:59 +08:00
先把功能做出来,不要过早的优化。
wolfie
2021-03-29 16:57:32 +08:00
为什么要把 redis 操作方法静态化 +1
kaiki
2021-03-29 16:59:33 +08:00
先跑起来,手头没活就说在优化,以后顶不住就提桶跑路。
qwerthhusn
2021-03-29 17:05:10 +08:00
RedisTemplate 不好使? Redisson ? Jedis ?都可以直接用啊
zjsxwc
2021-03-29 17:07:54 +08:00
以我有限的 java 经验来说,
静态方法缺点是不能黑魔法,
容器好像都是基于动态代理实现 AOP 之类的黑魔法,
反射估计也不能修改静态方法的行为,
所以我写 java 是尽量避免使用静态方法。
uselessVisitor
2021-03-29 17:10:53 +08:00
为什么要静态化?托管不是很好?
arthas2234
2021-03-29 17:10:58 +08:00
@NULL2020
项目急得话,还是怎么快怎么来,但前提也是要封装好,方便以后重构
还有一上来就整微服务是什么鬼,项目是有多大哦。别到时候整了半天,项目都黄了。难道是想借这个项目练手
GM
2021-03-29 17:17:39 +08:00
public static 方法 == 全局函数
public static 变量 == 全局变量

看到这种代码我一般都呸一下,我就 tmd 想调用你一个方法,你 tmd 自己把整个系统都串起来跑。

这种代码想做单元测试?做梦比较合适。
ouyc
2021-03-29 17:22:39 +08:00
就算省能省到哪里去,几个静态方法难道还能撑破 JVM 。麻烦你问下那位后端,我想知道为什么静态方法多了不好,竟然还是关于 JVM 的
NULL2020
2021-03-29 17:24:10 +08:00
@securityCoding
@wolfie
@qwerthhusn

bean 的方式是在每个使用的地方引入,并且在业务代码处一堆重复的代码:
redisTemplate.opsForXXX()

而静态方法的方便之处就是不需要引入,把 redisTemplate.opsForXXX() 这些重复代码都封装在一个方法里了

@beichenhpy 各有各的好处吧,redis 操作本来就是一些基本命令操作,类似于工具方法,所以习惯使用静态方法
NULL2020
2021-03-29 17:26:26 +08:00
@securityCoding
@wolfie

反问,为什么不要静态化?望赐教
NULL2020
2021-03-29 17:27:23 +08:00
@GM 原谅我看不懂你想表达什么,有什么见解欢迎分享
pushback
2021-03-29 17:29:46 +08:00
先做出来,再优化,起步太高(指考虑太多)在小项目里只会拖延进度

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

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

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

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

© 2021 V2EX