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

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

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

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

    235 条回复    2025-08-08 09:04:11 +08:00
    1  2  3  
    superchijinpeng
        1
    superchijinpeng  
       54 天前   ❤️ 22
    就问你能不能用?
    sumarker
        2
    sumarker  
    PRO
       54 天前   ❤️ 2
    不让中间商( service 、manager 层)赚差价
    bsulike
        3
    bsulike  
       54 天前
    欸嘿,有的接口没啥逻辑,我就直接调 mapper
    irrigate2554
        4
    irrigate2554  
       54 天前
    用 cursor 写有的时候会出现这种情况
    carrotliang
        5
    carrotliang  
       54 天前   ❤️ 1
    @sumarker 把 mapping 写在 mapper 里,不让 controller 赚差价~
    clf
        6
    clf  
       54 天前   ❤️ 1
    没给你直接调用数据库就已经算不错了(来自对有些实习生的怨念)
    Vaspike
        7
    Vaspike  
       54 天前
    听起来很离谱, 但仔细想没啥问题, op 可能纠结的是数据隔离?
    EliStone
        8
    EliStone  
       54 天前
    ?我现在接手的代码,逻辑啥的都在 controller 里面,不是新加的功能我都懒得创建 service...
    spritecn
        9
    spritecn  
       54 天前
    大部分情况下,你的组员不归你控制。。哈哈
    SoviaPhilo
        10
    SoviaPhilo  
       54 天前   ❤️ 1
    fire 不 fire 得看项目是否长远, 项目结构是否妥善划分,以及团队约定

    如果是仅查询的孤立逻辑 controller 直接调 mapper 其实我觉得挺正常的
    binge921
        11
    binge921  
       54 天前
    这个不至于吧,代码逻辑少,懒得创建 service
    xiangyuecn
        12
    xiangyuecn  
       54 天前   ❤️ 10
    不但调,mapper 还返回 list<map<string,object>> 🐶
    asmoker
        13
    asmoker  
       54 天前 via Android   ❤️ 1
    @xiangyuecn 入参也是 map<string,object> 🤣🤣🤣
    SvenWong
        14
    SvenWong  
       54 天前   ❤️ 1
    @xiangyuecn #12 +1 🤝 我经常这么干,有些没写过 service 的操作直接调用 mapper ,等后面再有相同的操作再重构不就得了,大家都是草台班子,较真干嘛
    a33291
        15
    a33291  
       54 天前   ❤️ 37
    那种过 service 透一层但没有额外逻辑的行为,就教条主义而已
    CodeCodeStudy
        16
    CodeCodeStudy  
       54 天前
    逻辑不复用的话有什么要紧?如果 controller 的作用仅仅是调用 service 的话,那么要 controller 还有什么作用?
    hwdq0012
        17
    hwdq0012  
       54 天前   ❤️ 2
    这不是他的黑历史,是他来时的路
    jackOff
        18
    jackOff  
       54 天前
    桌面单体应用可以,web 应用只允许项目启动的系统配置这样子搞,其他情况一律打回去重写,或者立马开除
    NoDataNoBB
        19
    NoDataNoBB  
       54 天前
    这种想法等同于“不喝就是看不起我”
    helloworldgo
        20
    helloworldgo  
       54 天前
    你是皇帝么,动不动就砍头砍头的。。
    zhouxiaoxiao
        21
    zhouxiaoxiao  
    OP
       54 天前   ❤️ 1
    无规矩不成方圆,你这样做,他那样做,不就是个乱字可以形容,后续的麻烦不知道有多少; 不管是对个人而言,还是对公司而言,要有规矩才成方圆,才走的远。
    gadfly3173
        22
    gadfly3173  
       54 天前 via Android
    我们公司连 controller 和 mapper 都没有,接口通过自有框架直接在 service 上声明,数据库通过框架包了一层的 jooq/mongoclient 等调用,完全没有 mapper/repository 的参与
    Narcissu5
        23
    Narcissu5  
       54 天前   ❤️ 73
    我现在就是直接在 controller 里面写各种代码。
    MVC 时代 controller 是用来控制渲染的,现在都是 restful 接口,根本不需要什么渲染,很多 controller 的方法就一行代码调服务,脱了裤子放屁。
    很多 javaer 就是相当教条主义,也难怪别人黑
    ybz
        24
    ybz  
       54 天前   ❤️ 8
    见识到 java 的恐怖了
    Roan
        25
    Roan  
       54 天前
    mikasyou
        26
    mikasyou  
       54 天前
    分读写类型吧。

    只读的 Controller-Action ,怎么方便怎么来,直接原生 SQL 都无所谓、一般都是 SQL DSL 。

    但要是牵扯写的操作,还是通过 Service 、领域(业务)对象来处理比较好。
    CodersZzz
        27
    CodersZzz  
       54 天前
    为什么一些规范要求变成了 javaer 的吐槽点呢。难道其他语言没有类似的?比如 python 的__xx__?
    woniu7
        28
    woniu7  
       54 天前   ❤️ 1
    我只能说以我的经验来看,让代码变成屎山的不是规矩,而是需求和开发者本身以及他们的迭代。
    yzqn
        29
    yzqn  
       54 天前
    又不是不能用,刚开始写代码我也是需要各种分类,各种抽象,其实对大部分业务只是脱裤子放屁。一个 controller 一把梭,业务在一个地方的代码从上到下走完简单清晰
    nealHuang
        30
    nealHuang  
       54 天前
    @irrigate2554 要定好规则,弄好后从没出现过
    Asuka0947
        31
    Asuka0947  
       54 天前   ❤️ 2
    1.工资决定写在哪里
    2.公司代码与我无关
    3.方便后续优化
    zhouxiaoxiao
        32
    zhouxiaoxiao  
    OP
       54 天前
    @woniu7 开发者没有觉悟,没有意识,现实中有很多。无奈。
    kanepan19
        33
    kanepan19  
       54 天前
    个人可以这么搞,公司项目尽量不要。
    当然,能跑就行。doge
    weixind
        34
    weixind  
       54 天前   ❤️ 3
    你可以尝试跟你的 +1 、 + 2 和 HRBP 说你要用这个原因把你的组员开掉。

    看看会怎么样,嘿嘿。
    fffq
        35
    fffq  
       54 天前
    你就说能不能跑吧
    nvksie
        36
    nvksie  
       54 天前 via iPhone
    话不要太绝对,有些 hello world 级别的组件,有人也硬要套得里三层外三层的,老板把他 fire 了,我重写总共不到 200 行
    hsymlg
        37
    hsymlg  
       54 天前
    要看公司有没有规范,没有这方面规范,那人家怎么写是他的自由。不过相对而言 java 项目真的比较喜欢分层,不管是公司级别的还是开源项目,面向对象都玩出花儿来了,spring 和 tomcat 代码真的看得想吐。像 redis 或者 etcd 这种代码都是一个文件写完一整块儿的逻辑,看起来真的丝滑~
    meteor957
        38
    meteor957  
       54 天前
    javaer 都这么吓人的吗
    kerwin1874
        39
    kerwin1874  
       54 天前   ❤️ 2
    我一开始也是一层包一层,后来发现其他人都是 controller 一把梭,我吭哧吭哧搞半天还不如加入,反正都是草台,我自己一个人做的项目才分一分层。
    hidemyself
        40
    hidemyself  
       54 天前   ❤️ 7
    你的组员,用 controller 直接调用 mapper
    是你的问题,而不是他的问题。
    EastLord
        41
    EastLord  
       54 天前
    我有同事就这样写,我也没办法
    chrosing
        42
    chrosing  
       54 天前
    以前 controller iservice serviceimpl mapper
    现在 controller service mapper
    chocotan
        43
    chocotan  
       54 天前
    不会
    我之前看 spring boot 官方的视频教程就是 controller 直接调用 repository
    FreeEx
        44
    FreeEx  
       54 天前   ❤️ 28
    不管有没有多个实现,service 层必须要写 interface ,不写的话开除。
    不管业务是否复杂,maven modules 必须上,拆分成数十个模块,不会搞的开除。
    不管多大的项目,SpringCloud 、注册中心、配置管理、redis 集群、消息队列必须安排,不安排的话开除。
    别问我并发有多高,我要一台 64 核,256G 内存的机器,没有的话开除甲方。
    sevenDu
        45
    sevenDu  
       54 天前
    这多大规模的项目啊,要这么严格
    mcfog
        46
    mcfog  
       54 天前
    如果我的 leader 根据单独某个技术做法(就算确实很糟)就让我 fire 一个人,我会把这个 leader 换了
    pxllong
        47
    pxllong  
       54 天前
    引用下 《投名状》
    好奇
    你们几个人儿?
    jingrui
        48
    jingrui  
       54 天前
    我们简单逻辑,直接在 controller 中用 orm 来调用数据库。。。
    irrigate2554
        49
    irrigate2554  
       54 天前
    @nealHuang 嗯,我说没提需求默认配置的情况下偶尔出现
    123zouwen
        50
    123zouwen  
       54 天前
    这不只是一个 controller 调用 mapper 的问题
    首先你们有没有制定好规范?

    所有的乱写一是因为人, 二是因为规范

    如果没有规范,而且允许人乱写,每个人都有各自的写法 项目混乱很快
    COOOOOOde
        51
    COOOOOOde  
       54 天前
    很多项目基本只有一个 Service 实现, 还是要搞个 interface 真是恶心
    sean250031
        52
    sean250031  
       54 天前   ❤️ 3
    还有另一外一种过分“守规矩”的,明明自己的 service 抽象的一点都不通用,永远都不会有多个实现,非得一对一的都搞成 interface+impl
    sean250031
        53
    sean250031  
       54 天前
    @COOOOOOde 撞回复了
    fengpan567
        54
    fengpan567  
       54 天前
    又不是不能用
    z1111h
        55
    z1111h  
       54 天前
    写 java 写的目光呆滞思维僵化
    pkoukk
        56
    pkoukk  
       54 天前
    @sean250031 #52 不打算给单元测试留个口子了?
    coderzhangsan
        57
    coderzhangsan  
       54 天前   ❤️ 1
    没什么业务逻辑的,这么写也没什么问题,毕竟这东西也不会产生什么 bug ,可以跟组员提建议和要求,但不要过于注重此类问题,甚至阴阳苛责,毕竟制定团队技术规范目标是协同开发,尽量避免 bug 产生,不要舍本逐末,过于注重代码洁癖,应该多注重逻辑思维能力,毕竟逻辑思维能力决定了业务 bug 的下限。
    hay313955795
        58
    hay313955795  
       54 天前
    @sean250031 #52 合理,非得自己再套一层裹脚布,又臭又长。
    Meld
        59
    Meld  
       54 天前   ❤️ 1
    如果只是单纯的数据库操作,没啥问题,如果是组合的数据库操作,还有可能复用的话,我会写到 service 里,这没啥的

    人多维护就按照大家的习惯来,自己维护的项目就按照优雅的方式来

    动不动上升到 javaer 怎么怎么样也挺无聊的..
    karmaisbitch
        60
    karmaisbitch  
       54 天前 via iPhone
    java 仔最近写 python ,感觉那叫一个自由
    rookie4show
        61
    rookie4show  
       54 天前
    要么你代码检查自动拦截,要么你人工 review 拒绝合并。
    公司有没有规范?公司接不接受你的执行成本?落实力度怎么样?
    zgsi
        62
    zgsi  
       54 天前
    有什么问题?
    NightFlame
        63
    NightFlame  
       54 天前
    NightFlame
        64
    NightFlame  
       54 天前
    写就完事了
    linyi090744
        65
    linyi090744  
       54 天前   ❤️ 17
    你的问题更大点!你的组员菜归菜,要是你劝导过,屡教不改,那 fire 没问题。人家菜,你不想着拉一把,想着丢人家饭碗。真恶毒啊。都是牛马,谁也别看不起谁,今天你嫌他菜,明天在大佬眼里你何尝不是一只菜鸡。
    version
        66
    version  
       54 天前
    没必要这样。主打微服务。监控只要每个接口响应速度达标就可以呢。你爱咋玩都行.有 docker 玩新的技术都行。
    规规矩矩的。实际上一套老框架。不进则退。上个班还没自己练手新框架。新脚手架。公司都倒闭了
    你觉得部门要长远。但是压抑成员的学习能力也不好。上班哪家公司能撑个 5 年 10 年的
    成员只要用自己最擅长。最高效完成任务就好。但是现实中还是很多老大各种条条框框的。拿着 N 年前的技术在玩。手动更新服务器代码都大有人在
    AEDaydreamer
        67
    AEDaydreamer  
       54 天前
    没什么可不可以的, 规范和最佳实践很多都是在前提背景下产生的. 你觉得不可以只要你有领导权你制定规则就好了.
    xinzhanghello
        68
    xinzhanghello  
       54 天前
    很多简单的业务怎么写没啥问题,但是有 AI 了,可以一开始就分开写。 又不会麻烦。 写进 Promt 里就好
    me1onsoda
        69
    me1onsoda  
       54 天前   ❤️ 1
    可能无关的回复.javaer 里有没有可能🐢男比较多,挺容易被规训成🐢🤣
    zcljy
        70
    zcljy  
       54 天前
    @zhouxiaoxiao 我现在接手的项目都是这么写的 而且是拼音首字母命名 世界真是草台班子 已经想跑路了。。
    flytsuki
        71
    flytsuki  
       54 天前   ❤️ 1
    哈人,我写 C#不写 controller,class 添加一个固定接口,项目启动扫描接口自动生成路由,代码都在里面一把梭
    shen13176101
        72
    shen13176101  
       54 天前
    serviceimpl 是为了写业务实现的,如果没什么业务,只是一个单独的查询,我觉得直接调 mapper 没问题,如果硬说 以后会增加业务,我无话可说
    smilenceX
        73
    smilenceX  
       54 天前
    取决于项目本身的规范程度。
    chaoshui
        74
    chaoshui  
       54 天前   ❤️ 1
    就我司而言,是实行 CQRS 规范的
    仅查询数据,没有副作用的,走 Rpc Service -> Query -> DB 这个路径,有时甚至不用 ORM 直接写 sql
    除此以外,需要写入/更新数据,或者有副作用的,走 Rpc Service -> Command -> Domain Service -> Repo, 并且每一层之间必须定义接口
    zgzhang
        75
    zgzhang  
       54 天前
    过度封装就是强行给自己喂屎,完全没必要,代码是为了易读、健壮,不是为了践行茴香豆必须怎么吃
    aaronzhang404
        76
    aaronzhang404  
       54 天前   ❤️ 1
    controller 里一行 serice 调用才垃圾,没有二十年脑血栓写不出这样的代码
    liqingyou2093
        77
    liqingyou2093  
       54 天前
    那咋了
    zsl199512101234
        78
    zsl199512101234  
       54 天前
    能跑就行,之前有 Entity 的 get 方法里面调 dubbo
    BenHunDun
        79
    BenHunDun  
       54 天前
    controller 调 service, 很大程度是为了可以弹性扩展 service 吧.
    Jimmy2Angel
        80
    Jimmy2Angel  
       54 天前   ❤️ 1
    @asmoker 要是 map<string,object>我都谢天谢地了,我接手代码定义一个变量是这样的:
    Quartet<org.javatuples.Pair<Map<String,List<Pair<Query, Update>>>, Map<String,List<Pair<Query, Update>>>>, org.javatuples.Pair<Set<XXXDTO>, Set<XXXDTO>>, List<XXXEntity<DDDEntity>>,XXXValidate> quartet = null;
    darksword21
        81
    darksword21  
       54 天前   ❤️ 5
    谢谢,本来就烦 java ,现在更烦了
    lscexpress
        82
    lscexpress  
       54 天前
    if 你有权 fire and 想 fire:
    fire 呗
    else:
    搁这儿问了也没用
    mayooot
        83
    mayooot  
       54 天前
    魔怔
    wangtian2020
        84
    wangtian2020  
       54 天前   ❤️ 4
    符合我对 javaboy 的刻板印象,你平时是不是还非常推崇 java 阿里编码规范
    make115
        85
    make115  
       54 天前
    无所谓了, 我甚至 service 接口都不写, 直接 serviceimpl 写实现
    cslive
        86
    cslive  
       54 天前
    controller 直接调用 jdbctemplate ,返回 list<map>,好像也没啥大问题,直接省了创建 service ,mapper
    woniu7
        87
    woniu7  
       54 天前   ❤️ 2
    满屏的 controller 里写一句调用同名 service ,
    满屏的 service 接口只有一个 impl ,以及 impl 里满屏的 @autowire
    满屏的同名 get ,set @lombok
    龟龟范范,却控制不到业务逻辑代码本身
    仔细一看,结果发现一群无聊的花架子加上混乱不堪的核心逻辑罢了
    buffzty
        88
    buffzty  
       54 天前
    组员把 sql 写在 jsp 中 阁下如何应对
    0x663
        89
    0x663  
       54 天前   ❤️ 1
    @zhouxiaoxiao #21 差不多得了,一般情况都是公司先比代码走。
    breadykidliu
        90
    breadykidliu  
       54 天前
    我还遇到过同时 controller 调 controller 的,劝说无效还被白眼,祝他安好
    runlongyao2
        91
    runlongyao2  
       54 天前
    在逻辑不复杂和没复用的情况下,为啥一定要写 service 。实在搞不懂。
    ryougifujino
        92
    ryougifujino  
       54 天前
    还得是我们 Next.js ,直接在 UI 代码里写 sql
    irisdev
        93
    irisdev  
       54 天前   ❤️ 1
    这既不是水平问题,也不是不服管理屡教不改态度问题,谈何 fire
    runlongyao2
        94
    runlongyao2  
       54 天前
    @Narcissu5 他们现在就是为了分类而分类
    sodesga
        95
    sodesga  
       54 天前
    java 刚开始封 everything is object 为圭臬,直到函数流式大行其道。
    能跑就行,要求不要太多。
    jeffh
        96
    jeffh  
       54 天前
    @Narcissu5 是的,我就是直接 controller 写实现,我以前也是 javaer 还有搞 service 和 serviceImpl ,然后 controller 就写一行代码,真 tm 烦
    softliumin110
        97
    softliumin110  
       54 天前
    好搞笑!
    runlongyao2
        98
    runlongyao2  
       54 天前   ❤️ 7
    @chocotan 因为代码的清晰度和你分几层没关系,分层唯一的作用是复用。如果不存在复用,那就是一种累赘。国内太多人学歪了
    q447643445
        99
    q447643445  
       54 天前
    可能这就是 java 味吧
    iseki
        100
    iseki  
       54 天前 via Android
    😅病得不轻,你既然强调规矩,先问问你提前讲过所谓的规矩吗?其次 CQRS 情况下这么干很正常的。
    1  2  3  
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1272 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 17:29 · PVG 01:29 · LAX 10:29 · JFK 13:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.