最近的 Java 项目之感想

2017 年 11 月 16 日
 assad

最近接了两个小活,都是 Web 项目,客户指定 JAVA

基本采用的 SSM 以及 Srping Boot,总体感觉。

JAVA 的写法,还是太啰嗦,一堆 set,get,一个类里面,净是 get,set 了

持久层的 mybatis,感觉基本就是手写 SQL 了,因为项目较小,没有复杂的表连接操作,所以感觉使用 mybatis 是有点用错了。把 sql 写到一个 xml 文件里,项目 SQL 非常多的话,可读性就差的很了。我真想说,挫,挫,挫。不会写 sql 的,就完犊子了。

部署,因为很不喜欢 Tomcat,但是 Java 的开发人员选用了 Tomcat。客户提供的运行环境是 Windows,部署就花了半天,不是这个问题,就是哪个问题。JDK 版本不一致,JVM 内存不足无法启动,启动时间及其慢。我想,这要是 PHP 或者 Python,那是分分钟的事啊。Java 部署怎么这么难。写项目的这个哥们还是个 5 年经验的。

然后因为最初写项目的哥们要离职,交接项目,新来的哥们是个 6 年经验的。结果前面那哥们的项目,git 上 down 下来,愣愣是折腾了大半天,才把项目跑起来。我就想,至于么,别人的项目代码,别人想要跑起来,也不至于折腾这么长时间啊。

最后,项目预上线,客户不停提出修改页面啊什么的

每次修改完,都要重新部署。我的个哥,痛苦异常。就是改了模板上一个简单的标签,得,重新部署。

难道不痛苦么?好痛苦啊。我对 JAVA 一直没好感,严谨导致啰嗦。各种规则,各种乱七八糟的玩意。

哎,人生苦短,我用 Python。还有我的 PHP。

一家之言,大家轻喷。

19391 次点击
所在节点    程序员
142 条回复
rswl
2017 年 11 月 16 日
getter/setter 挺方便的啊
wupher
2017 年 11 月 16 日
Mybatis 写小项目还是挺麻烦的,虽然可以能用插件可工具反向数据库生成设置与模型。但是基础的增删改查都是要手写修改。

Java 默认的 Getter Setter 前面有说过用 lombok

我现在一般使用 Groovy 来进行开发,仍使用 SpringBoot 框架,使用 SpringMVC ( API 基本不变,但是 Groovy 的语法糖会使大部分冗余的代码如 Getter Setter 时间转换等变得优雅和精简。

数据库层使用 GORM,GORM 连接 SpringBoot 可参见 Gorm 的文档。它基本上是在 Hibernate 上模拟 ActiveRecrod。常用的数据库操作会变得非常简单。写一个简单的模型类,数据库表就生成了,模型类上直接可以做增删改查,无需手写任何代码,包况关联查询。

缺点是生成数据库表字段属性还有进一步优化的余地,在你上生产之前可以把 chema 导出来,手动进行优化。
assad
2017 年 11 月 16 日
@zjsxwc Golang 最后还不是需要前面挂个 Nginx 反带,如果你使用的 BIN 方式部署,改个什么,还不得重新生成 BIN 文件
incompatible
2017 年 11 月 16 日
@NeinChn 嗯。等你想给 java bean 加个字段,lombok 用户写好字段就行,你得再用 IDE 自动生成一次,又-了几 s。
你问我有+1s 啥意义?我觉得我们公司的工程师每年通过 Lombok 省下几十万秒,留出这个时间用来做更有意义的事,导致公司财报好、股价高、老板开心年终发大包,这就是+1s 的意义。

新人入门更简单这件事完全站不住脚。新人搞不好要问你 为啥不用 Lombok ?

另外说到 Tomcat/VCS 什么的,你要搞清重点:我在讲的是 IDE 装个插件没什么大不了的,不是在跟你讨论 VCS 怎么用、Tomcat/Jetty 怎么跟 IDE 集成。
NeinChn
2017 年 11 月 16 日
@incompatible
1w 个人节省几十万秒,一个人一年节省几十秒,这个时间能做啥?
当然你就是随便说个数字我也懂,就这能腾出的这么点时间其实改变不了什么
考虑一下当引入 lombok 遇到 BUG 的时候,几十秒能解决么,为了这么几十秒的收益牺牲更多的时间
当然如果你说你用的很好一直没有遇到 Bug,其他人呢...

另外说到 Tomcat/VCS 什么的,你要搞清重点:我在讲的是 IDE 不装任何额外插件也可以方便简单进行开发,不是在跟你讨论 VCS 怎么用、Tomcat/Jetty 怎么用。
barbery
2017 年 11 月 16 日
对接过 java 的后台,惨不忍睹,ie6 风格
incompatible
2017 年 11 月 16 日
@NeinChn 不。我就一定要装 vim 插件,不装 vim 插件的 IDE 不能称作可以方便简单进行开发的 IDE。既然要装 vim 插件,我不在意再装个 whatever 别的什么。
说到底,你要实现的某些功能 /达到的某些效果,就算不在 IDE 装插件,你也免不了用个其它什么东西来实现。SourceTree 你要不要装一下? mvn plugin 你要不要配一下?该做的事是逃不掉的。

说到 Lombok 会引入 bug,你用的任何一个工具、任何一个 library 都会面临同样的情况,然而你还不是义无反顾地用了?拿这个说事情是没有意义的。

最后说到话题本身:其实 lombok 或 IDE 自动生成 setter/getter 都弱爆了。使用原生支持 property 的语言才是正解,在 java 生态里我推荐 groovy 或 kotllin。
skyFuture
2017 年 11 月 16 日
@assad 贵司是哪里的哦?我去面试看看哈哈
Terry05
2017 年 11 月 16 日
楼主这样的大菜鸡,来这里如此吐槽,简直就是找骂

就好像平时都只是拿着手机拍照,突然因为需要被迫要使用单反来拍照,于是到处吐槽单反怎么这么难用,还要什么换镜头,还要设置什么光圈、快门,怎么那么麻烦,弄了半天怎么拍出来照片还不如我的手机拍的照片!!!

对不起哦,是你自己不会用
NeinChn
2017 年 11 月 16 日
@incompatible
我想表达的就是:在 Lombok 和 getter/setter 之间做选择,lombok 可能会引入 bug,但是 getter/setter 不会(当然万一 IDE 有 BUG 这个就特别尴尬了,但是由于应用范围不同,而且更好解决,肉眼可以看出问题,lombok 生成的代码 debug 难度至少高了一个级别)
基于效率时间考虑,万一引入了 bug,这节省的时间就完全不值
你要说其他工具其他 library 就扯远了....

装插件纯属个人喜好问题,如果能提升自己的开发速度,那当然装装装
但是不能绑架其他人,vim 插件你装就装了,别人不装一样用,但是 lombok 不一样,别人不装就会飘红一片无法使用 IDE 编译
对,即使不使用 IDE 插件,也总是需要使用其他手段来做的,但是这个是一次性的,配好了就一直可以用
不需要每个人针对这些东西做调整,例如 mvn plugin,我写好了 POM,其他人不需要做任何操作
这才是对自己负责对别人负责对团队负责...这就是意义

回到话题本身,我也觉得 getter/setter 很丑陋,Function 不是 first class 导致 lambda 特别丑陋
尤其是遇到一些函数式的库
出现一堆这样的 class
Tuple1<T1>
Tuple2<T1, T2>
Tuple3<T1, T2, T3>
Tuple4<T1, T2, T3, T4>
Tuple5<T1, T2, T3, T4, T5>
但是其实本身并不太影响开发效率,的确是繁琐了一点,但是开发效率并不等价于要敲多几行代码所花费的时间
又不是写最简单的 CRUD,这一点点时间确实没必要在乎....
zjsxwc
2017 年 11 月 16 日
@assad #103

Golang 最后还不是需要前面挂个 Nginx 反带,如果你使用的 BIN 方式部署,改个什么,还不得重新生成 BIN 文件

-------

nginx 部署又不依赖你说 php 还是 golang 写的程序, 就算你单独搞台机器跑做 nginx 也没关系.

golang 如果不改涉及 go 的代码, 只是改 html 模板文件也不需要编译, 再者 go 的 bin 部署就一个文件, 没有各种部署依赖问题, 比 php 这种要多加个 c 拓展功能就各种鸡飞狗跳, 也比重新 build docker 容器简单很多
dhssingle
2017 年 11 月 16 日
还是 C#方便,部署 语法都没那么多屁事
hasbug
2017 年 11 月 16 日
同感,尽管我只是一个小前端
leaves615
2017 年 11 月 16 日
那个语言都有它的优势和弱势,应该从使用环境上去发现它的优势,并最大化发掘。 横向单点对比,只能说明还没到达“无招胜有招”的境界。
现在的热门语言,对多平台支持都是非常不错的。 抱怨平台问题,只能说明 2 点:1.对平台本身不熟悉,2.对语言本身不熟悉。 现有很多的软件都是多平台支持,多平台交叉编译。
kenshinji
2017 年 11 月 16 日
@assad 要生产力显然还得看 django 或者 rails 啊
wangxiaodong
2017 年 11 月 16 日
@assad
你对 java 的用法不对啊!

部署问题已经被 docker 解决了,一个 Dockerfile 部署文件,外加一个 docker run xxx 命令,所有依赖所有部署细节都将自动解决。

这种方式不但部署简单,而且对宿主机无污染,不需要了解任何细节。

即使修改了一个标签,也可以通过 ide 的 docker 部署自动重新发布,不需要你任何额外工作。


另外,MyBatis 有 CDI 版本( https://github.com/mybatis/cdi ),直接注入使用:
@Inject UserDataRepository mapper;
UserData user=mapper.getUserDataByUsername("myUserName");

定义数据访问接口也可以不用 xml 配置文件,直接用 java 注解:
@Mapper
public interface UserDataRepository {
@Select("SELECT * FROM user WHERE username = #{username}")
UserData getUserDataByUsername(@Param("username") String username);
}
Jimrussell
2017 年 11 月 16 日
看完蛋疼。很多小公司通病,包括 PM/dev lead 也是楼主这样水平不怎么样的。靠谱点的 java 熟练工一般都看不上楼主这家公司吧。
fanqianger
2017 年 11 月 16 日
你为什么不去做中间件?
jason19659
2017 年 11 月 16 日
嫌 SQL 麻烦用 NOSQL 啊,NOSQL 也嫌麻烦直接用 mapDB 存吧,不会写 SQL 的还能通过面试?你要是觉得没人改你的代码你也可以不写 setter,你全用 static 都没人管你。
对 PHP 才是最好的语言。以后不要写 JAVA,有点骨气,不用 php 的就不接
0Kelvin
2017 年 11 月 16 日
@dhssingle 现在公司用 C#,Java 转过来表示开发起来感觉省了好多事,就是生态还是没 Java 好

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

https://v2ex.ih06.com/t/406805

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

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

© 2021 V2EX