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

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

  •  1
     
  •   zhouxiaoxiao · 7 天前 · 17508 次点击

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

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

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

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

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

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

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

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

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

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