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

面对水货主管的无奈

  •  
  •   Super8 · 3 天前 · 6926 次点击

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

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

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

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

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

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

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

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

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