V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zsmile
V2EX  ›  Java

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

  •  
  •   zsmile · 16 天前 · 13470 次点击

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

    第 1 条附言  ·  15 天前
    说明一下
    1. 这里提到架构只是感觉好像接触到的都是属于 MVC 、分层、微服务一类的,DDD 感觉算设计,也算架构的一种吧。(不对勿喷)
    2. 框架上的话,确实好用能提效就行,主要使用的 ORM 框架也是 mybatis 加一些增强框架( mybatis-plus\fluent-mybatis\或者用 mybatis 的 provider 自己写了一个简单的增强)。对于 orm 真的都是简单的直接用,复杂写 SQL ,所以 mybatis 用的倒还习惯
    3. 技术选型上基本都是以 Spring 为主,都是跟着一路用 mvc ,webflux 什么的,都是换框架。这些框架的底子思想,都是出现很久了。

    所以主要问题:都是个人观点,欢迎讨论
    1. 架构。每个语言其实都差。不多,该分分,该拆拆,做通信,做协调什么的。都谈不上落后吧?
    2. 框架。主要以 mybatis 为主的我,就想看看大佬们的意见
    135 条回复    2025-01-21 11:00:58 +08:00
    1  2  
    zsmile
        101
    zsmile  
    OP
       15 天前
    @luoyou1014 你说 N+1 ,我也不知道,但是查了一下其实也只是不知道这种术语。也就是那么个回事儿。换个说法估计很多 java 从业者都知道
    chuck1in
        102
    chuck1in  
       15 天前
    @qinfengge 简单的直接写的这种模式叫做:SimpleCRUD ,然后复杂的为啥不直接用 Java 来写呢,这样不是更好。

    我写过一篇 blog 介绍这个概念: https://juejin.cn/post/7437023118151450639
    pangdundun996
        103
    pangdundun996  
       15 天前
    我倒是觉得 mybatis 挺好的,在复杂项目上掌控力更好,以前我们规定即使 selectById 也要放到 xml 里维护,因为项目大起来一但放飞后面就很难维护了
    coder121
        104
    coder121  
       15 天前
    javbus 和 javdb 挺好的啊
    w0017
        105
    w0017  
       15 天前
    ddd 不是 10 年前的概念?
    luoyou1014
        106
    luoyou1014  
       15 天前
    @zsmile N+1 是行业通用的术语,每个 orm 框架都要必须解决的问题,但 java 开发者很少知道这个术语,属于对外界了解不足,mybatis 解决 N+1 的方案,上网搜了一下,都很繁琐,完全没有使用 orm 框架的优点
    ala2008
        107
    ala2008  
       15 天前
    @chuck1in JOOQ 要收费的吧
    chuck1in
        108
    chuck1in  
       15 天前
    @ala2008 如果使用 oracle 之类的商业数据库,jooq 要收费。如果使用开源的数据库比如 mysql 、pg 那些,有社区版本用,这个版本是不收费的。
    chuck1in
        109
    chuck1in  
       15 天前
    @pangdundun996 喜欢写 SQL 的话还是建议尝试下 JOOQ ,这里有模板代码可以下载 www.mjga.cc

    像这种把「运行时异常」提前到「编译时异常的」 SQL 支持框架,写起 SQL 来和合并团队代码的时候更加舒服一点。如果使用 XML 除了本身写起来不方便以外,合并代码也是一个难事,经常出现大规模无法识别的合并冲突的问题。
    AcFnu
        110
    AcFnu  
       15 天前
    DDD 在任何语言的开发者中都不温不火,一个是需要统一语言,然后是建模先行,设计先行,其次要求开发人员整体有统一认知,毕竟抽象出很多名词出来。不说别的,即便连.NET 这种为了开发者改变语言特性或者提供框架层面支持,很多 neter 依然用 mvc 都算不上的事务 service (或者叫 sql 组装搬运工?无法单元测试,无法通过函数判断用途)。所以其实找问题放在任何语言任何框架都合适,轮子越出越多,但总是解决一个问题,引伸出更多问题。大环境的问题国内氛围就这样了,很多项目赶鸭子上架,都是先从无到有,从 0 到 1 ,至于 1-100 ,不好意思,考虑不了那么多,当然任何人也不可能一下子做出一个完美产品。软件这条路啊,保持自身技术储备时常更新即可。
    specita
        111
    specita  
       15 天前
    DDD 需要精通业务和相关知识,硬套很可能画得不伦不类的
    kbyyd24
        112
    kbyyd24  
       15 天前
    @sagaxu 还真没遇到过你说的坑,我基本都是最新的 MySQL 和 pgSQL ,免费版够用了🤣
    kbyyd24
        113
    kbyyd24  
       15 天前
    @chuck1in 看到你说的测试了,就是我说的那种。这已经不能算单元测试了。因为被测代码会真实地调用数据库,实际上这是一种集成测试。纠结这个名字其实只是为了区分测试的成本,毕竟单元测试很快就能跑完,而集成测试却需要花一些时间。
    btw ,testcontainers 也挺香的,就是一些老旧的 pipeline 工具可能不支持 docker ,遇到这种就抓瞎了
    kbyyd24
        114
    kbyyd24  
       15 天前
    @zsmile 可以说统一语言是 DDD 必备的实践了。没有统一语言,模型都建不出来,DDD 就寸步难行
    htxy1985
        115
    htxy1985  
       15 天前
    JOOQ 这种形式,和我刚入行时呆的公司自研的框架几乎用法一摸一样,那时候用的 java 还是 1.6 版本
    chuck1in
        116
    chuck1in  
       14 天前
    @htxy1985 真的假的,jooq 2009 年出的第一个版本。不过这种用法最开始应该是 C# 那边开始流行起来的。
    luoyou1014
        117
    luoyou1014  
       14 天前
    @zsmile 关键是解决方案是怎样的……
    ghostsf
        118
    ghostsf  
       14 天前
    DDD 只是最近火了看到了更多曝光,就觉得很先进了?只是个设计思想而已,而且早就提出来了。DDD 的思想也得有人能领悟执行啊,有那么多能把业务吃透的开发吗?业务主甲方啥的都不一定可以,咋驱动设计开发?当然不排除有项目适合 DDD 。甚至 DDD 是不适合软件开发的,可能在其他行业不错。但回到问题,一个设计思想跟 java 体系落不落后有什么关系?另外落不落后看语言啊,框架只有适不适合,Java 都多少新版本了,还不够新不够先进吗?
    securityCoding
        119
    securityCoding  
       14 天前
    眼界放开点 web 框架就这点东西,一个 mybatis orm 这个月都吵了几次了。java 还有 spark flink 这些东西可以玩的
    yuexiahaowu
        120
    yuexiahaowu  
       14 天前
    DDD 要有专门的人员 做基础准备和封装集成,不然最后就是一地鸡毛,我在公司就这门看这笑话
    zsmile
        121
    zsmile  
    OP
       14 天前
    @luoyou1014 其实 N+1 问题,这些都是看你具体场景需要的,也不全需要放 orm 来解决(可能还是出于 mybatis 的使用习惯,复杂的全都用 sql 解决)
    zsmile
        122
    zsmile  
    OP
       14 天前
    @ghostsf
    @AcFnu 确实是,很早都又提出了,颇有点冷饭新炒的感觉,不过能很好实施的,别说这种了,单体 mvc 都一地鸡毛呢。
    fisherning
        123
    fisherning  
       14 天前   ❤️ 2
    坚决站 mybatis 。
    后端开发,自己不写 sql ,非要整一些不直观的 query lang 干嘛。那些东西最后还不如直接的 sql 呢。

    另外,java 是工业语言,根本就不追求概念多新,最重要的还是工业化大规模适用。说到底,java 是生产语言
    ShotaconXD
        124
    ShotaconXD  
       14 天前
    我看很多人喷 xml 的,为什么不想想几十年过去了, 标记语言依旧无人能打得过 xml 。
    语法糖就一定是新潮好用且符合发展规律的吗?
    写个 SQL 怎么就写出来注解比 xml 高级的感觉了?
    DDD 火不起来为什么不想想是不是社会的问题,而不是设计的问题。
    有些人总是走在前面,而市场并不会。
    chuck1in
        125
    chuck1in  
       14 天前
    @kbyyd24 我十分同意你说的关于测试这一块儿的内容。而且我觉得测试就必须要分单元测试、集成/结合测试、e2e 测试。当然,为了表述简单,全部称为单元测试也可以。但是在具体论述的时候必须分开,就是你说的测试成本不同。

    这其中:
    单元测试必须要是 0 依赖。
    结合测试只能依赖当前的结合环境
    e2e 测试的话,范围就比较大了,要使用 @SpringBootTest 来测试整个当前环境的内容

    有了测试容器,现在就能够更加方便的去隔离不同的测试依赖的不同的测试环境了。
    luoyou1014
        126
    luoyou1014  
       14 天前
    @zsmile 这样的回答就是农民说我可以用镰刀收麦子手动打谷,所以和收割机功能一样的回答

    事实上其他语言都有了统一的解决方案,mybatis 还在看具体场景分情况分析,用 sql 更是原始时代的做法,总不能认为就 mybatis 的路线正确,其他所有语言的路线都错了吧……
    WasteNya
        127
    WasteNya  
       14 天前 via Android
    @ShotaconXD 因为国内的技术氛围就这吊样,故步自封,欧美的还有几个用 xml 写 sql 的?
    chuck1in
        128
    chuck1in  
       14 天前
    @WasteNya 其实本能的拒绝新生事务初看好像是对自己的一种保护,但是恰恰在 IT 这个行业,拒绝新生事务反而会让自己的路越走越窄。xml 肯定不是好东西,这个是软件工程上已有的定论,不然 Spring struct2 hibernate 之类的框架也不会淘汰掉 xml 了。
    Richared
        129
    Richared  
       14 天前
    相反我感觉 mybatis 反而很好,都是拉屎,拉在 xml 里比拉在代码里舒服多了。见过用 jpa 拉屎的。一个 selectbyid 查 40w 的数据。
    chuck1in
        130
    chuck1in  
       14 天前
    @Richared 说实话 mybatis 和 jpa 相比较我觉得不太恰当。jpa 是一个 ORM 解决方案,mybatis 只解决 O 的问题不解决 R 的问题(但是我们的真实世界大多数时候总是无数个 o 通过 r 关联起来)他大多数时候针对的是 O 的 Simple CRUD ,像这样的框架其实要类比的话,我个人觉得应该和 JOOQ 或者 DOMA 这样的框架做对比。

    ORM 的话其实解决的问题跟 Mybatis 完全不一样了,他们的产品设计理念都不同,放在一起我觉得不太合适。
    jeesk
        131
    jeesk  
       14 天前 via Android
    用户关心你怎么写吗?
    xiaomushen
        132
    xiaomushen  
       11 天前
    @WasteNya 存在有其合理些。辩证地看呗。
    只不过说,有些人连辩证客观都做不到
    leatomic
        133
    leatomic  
       11 天前
    @kandaakihito 兄弟我不是针对你啊,那么问题来了,为什么不是让需求三思而后行,反倒让开发团队反复做无用功呢?(我不信所有人都只是拿钱办事的态度)。我不知道 Mybatis 是否还停留在 SQL 和接口分离的阶段,但那种改个点要同时打开多个文件的操作是真的恶心,整天低耦合低耦合,是真不知道高内聚吗,如果说要统一审查 SQL 之类的,那不应该额外写个 IDE 插件之类的搜集吗?另外有一点,我很反感那些以为写 SQL 很高大上,很有成就感的行为,毕竟代码是要讲究可维护性的。
    kandaakihito
        134
    kandaakihito  
       11 天前
    @leatomic

    “为什么不是让需求三思而后行,反倒让开发团队反复做无用功呢”

    emmm ,可能是你所在的公司技术很有话语权,或者并不直面一线业务吧,反正我不知道怎么回答你这个问题。
    hut023
        135
    hut023  
       3 天前
    DDD 2004 年就被提出来了,记得 JAVA EYE 当时展开过贫血模型和充血模型的大讨论,结果到现在又来了.....
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   808 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:51 · PVG 05:51 · LAX 13:51 · JFK 16:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.