V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zhouxiaoxiao
V2EX  ›  程序员

如果你的组员,用 controller 直接调用 mapper,是不是可以直接 fire 了

  •  1
     
  •   zhouxiaoxiao · 86 天前 · 19370 次点击
    这是一个创建于 86 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果你的组员,用 controller 直接调用 mapper ,是不是可以直接 fire 了

    235 条回复    2025-08-08 09:04:11 +08:00
    1  2  3  
    listen2wind
        101
    listen2wind  
       86 天前

    我让前端做日期筛选,加上时分秒。
    runlongyao2
        102
    runlongyao2  
       86 天前
    @FreeEx 我代表 JAVA 之父中国分父开除你
    totoro52
        103
    totoro52  
       86 天前
    我的红线就是 control 里调 mapper 和 方法接受返回都用 map ,特别是 mapper 返回一个大 map 那种
    fruitmonster
        104
    fruitmonster  
       86 天前   ❤️ 3
    一个代码怎么写就要 fire 人,这要写个 Bug 不得判刑?
    happypy1
        105
    happypy1  
       86 天前
    这个取决于你的业务逻辑,如果简单,可以直接在里面写,不需要太教条主义。

    我更加看重的是单元测试的场景覆盖率。这可以保证至少以后重构这个 API 不会产生 bug
    AppxLite
        106
    AppxLite  
       86 天前
    你以爲你是誰?項目拍板(規則制定)者嗎?如果是,當我沒說,否則我愛怎麼寫怎麼寫,又不是不能用
    lancelock
        107
    lancelock  
       86 天前   ❤️ 1
    每次写一个接口,就一个简单查询,git 一提交动了五六个文件,都是同名方法一层一层往下调,真的感觉脑血栓。除了工作没办法,我自己项目从来不用 java 写,真是够够的。
    opengps
        108
    opengps  
       86 天前
    技术圈里确实有着各种规范,但应用到实际场景确实反而是多此一举,过度抽象。
    所以实际评估应该怎么做的时候,更应该结合上这个项目的实际生命周期:
    1 ,不能给年会抽奖活动的简单画面做个分布式吧?
    2 ,不应该给全年使用的 oa 直接操作数据库吧?
    wysnxzm
        109
    wysnxzm  
       86 天前
    很明显,在 2025 年还是有很多人做着单机项目没有接触过分布式项目也没有团队开发的概念的
    ccover
        110
    ccover  
       86 天前
    @jeffh 个人感觉 controller 还是需要经过 service ,再走 mapper ,否则代码根本没法复用,至于 service 有无 impl 则看项目大小(是否需要多态,以及公司有无代码规范)。
    ps. 个人项目拿钱的,怎么快怎么来
    jguo
        111
    jguo  
       86 天前   ❤️ 1
    知道什么是破窗理论吗?这也没问题,那也没问题,最后就成屎山了。
    yuwangG
        112
    yuwangG  
       86 天前
    就问你能不能跑?
    SuspectX
        113
    SuspectX  
       86 天前 via Android
    又不是不能用.jpg 🤣
    minottomie4383
        114
    minottomie4383  
       86 天前   ❤️ 1
    我就想问国内几个头牌大厂规模够大团队够大规矩够多技术够广够深有没有屎山代码
    我就想问有没有限定场景,你不能某个场景需要的规范强加到所有场景吧
    huaweii
        115
    huaweii  
       86 天前 via Android
    @FreeEx 哈哈,虽然但是,这些八股设计模式扔给在 ai 工具也就多多一两段 prompt 的事
    liuguang
        116
    liuguang  
       86 天前
    java 的垃圾教条,写个 hello world 是不是还得过一下 service ?
    CJ2r4u3EH4lrM7aR
        117
    CJ2r4u3EH4lrM7aR  
       86 天前 via Android
    你立过规矩吗?有没有明文规定,没有违反规定你 fire 个皮啊,真当自己是皇帝?觉得能力不行是面试官的问题,试用期怎么过得是你的问题
    WhatIf
        118
    WhatIf  
       86 天前
    恕我直言, 再坐的全是***
    都认为写的是面向对象吧?
    那么 属性呢?行为呢? 按照现行习惯, 路上跑的狗, 只有参数肉体, 以及一个狗服务。
    IamUNICODE
        119
    IamUNICODE  
       86 天前
    我刚刚跑的那个公司,全都在 controller 里,整个代码就一层,没有任何一个人有异议,让我很怀疑自我,真的。。
    lesismal
        120
    lesismal  
       86 天前
    java 团队都开掉才是正解
    minottomie4383
        121
    minottomie4383  
       86 天前
    @IamUNICODE 这和教条是两个极端,一整个项目怎么可能没有复用的代码和解藕的地方。不是分层不行,我觉得还得看情况。写 java 和 spring 的都是什么天才,复用搞出去做一份不是本能吗,有相同的行为做接口不是写代码本能吗。不会是套了半天 service ,impl ,mapper ,get set 不知道是为什么吧,只是规矩让他们这么干所以这么干,不会吧不会吧
    RicardoY
        122
    RicardoY  
       86 天前
    我觉得问题不大,关键看你们使用的是什么模式。如果是简单需求使用事务脚本模式的话,在 controller 里直接调用 dao 没有什么问题的。
    jjx
        123
    jjx  
       86 天前 via Android
    这个,代码只要逻辑清晰,结构优美,读起来没问题就好,别搞这些花花肠子,有什么意义。难不成吃饭前忘了洗手就犯了天条
    wfd0807
        124
    wfd0807  
       86 天前
    多年以前研究过这个问题,看到过一篇文章(时间太久找不到出处了),其中有一段 spring 官方人员对 controller 、service 、dao 分层的说明,这种分层模式是官方演示 spring 框架搭建项目时的示范,而不是一个要遵守的范式。其中 service 层作用只是“事物脚本”罢了。
    ———— 以上内容来自于曾经阅读过的文章的记忆,以下内容是个人主观评价————
    如果强行分层,也不是不行。简单的查询业务,去除 service 层,也无伤大雅。
    因为这点小事要 fire 人家,duck 不必!大家出来工作都是为了混口饭吃,劝你做个好人!
    RicardoY
        125
    RicardoY  
       86 天前
    模式(或者架构)需要匹配业务本身的复杂度,如果简单的业务用例也要使用接口层-应用层-领域层-基础设施层(可能还有装配层和事务层)的架构,开发效率会很差。
    fenglangjuxu
        126
    fenglangjuxu  
       86 天前
    @FreeEx 我之前就疑问为啥 interface 只有一个实现的时候 要外面放一个 iterface
    hello158
        127
    hello158  
       86 天前   ❤️ 1
    我之前在组内推广某个分层设计,我觉得很好的。都遭到拒绝了,很多人愿意一把梭。不愿意搞那么“绕”。
    在他们眼里,什么鸡吧分层,什么鸡吧抽象,不如我一把梭来的快。

    不过话说回来:

    你平时怎么写?你是怎么分层设计的?
    别光碰,你讲一下,让我看看你的水平。
    littlez0325
        128
    littlez0325  
       86 天前
    @FreeEx 最后一句倒反天罡
    iOCZS
        129
    iOCZS  
       86 天前
    Java 团队需要大清洗一下,
    siweipancc
        130
    siweipancc  
       86 天前 via iPhone
    基于以上的回复,我觉得我们都有个共识:php 天下第一 doge
    NoString
        131
    NoString  
       86 天前   ❤️ 5
    1. 组内有明确的开发规范文档吗?或者说有在组会强调过开发规范吗?
    2. 组内 Git 有代码质量检查的流水线任务吗?有代码 Review 机制吗?
    3. 合并 master 权限在你手里还是在他自己手里?

    123 都做了 打回去让重写,你自己受不了他听不进去就开了。但是上面都没有,那就是你自己有病🙄
    WDATM33
        132
    WDATM33  
       86 天前
    @COOOOOOde #51 用 dubbo 就必须搞个 api 模块,里面全是 interface ,别的模块实现接口。不这样没法给别的服务 rmi 调用
    hxysnail
        133
    hxysnail  
       86 天前
    其实吧,林子大什么鸟都有,江湖大什么人都有,有时也只能看开点……

    拿我项目组一堆沙雕外包来说,就组装 URL 这个很简单的事,老是自己做字符串格式化,结果要么有时多了斜杆,要么有时特殊字符没有转义,总之小毛病不断。你跟他说了无数次用标准库里面的 URL 对象来拼接,过段时间他又自己做字符串格式化。有些人他就是不开窍,这放在高中时代,不就是同一道题一次次重复做错的沙雕吗……你一怼他,他还生气了,能怎么办,就随他去好了,慢慢把他边缘化就是了。
    qxmqh
        134
    qxmqh  
       86 天前
    真的恐怖,你们比八股文还八股文。
    gefangshuai
        135
    gefangshuai  
       86 天前
    @Narcissu5 #23 你不写 service ,怎么控制的事务?
    Tupig
        136
    Tupig  
       86 天前
    没毛病啊,减少服务层赚差价
    Patrick6
        137
    Patrick6  
       86 天前
    Java 的教条主义是这样的
    kingocns
        138
    kingocns  
       86 天前   ❤️ 2
    任何事情都有成本,既然你的组员能被招入公司,首先是对他的能力和成本公司是认可的,管理层最大的作用是帮助团队提效,而你不仅不想解决办法,帮助组员,只想 fire ,你才是最大的问题,我觉得公司让你担任组长的这层级,没有对你进行过系统培训,而你也没有自主的去学习如何当一个好的管理者。说白了就是草台班子,带领团队,不仅仅是技术向!
    murmur
        139
    murmur  
       85 天前
    难道不是 controller 直接执行 sql 么
    gefangshuai
        140
    gefangshuai  
       85 天前
    看到高赞回复我笑了。看来大家都需要读一下《重构: 改善既有代码的设计》这本书。有时候你嘴里所谓的不遵守“教条”,不过是给后人挖坑罢了
    htxy1985
        141
    htxy1985  
       85 天前
    看大家把他喷的这么不轻,我甚至已经忘了当初为什么要分这么多层,有没有人理性的讨论下,到底能不能这么做?两种方式的各自优劣,存粹从技术角度讨论,别带情绪。
    javak
        142
    javak  
       85 天前
    你有这个权利的话, 那当然是根据你的喜好来咯。
    Dolov
        143
    Dolov  
       85 天前
    只要程序能跑就说明没有大的问题
    lanceadd
        144
    lanceadd  
       85 天前
    emmm 你们还是手搓的 controller 吗,直接写个代码生成器,设计完接口生成一下,controller ,service ,serviceMockImpl 啥的都生成好,然后同事只需要实现那个 service ,xxxServiceImpl 里他想怎么弄都行,最后加个注解 @Primary 把原来 MockImpl 挤下去完事了,避免没必要的手搓就没这些问题
    amanisheir
        145
    amanisheir  
       85 天前
    @buffzty 遇见过公司封的 Web 框架 jsp 专用函数 string runMethod(name),东西放数据库,这个 method 可能真是个 class 的方法,也可能是 sql ,然后 sql 用|拼接多个字段成一个,然后 jsp 再|分出数组用,看着数组下标你都头麻
    douyacai911
        146
    douyacai911  
       85 天前   ❤️ 1
    Java 恐怖主义
    wxw752
        147
    wxw752  
       85 天前
    @htxy1985 #141 OP 那一定是小项目,代码生成器生成全套的不麻烦,需要事务的话,都写在 controller 里我感觉人都麻了
    murmur
        148
    murmur  
       85 天前
    @gefangshuai 现在的 ORM 封装没有手动模式了么,必须通过注解开事务?
    looveh
        149
    looveh  
       85 天前
    蒜鸟蒜鸟,都不泳易
    SZhan
        150
    SZhan  
       85 天前
    @xiangyuecn 请问这样写是不符合代码规范嘛?还是说有什么其他的原因。我干过这个事情,入参也用过 Map<String, Object> 因为有时候单纯懒,不想建新的类,以对象的形式返回,,入参建一个 reqVO, 返回建一个 DTO ,有的项目写着烦了就没想整这些
    SD10
        151
    SD10  
       85 天前
    请问你是在 code review 的时候发现的吗,是的话让他按照你的建议改了就好了。
    如果已经上到生产环境了,那么你应该反思开发、上线流程,开发规范,没有明文规范且没有 review ,那这是你的问题啊。即使这个人非常差,那么也是你当年看走眼了,该反思的不是你自己吗?
    Marszm
        152
    Marszm  
       85 天前
    没 controller ,只有 serverice ,直接调 mapper 。又不是不能用,少写点代码摸鱼不好么
    Marszm
        153
    Marszm  
       85 天前
    我再说个点,后端都 tm 是数据库和接口的中间商,有 view 鸡毛事
    yurichange
        154
    yurichange  
       85 天前
    不要命名成 mapper
    NikoXu
        155
    NikoXu  
       85 天前
    把 Entity 的属性直接定义 Controller 里面 , 全程只用一个 class , 又不是不能用,少写点代码摸鱼不好么
    wuxinling
        156
    wuxinling  
       85 天前
    如果根据入参直接一个查询返回结果,我觉得是可以的,没有或者只有基础判断那种。(只能查询)
    不过我也不会那么写,现在偷懒一点点,反正回头要补回来的。
    casillasyi
        157
    casillasyi  
       85 天前
    为啥不行?包的一层又一层就是规矩?扩展性就靠你说的规矩?
    dcdlove
        158
    dcdlove  
       85 天前   ❤️ 3
    BeFun
        159
    BeFun  
       85 天前
    我 18 年接了个外包,业务逻辑简单,CRUD 简单的我都是直接 controller 直接调用 mapper ,到今年他们系统还用着,没问题啊,除了每年给他们续费一下服务器费用
    dajj
        160
    dajj  
       85 天前
    如果你的领导只会 JAVA ,那么你可以跑路了
    asmoker
        161
    asmoker  
       85 天前
    @Jimmy2Angel 哈哈哈哈哈,那我不得不祭出同事的代码了。。。

    为了根据状态进行排序的需求实现方便,本来定义的状态值 status 为整型,1 、2 、3 、4
    人添加了个 1.5 的值。。。。。。

    md ,用 python ,也没报错的啥问题。。。
    hafuhafu
        162
    hafuhafu  
       85 天前
    约束不了你的组员是你的问题,你要定开发规范啊,不然大家技术参差不齐可不就随便写了。
    不过为了抨击 Java 替这种组员说话的也是一言难尽
    willli
        163
    willli  
       85 天前
    你把这个写到劳动合同或者员工手册里或者其他什么正式文件里,让组员知晓,我支持你开除
    supuwoerc
        164
    supuwoerc  
       85 天前
    蒜鸟蒜鸟,都不泳易,谁都是新手菜鸟来的,op 也不是上来写的都是最佳实践的代码吧,你的组员,你发现写的代码不符合你的要求,你告诉他不能这样做不就行了,让他改,fire 人家没啥必要。
    yukiir
        165
    yukiir  
       85 天前
    规范有没有正式文件,有没有培训及签字确认。
    没有你 fire 撒?别弄到最后自己工作丢了。
    LowBi
        166
    LowBi  
       85 天前
    不是 哥们 你这样只会让大家对 Java 的偏见越深
    kepenj
        167
    kepenj  
       85 天前
    内心应该是:不听话的人,多敲一个字符都是错!
    a33291
        168
    a33291  
       85 天前
    @gefangshuai #135 好奇怪的问题🤣
    a33291
        169
    a33291  
       85 天前   ❤️ 1
    @gefangshuai #140 别给这书招黑
    其他语言没有这 3 层,意思就配不上这里的重构策略了?
    里边甚至还有"没有 service 层怎么用事务"这种级别的问题,所以这就是"教条"的优势?
    sunznx
        170
    sunznx  
       85 天前
    主要考虑:
    1.上面的人有没有定好规范呢,有的话还这么多
    sunznx
        171
    sunznx  
       85 天前
    @sunznx
    主要考虑:
    1. 上面的人有没有定好规范,有的话还这么写可能是有点问题的
    2. 是不是不重要的项目,不重要的项目无所谓了
    Richared
        172
    Richared  
       85 天前
    查询不写 service 随意,要有更新,事务咋处理,controller 里手搓么?下边这帮评论是真不会还是假不会。
    merryCodeing
        173
    merryCodeing  
       85 天前
    @superchijinpeng 能跑就行
    dosmlp
        174
    dosmlp  
       85 天前
    八股文背的真好
    Blanke
        175
    Blanke  
       85 天前
    为什么非要搞 java 那点味
    ttsuper
        176
    ttsuper  
       85 天前
    建议再观察一下,如果出 bug 直接枪毙。
    leegradyllljjjj
        177
    leegradyllljjjj  
       85 天前 via iPhone
    屎山不是说你代码写得好写的规范就行了,这是项目管理问题
    blackccc
        178
    blackccc  
       85 天前
    能不能帮帮他,如果你是他上级,不然你也太无情了
    andyshz
        179
    andyshz  
       85 天前
    懒得说🙄
    0xLittleFi
        180
    0xLittleFi  
       85 天前
    其实问题不大,就看你们项目内的代码是什么味道,如果毫无规矩,每个人都写自己的,没问题。 也不需要上纲上线,只要组内成员能接受就行,大家 CR 一下
    zw2019
        181
    zw2019  
       85 天前
    你这样我怕是找不到工作了
    sky3hao9
        182
    sky3hao9  
       85 天前
    无语, 跟你说不下去, 典型的 java 思维
    SyncWorld
        183
    SyncWorld  
       85 天前
    哈哈 我今天才接手一个项目 Controller 调用 Controller 。。。。我已经淡然了,能用就行
    rayyoun0
        184
    rayyoun0  
       85 天前
    三层架构系统就不要这么讲究了,叫你不把服务接口抽离出来
    24Arise
        185
    24Arise  
       85 天前
    如果小作坊无所谓。但如果这人是我团队的,我会强调 1 ~ 2 次,第 3 次还这样我会直接剔出去,我的团队不允许存在不守开发规约的人,因为我做的是面向交付团队的产品,我希望给交付团队的是统一规约的产品便于他们理解及客制化 ~
    xulolololololo
        186
    xulolololololo  
       85 天前   ❤️ 1
    不清楚你见过把.log 提交到代码仓库的 7-8 年工作经验的混子没?
    zhoujx
        187
    zhoujx  
       85 天前
    代码逻辑清晰就可以了,你这种感觉是 Java 腌入味了
    c3de3f21
        188
    c3de3f21  
       85 天前
    私以为 `屎山` 主要原因来自:
    - `产品`对`业务`的不了解或者`逐步了解`
    monmon
        189
    monmon  
       85 天前   ❤️ 1
    回复中很多讨论到 “为什么 Service 在只有一个实现类的情况下也要定义一个接口?”,简单来说,这是一个 MVC 分层架构的最佳实践。
    为什么是最佳实践,明明实践起来罗里吧嗦的,质疑是非常好的事情,从网上搜索很容易找到这个问题的答案,即这个最佳实践解决了什么问题:
    1.解耦设计预留扩展点
    2.单元测试:如果 Service 是具体类且直接调用 Mapper/数据库,测试时需启动数据库或 Mock 数据库连接(集成测试),速度分钟级。Service 接口化可 Mock 接口实现,完全隔离数据库,速度毫秒级。
    3.依赖注入的规范化
    ......

    每一个问题深入挖掘下去都会引出更多的问题,就会发现架构设计很大一部分解决的是未出现的问题。按照最佳实践开发的收益是显而易见的,多写一个 Service 接口,测试效率提升 100 倍不止,降低扩展成本,架构腐化的风险也会下降。
    个人觉得软件开发中工程思维是很重要的,这也大概就是码农和软件工程师的区别吧......
    imant
        190
    imant  
       85 天前
    哈哈,我这么教条的人,最近也直接调 Mapper 。真特么不想写 service ,简单的一个查询还得通过 service 包装,真累。。
    danaesoziommw49
        191
    danaesoziommw49  
       85 天前
    8 年前我都是直接 jsp 里执行 jdbc
    mb4555
        192
    mb4555  
       85 天前
    这得看项目复杂程度
    orlando
        193
    orlando  
       85 天前
    你们 java 这么恐怖吗
    prosgtsr
        194
    prosgtsr  
       85 天前
    你是技术 leader 你可以做规范啊,没问题的
    但是动不动就 fire 有点太离谱了吧
    Revenant
        195
    Revenant  
       85 天前
    远古时期的项目直接写一个 SQLHelper ,里面包含 conn ,queryFetch ,getOne, exeute ,close 等函数,可以用到项目倒闭😂
    nutting
        196
    nutting  
       85 天前
    还有 sql 写在前端的才牛
    duzhuo
        197
    duzhuo  
       85 天前
    @danaesoziommw49 楼主只是代码规范,你们这都有安全问题了哈哈
    totoro52
        198
    totoro52  
       85 天前
    @gefangshuai #135 被 spring 毒害了
    veightz
        199
    veightz  
       85 天前
    看具体情况吧, 简单的应勇直接怼简单的表,可能也还好。
    还是你的应用的复杂度,在分层和便捷中找平衡点。

    想起之前的组件,在 controller 里直接做了非常多的,对于订单表的零散读操作和写操作。
    造成后续,梳理需要哪些字段做索引, 哪些字段在什么时候会被更新变得非常困难。。

    包括他还在 mapper 层里, 读 ThreadLocal 里的 UserID , 没有 Controller 层里取出来,作为参数透传。。
    加上他设计了许多混乱的线程池, 造成串 UserID .. 头疼..
    再加上他对使用 @Transactional 充满极大的执念,把很多地方的 TransactionalTemplate 代码改成注解,导致许多地方没有生效,错误信息丢失。

    buffer 叠成这样的。。可以考虑 fire 了。。
    facebook47
        200
    facebook47  
       85 天前 via Android
    @sean250031 你说的很有道理,但是现在这些不都是自动生成的嘛🤣🤣🤣
    1  2  3  
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2575 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:47 · PVG 13:47 · LAX 22:47 · JFK 01:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.