包名不规范 亲人两行泪

2019-05-19 16:08:15 +08:00
 Leiothrix

背景

由于某种原因,也许是代码 Review 不善,也许是沟通太少,也许是开发人员代码规范意识不够,一个由很多人员协同开发的 Java 大项目下的子项目包名命名方式出现了好几种流派。假设 GroupID 为com.java,ArtifactID 为xxx,子项目里包命名至少出现了以下三种不同流派:com.Java.xxxcom.java.xxxcom.llx.xxx。Java 是不建议包名出现大写字母的,但偏偏这个大项目建立伊始的时候,负责人大笔一挥,GroupID 写成了com.Java这副鬼样子。槽点太多,竟不知从何说起。

问题

导致的问题:一些工具类无法愉快的进行共享了,com.Javacom.java是两个完全不同的包,我主要在 Windows 下进行开发,但是 Windows 的文件系统不区分文件夹和文件的大小写,例如Java文件夹和java文件夹是不能共存的,它会在你创建的时候询问是否将这两个文件夹合并。问题来了,跨平台系统的文件系统该如何抉择呢?典型的例子就是 Git 还有 Java 的包管理,Linux 是严格区分文件夹大小写的。配合 Spring Boot 令人窒息的组件扫描,每次调用其它模块的工具类,为注入 Bean 该选择哪个包的事情都得伤半天脑筋,感觉自己陷入了一个漩涡,心累啊。

3088 次点击
所在节点    程序员
22 条回复
sutra
2019-05-19 16:15:02 +08:00
Leiothrix
2019-05-19 16:16:53 +08:00
@sutra 老哥我之前已经试过这个了,没啥用
Ultraman
2019-05-19 16:19:31 +08:00
Leiothrix
2019-05-19 16:43:35 +08:00
@vcinex win10 有 WSL 啊
LokiSharp
2019-05-19 19:26:47 +08:00
重构改个包名不难吧?
719465553
2019-05-19 19:36:07 +08:00
见过 com.UI, class a_b,list.add(null);for(int i = 1;;)一堆坑的路过
boris1993
2019-05-19 19:36:21 +08:00
@LokiSharp #5 虽然这么说有点懒政的意味,但是
改出问题你负责?你打包票改完肯定不影响原有表现?
kassadin
2019-05-19 20:44:00 +08:00
按说有发帖的时间就够改完了,ide rename move 都是无痛的。
怕出问题就单文件分批次操作,能出问题也就是反射、配置、maven、混淆类的字符串,业务参数总不会带包名类名还区分大小写吧。
xuanbg
2019-05-19 21:37:39 +08:00
改个包名还会出问题?在路径中批量查找替换,分分钟搞定。
LokiSharp
2019-05-19 22:38:49 +08:00
@boris1993 #7 改个包名这种级别的重构都怕的。。。你们是没写单元测试么???
wangyongbo
2019-05-19 23:07:50 +08:00
我司的安卓工程师,把 APP 的包名用 com.android 开头,导致无法上架 google play。
NeinChn
2019-05-19 23:54:40 +08:00
如果你的包名是在 rpc client 里面,然后给其他几十甚至上百个外部团队用的
这种时候你还敢随便改包名么
又不是所有应用都是简单的单 server 应用
万一有人基于包名做反射,做 SPI,改包名没改彻底就是作大死....
Leiothrix
2019-05-20 00:06:05 +08:00
@LokiSharp 现在的问题是不敢去动那些在线上跑的东西,而且模块太多,上千个类需要修改成统一的规范凭我一个人去推动怕是做不到。我尝试过用 IDEA 去批量更改包名,最后以放弃告终,明天问问主管这东西改不改吧。
boris1993
2019-05-20 00:10:35 +08:00
@LokiSharp #9 前年,所谓”负责 QA ”的人,亲口告诉我,我们时间很紧的,没有时间预留去写单元测试
我知道,很操蛋。我当时也差点吐血。
但是,对于一个开发流程是先闷头写代码,文档最后补的公司,你又能期望什么呢。

就算不考虑这些,通常来说,我也不想去碰不是我写的东西,因为我真的没把握不出问题。一旦出了问题,那就是我的锅。
Leiothrix
2019-05-20 00:12:18 +08:00
@kassadin 上千个类,十几个不同功能的子项目,每个项目负责人都不同,IDE 还没智能到可以联动所有不同项目的包名一起修改。对了,还掺杂了很多 RPC 调用……
Leiothrix
2019-05-20 00:13:39 +08:00
@NeinChn 对的,因为有些项目是作为微服务部署的,掺杂了很多 RPC 调用,不敢改,改也改不及,先放着。
LokiSharp
2019-05-20 00:19:22 +08:00
@boris1993 #14 没单元测试的话那就别改了。。。用 WSL 吧
zwh2698
2019-05-20 00:34:34 +08:00
Java 的重构工具很牛逼,兄弟你不能让工具闲着。创建项目的那个傻子,一定没有丰富的多平台经验。所以你不要闲着了,受个累,让大家都爽一下
iamdqncoder
2019-05-20 01:09:28 +08:00
前人挖坑,后人跳坑
dengtongcai
2019-05-20 09:03:33 +08:00
规范就是小写啊

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

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

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

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

© 2021 V2EX