看到别人说推荐一个 java 架构,默默想了下好像在公司里面看到的大多数都是 springBoot+mybatis 的形式,DDD 推出后好像也没看到什么公司用,是只有大公司在用吗?那现在国内外比较新的 java 架构都有啥呢?
101
zsmile OP @luoyou1014 你说 N+1 ,我也不知道,但是查了一下其实也只是不知道这种术语。也就是那么个回事儿。换个说法估计很多 java 从业者都知道
|
102
chuck1in 15 天前
@qinfengge 简单的直接写的这种模式叫做:SimpleCRUD ,然后复杂的为啥不直接用 Java 来写呢,这样不是更好。
我写过一篇 blog 介绍这个概念: https://juejin.cn/post/7437023118151450639 |
103
pangdundun996 15 天前
我倒是觉得 mybatis 挺好的,在复杂项目上掌控力更好,以前我们规定即使 selectById 也要放到 xml 里维护,因为项目大起来一但放飞后面就很难维护了
|
104
coder121 15 天前
javbus 和 javdb 挺好的啊
|
105
w0017 15 天前
ddd 不是 10 年前的概念?
|
106
luoyou1014 15 天前
@zsmile N+1 是行业通用的术语,每个 orm 框架都要必须解决的问题,但 java 开发者很少知道这个术语,属于对外界了解不足,mybatis 解决 N+1 的方案,上网搜了一下,都很繁琐,完全没有使用 orm 框架的优点
|
108
chuck1in 15 天前
@ala2008 如果使用 oracle 之类的商业数据库,jooq 要收费。如果使用开源的数据库比如 mysql 、pg 那些,有社区版本用,这个版本是不收费的。
|
109
chuck1in 15 天前
@pangdundun996 喜欢写 SQL 的话还是建议尝试下 JOOQ ,这里有模板代码可以下载 www.mjga.cc
像这种把「运行时异常」提前到「编译时异常的」 SQL 支持框架,写起 SQL 来和合并团队代码的时候更加舒服一点。如果使用 XML 除了本身写起来不方便以外,合并代码也是一个难事,经常出现大规模无法识别的合并冲突的问题。 |
110
AcFnu 15 天前
DDD 在任何语言的开发者中都不温不火,一个是需要统一语言,然后是建模先行,设计先行,其次要求开发人员整体有统一认知,毕竟抽象出很多名词出来。不说别的,即便连.NET 这种为了开发者改变语言特性或者提供框架层面支持,很多 neter 依然用 mvc 都算不上的事务 service (或者叫 sql 组装搬运工?无法单元测试,无法通过函数判断用途)。所以其实找问题放在任何语言任何框架都合适,轮子越出越多,但总是解决一个问题,引伸出更多问题。大环境的问题国内氛围就这样了,很多项目赶鸭子上架,都是先从无到有,从 0 到 1 ,至于 1-100 ,不好意思,考虑不了那么多,当然任何人也不可能一下子做出一个完美产品。软件这条路啊,保持自身技术储备时常更新即可。
|
111
specita 15 天前
DDD 需要精通业务和相关知识,硬套很可能画得不伦不类的
|
113
kbyyd24 15 天前
@chuck1in 看到你说的测试了,就是我说的那种。这已经不能算单元测试了。因为被测代码会真实地调用数据库,实际上这是一种集成测试。纠结这个名字其实只是为了区分测试的成本,毕竟单元测试很快就能跑完,而集成测试却需要花一些时间。
btw ,testcontainers 也挺香的,就是一些老旧的 pipeline 工具可能不支持 docker ,遇到这种就抓瞎了 |
115
htxy1985 15 天前
JOOQ 这种形式,和我刚入行时呆的公司自研的框架几乎用法一摸一样,那时候用的 java 还是 1.6 版本
|
117
luoyou1014 14 天前
@zsmile 关键是解决方案是怎样的……
|
118
ghostsf 14 天前
DDD 只是最近火了看到了更多曝光,就觉得很先进了?只是个设计思想而已,而且早就提出来了。DDD 的思想也得有人能领悟执行啊,有那么多能把业务吃透的开发吗?业务主甲方啥的都不一定可以,咋驱动设计开发?当然不排除有项目适合 DDD 。甚至 DDD 是不适合软件开发的,可能在其他行业不错。但回到问题,一个设计思想跟 java 体系落不落后有什么关系?另外落不落后看语言啊,框架只有适不适合,Java 都多少新版本了,还不够新不够先进吗?
|
119
securityCoding 14 天前
眼界放开点 web 框架就这点东西,一个 mybatis orm 这个月都吵了几次了。java 还有 spark flink 这些东西可以玩的
|
120
yuexiahaowu 14 天前
DDD 要有专门的人员 做基础准备和封装集成,不然最后就是一地鸡毛,我在公司就这门看这笑话
|
121
zsmile OP @luoyou1014 其实 N+1 问题,这些都是看你具体场景需要的,也不全需要放 orm 来解决(可能还是出于 mybatis 的使用习惯,复杂的全都用 sql 解决)
|
123
fisherning 14 天前 2
坚决站 mybatis 。
后端开发,自己不写 sql ,非要整一些不直观的 query lang 干嘛。那些东西最后还不如直接的 sql 呢。 另外,java 是工业语言,根本就不追求概念多新,最重要的还是工业化大规模适用。说到底,java 是生产语言 |
124
ShotaconXD 14 天前
我看很多人喷 xml 的,为什么不想想几十年过去了, 标记语言依旧无人能打得过 xml 。
语法糖就一定是新潮好用且符合发展规律的吗? 写个 SQL 怎么就写出来注解比 xml 高级的感觉了? DDD 火不起来为什么不想想是不是社会的问题,而不是设计的问题。 有些人总是走在前面,而市场并不会。 |
125
chuck1in 14 天前
@kbyyd24 我十分同意你说的关于测试这一块儿的内容。而且我觉得测试就必须要分单元测试、集成/结合测试、e2e 测试。当然,为了表述简单,全部称为单元测试也可以。但是在具体论述的时候必须分开,就是你说的测试成本不同。
这其中: 单元测试必须要是 0 依赖。 结合测试只能依赖当前的结合环境 e2e 测试的话,范围就比较大了,要使用 @SpringBootTest 来测试整个当前环境的内容 有了测试容器,现在就能够更加方便的去隔离不同的测试依赖的不同的测试环境了。 |
126
luoyou1014 14 天前
@zsmile 这样的回答就是农民说我可以用镰刀收麦子手动打谷,所以和收割机功能一样的回答
事实上其他语言都有了统一的解决方案,mybatis 还在看具体场景分情况分析,用 sql 更是原始时代的做法,总不能认为就 mybatis 的路线正确,其他所有语言的路线都错了吧…… |
127
WasteNya 14 天前 via Android
@ShotaconXD 因为国内的技术氛围就这吊样,故步自封,欧美的还有几个用 xml 写 sql 的?
|
128
chuck1in 14 天前
@WasteNya 其实本能的拒绝新生事务初看好像是对自己的一种保护,但是恰恰在 IT 这个行业,拒绝新生事务反而会让自己的路越走越窄。xml 肯定不是好东西,这个是软件工程上已有的定论,不然 Spring struct2 hibernate 之类的框架也不会淘汰掉 xml 了。
|
129
Richared 14 天前
相反我感觉 mybatis 反而很好,都是拉屎,拉在 xml 里比拉在代码里舒服多了。见过用 jpa 拉屎的。一个 selectbyid 查 40w 的数据。
|
130
chuck1in 14 天前
@Richared 说实话 mybatis 和 jpa 相比较我觉得不太恰当。jpa 是一个 ORM 解决方案,mybatis 只解决 O 的问题不解决 R 的问题(但是我们的真实世界大多数时候总是无数个 o 通过 r 关联起来)他大多数时候针对的是 O 的 Simple CRUD ,像这样的框架其实要类比的话,我个人觉得应该和 JOOQ 或者 DOMA 这样的框架做对比。
ORM 的话其实解决的问题跟 Mybatis 完全不一样了,他们的产品设计理念都不同,放在一起我觉得不太合适。 |
131
jeesk 14 天前 via Android
用户关心你怎么写吗?
|
132
xiaomushen 11 天前
@WasteNya 存在有其合理些。辩证地看呗。
只不过说,有些人连辩证客观都做不到 |
133
leatomic 11 天前
@kandaakihito 兄弟我不是针对你啊,那么问题来了,为什么不是让需求三思而后行,反倒让开发团队反复做无用功呢?(我不信所有人都只是拿钱办事的态度)。我不知道 Mybatis 是否还停留在 SQL 和接口分离的阶段,但那种改个点要同时打开多个文件的操作是真的恶心,整天低耦合低耦合,是真不知道高内聚吗,如果说要统一审查 SQL 之类的,那不应该额外写个 IDE 插件之类的搜集吗?另外有一点,我很反感那些以为写 SQL 很高大上,很有成就感的行为,毕竟代码是要讲究可维护性的。
|
134
kandaakihito 11 天前
|
135
hut023 3 天前
DDD 2004 年就被提出来了,记得 JAVA EYE 当时展开过贫血模型和充血模型的大讨论,结果到现在又来了.....
|