国内的 Java 体系真的很落后吗?

2 天前
 zsmile

看到别人说推荐一个 java 架构,默默想了下好像在公司里面看到的大多数都是 springBoot+mybatis 的形式,DDD 推出后好像也没看到什么公司用,是只有大公司在用吗?那现在国内外比较新的 java 架构都有啥呢?

11709 次点击
所在节点    Java
131 条回复
chuck1in
1 天前
@qq135449773 哎,其实就是这个问题,也有对这个行业没有太大的热爱的原因吧。
chuck1in
1 天前
@javak kotlin 配合 jooq 体验应该更上一层楼吧?直接用 kt 语法写 sql 像 linq 一样自然。
luoyou1014
1 天前
@haython 例如给古代的农民讲解收割机怎么先进,农民听了会说,我用镰刀也能割麦子,割完打谷也能得到麦粒,这个收割机也没什么大不了的,没办法做到我做不到的事情
zsmile
1 天前
@diagnostics 站一下老哥

@xuanbg 是的,硬要说,计算机底层的那些东西几十年都没变化,只是冷饭新炒[\doge],框架那些算是新的落地实践吧。

@a379395979 Laravel ORM 简单看了下,感觉可能和那增强的差不多,可能在某些复杂场景差距就拉开了吧,我也不好评价什么,毕竟不写 php 。php 是最好的编程语言哈哈哈

@qq135449773 我也支持这样,以前写 mybatis 和 hibernate 时,就觉得两个的场景不同,就像 mybatis 解决不了的,实在不行,就放到代码层面去解决了。

@chuck1in 有用过,是挺好用的。只是没在复杂场景下使用过,不好判断两者的差距。
haython
1 天前
@luoyou1014 #81 $flights = App\Models\Flight::where('active', 1)
->orderBy('name', 'desc')
->take(10)
->get();
我找了一段 laravel 这种代码,这种代码算先进?
zsmile
1 天前
@cp19890714 谈业务,大部分都是 crud 了。都能解决问题,只是好不好解决,怎么解决而已。
zsmile
1 天前
@luoyou1014 我也不懂什么叫先进,因为你说的这几种都没用过,光看代码,也看不出先进的地方,可能还是得深入到某个复杂场景写才知道了。
joyhub2140
1 天前
哈哈,我单表查询主要还是用 jpa ,多表或者一旦复杂起来的查询无论是什么工具都不顺手,最顺手还是 chatgpt + SQL 。
zsmile
1 天前
@kbyyd24 DDD 感觉还挺香的,但是门槛太高,国内也太少公司用了,都在冲业务,连正常开发都是能跑就行,再讲究统一语言太难了,除非一开始就定了规范制度,还有人做审计重视才行。
几百行 SQL 真的难受,尤其那些 BI 类的项目,分分钟都是这样的 sql
kandaakihito
1 天前
羡慕你们这些说不用 mybatis ,甚至有点抵制 mybatis-plus 的。我写的代码都是尽可能能用 mp 。

为什么呢?因为开发前期甚至是中后期,需求会五花大改,改到天翻地覆,表结构不得不做出巨大改动。这种情况下如果没有用 mp 而是直接写 sql 。。。
wanniwa
1 天前
国外那改 bug 写代码速度,跟乌龟爬一样。java 已经非常完善的体系了, 又没推出什么新的类似 Spring Springboot SpringCloud 系列的变革,已经比前端天天造轮子,一造一个坑好多了。
haython
1 天前
@kandaakihito 感觉那些都是没有被时间吊打的人,也没经历过团队合作
luoyou1014
1 天前
@haython relation 关联中的 with ,解决 N+1 问题
withCount, withSum 这样的聚合函数,解决统计问题

可以看一下文档: https://laravel.net.cn/docs/11.x/eloquent-relationships#counting-related-models
chuck1in
1 天前
@kandaakihito 不是,这里的问题是喜欢写 sql 不是只有 mybatis 可以用的。并不是说不用 mybatis 就必须要去用 ORM 。

上面提到了对于这种 SQL 的库非常完善的一个是 JOOQ ,另一个 DOMA ,都是比 mybatis 优秀很多的库。

我知道你喜欢 mp 是因为那个 crud 的模式,那种模式叫做 Simple CRUD 。这不是什么神奇的东西,任何一个正常的库都会提供这种支持。

https://juejin.cn/post/7437023118151450639

我写过一篇文章来介绍这个概念,可以看看。
luoyou1014
1 天前
@zsmile 不能只学一种语言,一种框架,会导致视野局限,只要了解了 3-5 种之后,很快就能理解哪种方案更优,大部分 orm 框架实现都在往一个同样的方向,建立数据库无关的模型层,通过定义表之间的关系自动解决 N+1 问题,自动嵌入预查询,通过语义化的查询替代 sql 。

类型做的更好的语言,C#,直接将数据库字段映射到类型上面,重载运算符,直接在语言层面上实现的 sql 语句的转化,python 弱一些,但基本也做到了这一点,php 的类型更弱一点,直接追求灵活性,不追求数据库字段的描述,实现代码数量大幅降低,但缺点就是字段都是文本描述,无法利用编辑器的提示。ruby 则是彻底追求灵活性,直接用元编程将字段映射上方法上面去,可以自动生成方法 find_by_name 。

评价一个 orm 的好坏,api 设计风格不提,至少要能优雅的解决 N+1 问题,我问做 java 的朋友,很多人连 N+1 问题是什么都不知道……
chuck1in
1 天前
@haython https://juejin.cn/post/7437023118151450639 可以看看这个 blog ,介绍了一个跟 mybatis 不一样的库。像这样的库还有的选的,总体来说只有体会了才能有的比较。
love2075904
1 天前
推荐一个 orm 框架 sqltoy ,应该是结合了 jpa 和直接写 sql 的优势吧,而且编写 sql 也比 mp 直观

https://github.com/sagframe/sagacity-sqltoy
LpLp
1 天前
javbus 和 javdb 挺好的啊
iyaozhen
1 天前
DDD 和代码架构关系不大。主要是人员的门槛太高了 而且大公司里也没人用
qinfengge
1 天前
mybatis 确实恶心,尤其是 typehandler ,不过 MP plus 还是可以的,简单的直接写,复杂的在 xml 里面配,算是 2 者结合的不错的了

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

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

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

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

© 2021 V2EX