关于 Java 很重有感

2022-05-10 11:20:45 +08:00
 Bingchunmoli
  1. 感觉很多人对 java 还停留在 j2ee 时代,不过 java 还在 jdk 还在 1.8 ,就不需要谈了。
  2. 今天写前端突然发现前端的路径也是他们俗称的臭长,明明一个 model/LoginInfo.ts 就能创建为 api/interface/LoginInfo/index.ts 特别是 index.js index.ts 都是创建文件单一个 index 明明如果不是多个就叫 router.ts 就好了嘛,不知道有什么特殊的吗。
  3. 我觉得有一句话我挺认同的,路径长,一个是便于管理(很多写路径规范吧,或者跟着教程学的就是这样),一个是和语言无关,和写代码的人有关。毕竟还有的人接口前面带 I 有的人不带的。没有对错之分。
15031 次点击
所在节点    程序员
142 条回复
statumer
2022-05-10 17:04:54 +08:00
@Chinsung
你是怎么做到 JVM 的性能和 Spring 的性能都能混淆的?
是不是在你的心目中 Spring 就是唯一的、不可亵渎的神?
我忏悔,我侮辱了 Java 世界的 One True God🤣
建议 Kafka 用 Spring 重构,自己封装 Java NIO 用 reactor 太落后了。
zmal
2022-05-10 17:21:45 +08:00
op 最好从一个具体的场景或问题出发,不然这个问题无法讨论。
Chinsung
2022-05-10 17:21:55 +08:00
@statumer #41 你这种人确实真心让人懒得理你,spring 作为一个容器,确实大大的影响了 JVM 性能,你自己看看你自己前面说的都是什么东西吧,你说 Spring 阻碍了 DDD 还算你懂点东西,Spring 影响了 java 性能那你真是天才,我寻思是 Spring 提的 JDBC 和 J2EE 规范是吧? Spring 确实不是 One True God ,但是在你看来 Spring 就是 Java 的 original sin ,建议你大力推广下别的框架来拯救 Java 生态,让那 60%+的全世界 javaer 认清 Spring 的丑恶嘴脸
Joker123456789
2022-05-10 17:55:12 +08:00
@TWorldIsNButThis 不懂极少说几句好吧,java 的包名是为了 让类名唯一 才这么要求的。

比如 你写了一个 jar 包 有个类叫 StringUtils ,spring 里面也有一个类叫 StringUtils ,当这个 jar 包和 spring 被一起使用的时候,就会出现类名冲突。(千万别跟我杠你不会重复造 StringUtls 的轮子,我只是举个例子,你如果纠结 StringUtils ,那你不妨忽视他,想一个别的名字)

为了解决这个问题,所以出现了 类全名,类全名就是:包名.类名, 类名没办法去规范,总不能限制别人取什么类名吧? 所以只好限制包名了啊, 包名的规范是 倒置的公司域名(或者个人域名)+ 项目名 + 模块名, 域名就把范围限制在了 一个公司 或者个人,项目名 就进一步缩小范围 到团队,模块名 进一步缩小了范围。

就算再怎么蠢,也不至于在一个模块里出现同名类吧? 所以问题得到了解决。

你可能还会说:长就是长,没得洗,ok ,那我问你,go 的 import 后面的那一段短吗? nodejs 的 import 后面那一段短吗?

在源码里面,包名还有另一个身份,那就是目录,你写 go 不用分目录吗? 写 nodejs 不用分目录吗?
really28
2022-05-10 18:04:27 +08:00
难道分目录不是为了更好维护吗。。。 特别是大项目 + 多人开发的时候
Joker123456789
2022-05-10 18:06:59 +08:00
很正常,很多人就是学了点新语言,趁着新鲜感 就出来秀一秀优越感。 如果真让他们用两种语言 写同一个业务逻辑,代码量 肯定是半斤八两的。

至于 get/set 之类的, 这不是规范的锅吗? 跟语言有个屁关系,想偷懒的人 完全可以 把成员变量定义成 public 。

而且 java 的 三方库 非常丰富,官方库 也很丰富, 开发起来 效率到底有多低呢?
AllenHua
2022-05-10 18:07:49 +08:00
有了 idea 这种工具,觉得这不是问题,虽然看起来、阅读起来比较“麻烦”,但正因如此,项目结构清晰,信息量大,也容易理解。
james122333
2022-05-10 19:12:29 +08:00
@Chinsung

语言本身与框架本来就要分开来看 不是流行就是真理
spring 与没有动态反射的确实会有性能差异 感觉还是自己写爽多了

@TWorldIsNButThis

会有重复类名 真正的问题在于 java 并没有 import as 导致你要写完整包路径
mekingname
2022-05-10 19:31:20 +08:00
@Joker123456789

![]( https://kingname-1257411235.cos.ap-chengdu.myqcloud.com/20220507165820.png)
![]( https://kingname-1257411235.cos.ap-chengdu.myqcloud.com/20220507170149.png)

在 Github 上面,随便用一个关键词找 Java 代码,就会发现全都是这种嵌套十几二十层的结构。

如果只有一两个项目这样写,我可以说是程序员的问题。但是几乎所有 Java 项目都是这样组织代码的,只能说明是 Java 生态圈的问题,Java 的开发模式就鼓励这样写。而且,Github 上面,绝大部分的项目代码量连 500 行都没有,但是文件夹嵌套了几十层。

连个代码文件组织都搞得这么繁杂冗余,窥一斑而见全豹,Java 这个语言,无论是语言特性,还是生态环境,还是开发模式,都又笨重,成本又高,部署又麻烦。

Go 也要分目录,Node.js 也分目录,Python 也分目录,但谁吃多了没事嵌套几十层目录呢?别的编程语言目录是水平扩展的,Java 的目录是垂直扩展的。以你的例子,我自己的 StringUtil ,我直接在根目录创建一个 MyStringUtil 文件夹就放了不行?腾讯的 StringUtil ,就叫做 TencentStringUtil ,都放到根目录,就一层文件夹。简单又清爽。为什么要嵌套 com/xxx/yyy/zzz/mmm/tmd/fuck/shit/mmm/StringUtil?

你打开 Github ,同一个关键词,搜索,然后看不同语言的项目。只要 Java 会嵌套这么深的文件夹。其它语言哪来这么深的嵌套?难道只有 Java 程序员才懂软件工程,其它语言的程序员都不懂,写的都是玩具?

你看到所有人都在逆行,难道你不想想其实别人的方向是对的,Java 自己在逆行?
ipwx
2022-05-10 19:54:53 +08:00
@mekingname ummm 你的理由我认同,但我觉得你的例子不太妥当。

TencentStringUtil 不行,你得至少用 tencent/StringUtil 。

不过话说回来,我觉得问题的核心是,别的语言都会用下划线,比如 "flask_wtf"。到 Java 这边至少也得是个 spring.xxx.yyy ,就是不喜欢平行扩展命名空间用分隔符。这才是嵌套目录深的原因。
mekingname
2022-05-10 20:06:26 +08:00
@ipwx 你说的对。我认为,要创建一个文件夹,必须要保证这个文件夹下面至少有两个文件,这样的文件夹才有意义。如果只有一个文件,那么直接把这个文件放到最外层就可以了,根本没有必要用文件夹。
Chinsung
2022-05-10 20:21:31 +08:00
@james122333 #48 我也没说过流行就是真理,只是 spring 的缺点也和这个人所谓的性能没有任何关系,稍微了解一点 spring 的人也知道 spring 只是一个容器和规范,除了 MVC 之外几乎全部是依赖第三方开源的支持,spring 自己除了 mvc 和 bean 管理,其他全都是定义的扩展让各种框架和三方库去集成进项目而已,spring 一个基本既没有实现线程池也没有实现连接池的东西,基本代码都跑在 tomcat 工作线程里的东西,除了依赖比较多的反射实现注解,有什么讨论性能并且和 NIO 拿来 PK 的必要? spring 再有缺点,和他说的东西也没什么关系吧?
更别说现在 GraalVM 支持预编译但是又不能用反射了这件事多被诟病,反射切面只是设计方式,人们用它只是方便,spring 也没强迫你用
WispZhan
2022-05-10 20:56:57 +08:00
@dcsuibian
当年《 WOW 》也是这样,随便来个 MMORPG 就来 battle 一下
WispZhan
2022-05-10 21:00:49 +08:00
就没人聊聊 JVM 的其他语言?
SoloCompany
2022-05-10 21:02:47 +08:00
楼主真是角度清奇, 万万没想到连名称空间都能作为吐槽点开喷

看来大家都很喜欢玩 1.0 的 npm 抢包名的游戏
unregister
2022-05-10 21:06:05 +08:00
@TWorldIsNButThis 你语气让人很不爽,就你🐂?还一股浓烈的裹脚布的臭气?
codingadog
2022-05-10 21:22:31 +08:00
我再强调一遍,语言只有被人骂的和没人用的两种(手动狗头
chihiro2014
2022-05-10 21:47:07 +08:00
异步不一定快,同样同步不一定慢。
haah
2022-05-10 22:14:16 +08:00
操作系统算不算“重”?
searene
2022-05-10 22:14:20 +08:00
Java 的好处在于生态极其完善,语言虽然稍微啰嗦点,但是没有什么大问题,这对于一个企业来说就够了。

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

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

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

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

© 2021 V2EX