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

面对水货主管的无奈

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

    公司新来一个技术 Leader ,提的一些问题总是非常的无语。

    一大早的来公司,看不懂我的工程架构设计,工程都封装好了,看不懂工程代码,问我这些问题:

    我们系统是云平台,要接入多类业务和各类型设计,为什么要做成 SaaS 服务? 为什么要一个接口要建 vo 类 param 类? 为什么要再自己封装一层分页结果 vo 类,不直接把 mybatis plus 的分页接口结果类返回?

    我真的相当无语。

    工程我都有写 readme 文档,且代码都有注释的。。。

    技术管理我看过很多,但是这种技术水平的,第一次见!

    我们系统是云平台,要接入多类业务和各类型设计,为什么要做成 SaaS 服务? 为什么要一个接口要建 vo 类 param 类? 为什么要再自己封装一层分页结果 vo 类,不直接把 mybatis plus 的分页接口结果类返回?

    我都不想回答,直接给他复制 GPT 回答的结果:

    一、为什么要做成 SaaS 服务?

    1. 多租户需求 云平台通常面向多个企业或业务方接入,SaaS 模式天然支持多租户架构( multi-tenancy ),便于管理不同客户的数据隔离、授权、定制化配置等。

    2. 平台可扩展性强 业务方不再直接依赖你的系统内部实现,只通过 API 或租户配置使用服务。后续你升级、修改功能不影响业务方使用。

    3. 降低接入成本 业务方不需要部署自己的系统,降低技术门槛和接入成本。你平台统一提供账号体系、功能服务、数据接入。

    4. 统一运营和监控 SaaS 平台方便做统一的日志、指标监控、授权、计费、异常告警和租户管理,方便后期商业化和服务保障。

    5. 支持“业务+能力”平台化建设 SaaS 模式可以将你的技术能力(如:设备对接、状态监控、告警处理等)封装为平台服务,实现“能力即服务”,提高复用效率。

    二、为什么要为每个接口单独建 VO 类和 Param 类?

    1. 解耦业务逻辑与外部接口 每个接口的参数和返回值不直接暴露数据库实体(如 DO 或 Entity ),而是通过 Param 和 VO 进行封装,可以防止结构变动影响外部接口。

    2. 增强接口可维护性 接口一旦发布就要保证兼容性。用 VO/Param 类结构清晰,后期扩展字段不会影响旧字段使用。 例如:新增字段只需修改 VO ,不必影响其他系统。

    3. 避免 Entity 暴露敏感字段 数据库实体类往往包含业务内部字段、敏感数据、逻辑控制字段(如 isDeleted 、createUser 等),不适合直接暴露给前端或外部系统。

    4. 更好支持校验与文档生成 Param 类中可以加上 @Valid 注解、Swagger 文档注解等,便于接口参数校验和自动生成 API 文档。

    5. 支持多种前端适配/多端渲染 VO 可以根据不同前端( Web 、小程序、App )做裁剪或拼装,更灵活。

    三、为什么不直接返回 MyBatis Plus 的分页结果类,而要封装自己的分页结果 VO 类?

    1. 隔离框架依赖 你平台可能以后换成 JPA 、Jooq 、DSL 等 ORM ,直接返回 MyBatis Plus 的 IPage 会让业务逻辑耦合于该框架,不利于未来替换。

    2. 返回字段不够友好 IPage 的字段命名如 records, total, size, current 等可能不符合前端/三方接口标准(比如有些接口需要 pageNo, pageSize, dataList )。

    3. 分页结果 VO 可以统一封装元信息 你可能希望分页结果中统一返回:

    code 、message

    数据列表( data )

    当前页、总页数、总条数等

    时间戳、耗时统计等平台级信息

    通过自定义 PageResult<T> 类,可以统一返回结构,便于前后端协作。

    1. 跨系统统一分页协议 如果你平台提供 API 给外部调用(例如 SaaS 客户或前端),封装自己的分页结果结构能统一整个系统返回格式,提高规范性和兼容性。
    yosoroAida
        1
    yosoroAida  
       37 天前   ❤️ 1
    水货技术主管是这样的,我第二家的技术主管还要我帮他装编译器!(后面跑得快赶紧离开这鬼地方了)
    Kaiv2
        2
    Kaiv2  
       37 天前
    还好有 GPT
    Super8
        3
    Super8  
    OP
       37 天前
    @yosoroAida 我觉得这是招聘事故。相当影响我们开发士气和业务进度。
    LiaoMatt
        4
    LiaoMatt  
       37 天前   ❤️ 1
    你先把他当成一个平级的新同事就好了, 他只是在熟悉项目和团队成员风格, 刚来几天看不出一个人的成色的, 还是要给点耐心和时间, 个人觉得格局可以先大点
    Super8
        5
    Super8  
    OP
       37 天前   ❤️ 1
    @LiaoMatt 不,已经来快两个月了
    LiaoMatt
        6
    LiaoMatt  
       37 天前
    @Super8 如果更高级的领导满意, 你可以尝试替他分担一些的工作内容, 有些事你做了就会有机会; 如果自己没想法, 就正常上班就好, 啥活不是干
    bunnyblueair
        7
    bunnyblueair  
       37 天前   ❤️ 1
    小心给你穿小鞋,通常这类人权斗厉害的很
    yosoroAida
        8
    yosoroAida  
       37 天前
    @Super8 那确实是挺恶心人的
    BeforeTooLate
        9
    BeforeTooLate  
       37 天前
    问题是招聘的时候你们技术没参与?
    Super8
        10
    Super8  
    OP
       37 天前
    @BeforeTooLate 我们技术面没有参与,不清楚是否是关系户
    sagaxu
        11
    sagaxu  
       37 天前
    谨慎猜测他以前是写 PHP 的,一个 array 包打天下,不需要定义各种 O ,项目也照样能维护
    bisyao
        12
    bisyao  
       37 天前 via Android   ❤️ 2
    java 嘛,最喜欢封装了
    HENQIGUAI
        13
    HENQIGUAI  
       37 天前
    这样的话,开了吧,换俺俺也行
    RonnieShanHa
        14
    RonnieShanHa  
       37 天前
    能忍 就能活 最少是当下;
    除非你硬 另说;
    konakona
        15
    konakona  
       37 天前
    是这样的,我遇到过一个不知道怎么将 ssh public key 放到服务器上 authentication 的,然后当着我们的面问 ChatGPT 了。
    HUZHUANGZHUANG
        16
    HUZHUANGZHUANG  
       37 天前   ❤️ 11
    你先讲清楚,为啥人家每月赚的比你多的原因?如果你讲不清楚,那人家过人之处你没发现。
    bk201
        17
    bk201  
       37 天前   ❤️ 4
    估计不是你这个技术栈出身,很多什么博士啊,使用什么 python 的,是没有工程概念的,他们眼里就觉得有那么复杂吗,直接输出不好吗?
    alleluya
        18
    alleluya  
       37 天前
    @bunnyblueair #7 确实是这样的 我上家公司的新换技术主管就是搞人 天天开会也只说你们不会做人
    laminux29
        19
    laminux29  
       37 天前   ❤️ 1
    “我都不想回答”
    “我觉得这是招聘事故”

    这的确是招聘事故,但事故不是主管,而是你。

    首先,就算是你的下属,他有问题,你也应该热情地、详细的进行回答,因为这是工作交流,这是你的职责,更何况此事中的人还不是你的下属,而是你的领导。

    其次,就算这不是工作,作为技术爱好者,别人在某个技术分支内,有不懂的地方,也很正常。你如果喜欢这门技术,和别人沟通交流,也是热爱技术的体现。如果连这都做不到,从事这门岗位,不累吗?
    encounter2017
        20
    encounter2017  
       37 天前
    @konakona 这种不是运维岗,不都是现查的吗,用得多才记得
    Super8
        21
    Super8  
    OP
       37 天前
    @laminux29 技术沟通我当然愿意参与,甚至很欢迎。可沟通的前提,是彼此做了基本准备,不是把“为什么你们要设计得比我想象中复杂”这种问题当作质询式开场白。
    技术 Leader 不是要懂所有技术细节,但应该具备基本的架构思维、文档阅读能力和尊重团队技术积累的态度。
    我的问题不是“不愿意解释”,而是“不是第一次遇到不懂装懂的上级”,累的不是解释,是浪费时间在无效沟通上。都已经来快两个月了,还没理解公司业务系统架构和相关技术栈,这是还是我的问题!!!
    Super8
        22
    Super8  
    OP
       37 天前
    @Super8 #21 这不是我的问题
    Niunai
        23
    Niunai  
       37 天前   ❤️ 1
    我比较好奇,为啥新来的这么菜,还是你的主管,为啥老板没把你直接升到主管?
    tedaz
        24
    tedaz  
       37 天前
    找+2 举报 抄了他
    byj66
        25
    byj66  
       37 天前   ❤️ 1
    想起来我遇到的一个前端组长,不知道 CSS BEM( https://getbem.com/) 命名规则。让我们要按照她不知道从哪里 copy 的前端规范写,我指出来后,BEM 就加进了规范。但当时因为类似的这些事情搞得太难受,表达上有些问题,感觉得罪了她。之后由于她能力不行,脾气还不小,就被公司开了。

    团队代码风格一致确实是有必要的,但是作为主管这种基础的东西都不懂,挺膈应人的。
    specita
        26
    specita  
       37 天前
    如果以前不是搞 java 的,不太懂这些各种 O 也正常
    konakona
        27
    konakona  
       37 天前
    @encounter2017 emmm ,怎么说呢。这只是冰山一角。当时正在开会,我看到他的操作有些生涩,所以我直接告诉他怎么操作。他依然选择把问题描述给 ChatGPT ,然后按照 ChatGPT 的要求去一步一步来。 🥲
    konakona
        28
    konakona  
       37 天前
    @encounter2017 我本职是程序员,也擅长 DevOps , 所以服务器的运维大部分我上。比如新建一个 Scraper Server ,基本监控。非工作时间,负责 Scraper 程序的同事写的太屎,导致服务器 OOM 宕机,充气服务器后程序不启动的情况下,服务器不会 OOM ,但是一启动程序就 OOM 后再次不可用。于是领导直接把服务器删了,重新购买,重新部署,结果很多东西装不上,一直弄到凌晨 3 点(虽然我很感谢他没有打电话叫我就是……)也没弄好,第二天上班看到这些,我很无语。“严厉的”告诉他不可以再像这样随意的删减服务器,应该侧重程序问题的排查。
    moyt
        29
    moyt  
       37 天前   ❤️ 9
    我当啥事呢,原来是 java 那套恶心的设计模式,各种抽象,其他语言一句话的事,java 来回啰嗦几个文件,恶心的一逼,虽然我不喜欢甚至讨厌,但换做是我,看到已经写完的玩意,也不会多说啥
    ThinkCat
        30
    ThinkCat  
       37 天前
    我们老大,别的部门转过来的,压根不懂代码。整天和人讲话,非要趴人家耳朵边,悄悄话,搞的什么都见不得人一样。能做的就是上级开会胡扯,然后溜须拍马,功能做出来了,点点功能什么的,然后指点一下江山。有别的团队人家找他,他什么都不懂,就在那胡扯,说的甚至都是错的,听了真想笑😆。他不懂技术,整体方案什么的,也插不上话,张口说的就像楼主感觉一样。不过用他来甩锅到是非常不错,反正下面说啥就是啥。
    sir283
        31
    sir283  
       37 天前 via Android   ❤️ 1
    jvav 是这样的,要是搁 c/c++,早被喷了。😂
    htxy1985
        32
    htxy1985  
       37 天前
    建议你再多观察一下别人的过人之处。
    jqtmviyu
        33
    jqtmviyu  
       37 天前
    @konakona #15 坏了, 我发现自己也是水得不行. ssh keygen 生成 密钥和几种加密类型的命令总是记不住, ssh 目录下的 auth 文件名也默写不出来. 少了 zsh 自动补全, 命令都一堆敲错.
    MoYi123
        34
    MoYi123  
       37 天前   ❤️ 2
    写个分页查询也有这么多讲究吗? java 恐怖如斯, 不愧是企业级编程语言.
    skipwitit
        35
    skipwitit  
       37 天前   ❤️ 1
    为啥你不是主管?技术自嗨罢了。
    sampeng
        36
    sampeng  
       37 天前 via iPhone
    不过,这个为什么。是不懂还是疑问为什么搞这么复杂?不要 vo 就活不下去了?如果人不多,不搞复杂的设计方案,效率是更快的…所以这个“为什么”是指什么?你确定公司黄了之前你会动底层数据选型?我理解你说的 saas 服务是微服务? saas 和云平台是业务领域不是技术领域,没看懂。个人感觉你的 leader 关注的是为什么搞这么复杂。
    SimonOne
        37
    SimonOne  
       37 天前
    op ,你的主管的小号在上面出现了,当心点
    kill9
        39
    kill9  
       36 天前   ❤️ 1
    有好多人 ,还是没做过主管,主管和技术关注点不同,你给人家解释也只是你的义务,如果你觉得不想解释那为什么还要回复,你直接开怼就行了,那么为什么你还要上来发文呢,我猜测是不敢直接回怼,又怕给你穿小鞋,既然你真的是大牛又何必害怕。你的这个文章如果真的被主管看见,那么这种做法比你直接当面指出更危险。 一般的主管是部门的主管,主管下面还有组长的啊,你是组长还是技术?如果是组长我觉得你有点幼稚,如果是技术我觉得可以理解。
    Jame00001
        40
    Jame00001  
       36 天前 via Android
    @yosoroAida 为什么不向老板反映呢
    cheng6563
        41
    cheng6563  
       36 天前
    我觉得这 GPT 解释已经挺到位了,但这楼还是一堆无脑抨击 Java 的。

    云平台,是提供 API 给别人用的,不是你自己内部管理项目,随便把 SELECT *出来的东西一把梭。
    meteor957
        42
    meteor957  
       36 天前
    就连学术大咖也不免被人公开批评, 有些人被资本家冠了个『主管』就听不得别人的意见了, 乃至于在网上气急败坏。
    hessian
        43
    hessian  
       36 天前
    @sagaxu 这 TM 也能扯到 PHP ?
    prosgtsr
        44
    prosgtsr  
       36 天前
    每个人都有自己不擅长的地方,如果他身上有优点那就没问题,如果两个月了你还是觉得他一无是处,那确实得干他。
    needhourger
        45
    needhourger  
       36 天前
    @laminux29 好一套行云流水的 PUA ,沟通有成本,全是我们这群牛马的问题,主管就是主管,leader 就是 leader ,人家说的话就是金科玉律!
    namonai
        46
    namonai  
       36 天前
    @Super8 因为他是领导,你是下属,就那么简单
    coderzhangsan
        47
    coderzhangsan  
       36 天前
    @sagaxu 为什么你能想到是 php ?技术管理上的事情跟语言有啥关系呢,真要做过几年开发,其做事风格就不会是楼主说的那种人,还是说你之前被 php 伤到?🙂
    refear99
        48
    refear99  
       36 天前
    给 leader 解释技术方案是义务,自己要是厉害早就升职主管了对吧,角度不同意见自然不同,另外 java 封装层数越多越厉害是吗
    sagaxu
        49
    sagaxu  
       36 天前
    @hessian @coderzhangsan PHP 项目普遍不定义 VO 和 param ,查完数据库 unset 几个字段,转换几个字段就直出了,如果是输出 html ,连 unset 都不用。不但小微项目,代码行数>10 万的项目也这么搞,不定义各种 O 甚至不定义接口也行得通。经典评价:“加个字段要改七八个文件”,“把简单的事情搞复杂”。
    bbao
        50
    bbao  
       36 天前
    很多人总以为企业里面技术「唯上」,殊不知「除非你在企业里面技术出类拔萃」不可替代,否则你只能「风光」几年;
    企业里不懂技术的领导,在你多年工作以后,会见的越来越多,他也可能不懂你的 crud ,不懂你的 mybatis 。但是他能解决的问题你大概率不一定解决的了。这就是它的价值。而 crud 以及翻页如何设计,找个靠谱的人,就行。

    这种「不懂技术的领导」现象,大企业表现的会更突出。
    hessian
        51
    hessian  
       36 天前   ❤️ 1
    @sagaxu 用 js 不更自由飞翔?起手就是一个{}。你的谨慎猜测一点也不谨慎,搞 java 也有 map 满天飞的,搞 go 也有 map[string]interface{}。完全看不出你是基于什么进行的谨慎猜测。完全就是你下意识的偏见想引战。
    Devin
        52
    Devin  
       36 天前
    @bbao 那么,这是好事吗?
    bbao
        53
    bbao  
       36 天前
    @Devin 是不是好事不是基层员工能决定的~ 能决定的是不断增加阅读量(代码+书籍),不断的扩大视野,不断的看技术架构,技术方案,然后某一天你将自己变成你理想中的领导的样子。
    12tall
        54
    12tall  
       36 天前
    @bk201 确实是这样,之前单位的同事特意招了一个实习生帮他整理 Python 代码
    smdbh
        55
    smdbh  
       36 天前
    回复都很好啊, 多看多学习
    sagaxu
        56
    sagaxu  
       36 天前
    @hessian js 是接口最终消费方,怎么飞都是内部的事情。搞 Java 的确也有 jFinal 这种到处 Map 的,但主流还是习惯多层封装。很多人遇到过后端返回 JSON 空集时,一会儿是{}一会儿是[],那一定是 PHP 。
    tabris17
        57
    tabris17  
       36 天前
    你是管代码的,他是官人的,你们分工不同
    hello333
        58
    hello333  
       36 天前
    @sagaxu 是的,就是 PHP 没错。😋
    justdoit123
        59
    justdoit123  
       36 天前   ❤️ 2
    理解不来这种技术 leader 。纯纯的招聘事故。

    楼上还有喷 Java 的。人家公司招聘你去做技术 leader ,是让你创造价值,而不是给你刷简历用的。“系统是 Java 写的”,这是一个客观已存在的事实。不了解情况,就先批判这样写不好,那样写麻烦。这是典型的 “没调查就发言”。
    justdoit123
        60
    justdoit123  
       36 天前
    怎么的?来个 Leader 就要换语言、换框架、换代码风格?
    runlongyao2
        61
    runlongyao2  
       36 天前
    兄弟你激动了,他好像也没说要推翻之前的。文档固然清除,问相关的人不是更快么?
    yosoroAida
        62
    yosoroAida  
       36 天前
    @Jame00001 那时候年轻怕事不懂,换现在肯定是开喷了
    hessian
        63
    hessian  
       36 天前
    @sagaxu 说你偏见是一点都不冤,还 js 是最终消费方了,就你这狭隘的认知难怪有这种偏见。我们在这个主题下面讨论的不是后端场景吗? nodejs 你是一点都没当人家存在啊。
    sagaxu
        64
    sagaxu  
       36 天前
    @hessian 后端 nodejs 用 ts 的比 js 的多,不说新项目,老 js 项目用 ts 重构的也不少。就 npm 中比较知名的包,哪怕是 js 开发的,很多也会额外提供 ts 类型定义。
    Leoking222
        65
    Leoking222  
       36 天前
    这么逆天吗。我的乖
    shaozelin030405
        66
    shaozelin030405  
       36 天前
    @laminux29 先看文档,见面直接吐槽的,来吵架的啊...他是公主吗,得这么宠着
    jerry10086
        67
    jerry10086  
       36 天前
    这是谁招进来这么个水货???
    qiaobeier
        68
    qiaobeier  
       36 天前
    @jerry10086 更水的大领导 😂
    runlongyao2
        69
    runlongyao2  
       36 天前
    @justdoit123 @Devin 通过他的描述,你们是怎么看出要换结构和风格的?
    shaozelin030405
        70
    shaozelin030405  
       36 天前
    @laminux29 过于基础的内容...没办法教的啊...
    me1onsoda
        71
    me1onsoda  
       36 天前
    我也觉得各种 VO 有点 sb,说的振振有词,其他语言咋没那么多逼事.你觉得有些数据不应该返回出去,就不要在 select 里出现.
    wuxianliang
        72
    wuxianliang  
       36 天前 via Android
    领导水 PPT 需要原材料就这么简单
    NessajCN
        73
    NessajCN  
       36 天前
    Jvav 仔管别人叫水货,还拿大模型回答当真理,属实把大伙儿逗乐了
    要不是 V2EX 不让用大模型回帖我立马反手一篇「为什么最好不要每个接口单独建 VO 类和 Param 类」的回答贴给你
    dengjscn
        74
    dengjscn  
       36 天前
    吃到红利资历的水货还少吗,有啥奇怪的,评论区有些评论太好笑,为什么他赚的比你多
    Super8
        75
    Super8  
    OP
       36 天前
    @NessajCN Java 仔起码能解决网络问题,知道抓包,各类硬件和服务器之间网络通信方式,会服务器运维,比如 dhcp 通信。
    Jax2000
        76
    Jax2000  
       36 天前
    java 是这样的,很多封装我不知道有啥意义
    1. service 一定要定一个接口 impl ,实际上就一个实现,不知道意义在哪里
    2. controller 层只做映射,明明没有复用的也要在 service 里面实现
    3. 各种为了未来的封装,可在我看来变动来了再封装也完全来得及

    不过我也不想管底下的人写的咋样,写的快没 bug 文档全就行
    我自己开发用 nodejs , 资源少/跨平台编译选择 go
    hshe
        77
    hshe  
       36 天前
    我这里也是,后端设计好接口并开发完成了。前端来一句,多了一层 vo ,要多操作一次,一票否决,后端返工(设计评审前端也是有参与)。
    leegradyllljjjj
        78
    leegradyllljjjj  
       36 天前
    这算啥 我隔壁的高级工程师连 vscode 都没用过呢
    NessajCN
        79
    NessajCN  
       36 天前
    @Super8 你咋不说 java 仔还知道 1+1 =2 ,吃饭要用勺或筷子,会自己走路开车上下班呢....这种基础中的基础也拿出来说
    另外,dhcp 通信是啥呀....你是想说网关给局域网内机子通过 dhcp 分配内网地址的事情?这值得单独拿出来说?
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2113 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 00:36 · PVG 08:36 · LAX 17:36 · JFK 20:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.