背景:leader 最近接手了个嵌入式上的管理后台项目,架构比较古早 Static Web <-> Nginx <-> CGI (C, via Unix Socket) <-> Backend Application (C) <-> Modules 。同事抢了前端部分的工作,我分到了和储存系统相关的后端模块。评审完原型后就开工了,我写好自己模块前端部分 API 的草案后,请前端的同事先帮我 review 一下,结果被怒批了一顿。
从对方比较尖锐的评价里我大概总结出以下几点:
对方观点:
对方理由:
事后也虚心看了下他写的 API ,这里仅以我的视角总结一下他的思路(因保密协议就不贴代码了):
下面说一下这部分我的观点(个人职场新人,非 CS 专业,目前也就做做 embedded infra ,这方面可能不专业):
其它的一些想法:
也想听听大家的建议(比如技术方面或为人处事方面)
嗯,再补充一些细节吧:
(应该还有不少,就不浪费社会资源吐槽了)
![]() | 1 lymanbernadette6 2 小时 35 分钟前 ![]() 他行,让他来。 他不给你发工资,你能挨他骂? 如果是好好说话,就好好探讨问题, 上来给你上强度就别惯着。 |
2 chachi 2 小时 21 分钟前 你们没研发经理? |
3 dsw0719 2 小时 20 分钟前 你在工作中不发火就是不会工作。懂吗?别管对不对。下次他大声说你,你就加更大的声音顶回去。 |
4 SGL 1 小时 33 分钟前 ![]() 朋友来了有酒肉,敌人来了有猎枪。 |
![]() | 5 rabbbit 1 小时 30 分钟前 字太多看的脑壳痛,谁来总结下重点. 意思是你想按功能分 api,前端想按他前端组件分 api? 随便举个例子啊,有个页面里需要: 用户信息和商品列表. 你的: 分两个 api 用户信息和商品 他的: 调一个 api 把用户信息和商品给他 |
![]() | 6 Biem 1 小时 20 分钟前 j 工是这样的。 |
![]() | 7 rabbbit 1 小时 7 分钟前 上面理解错了,只是前端也把一部分接口写了. 工作么,这玩意商量着来. 特别是什么内部的 xx 管理系统,没人关心这玩意咋设计的. 前端忙就后端多写点聚合的接口免得前端调来调去. 后端忙就前端多调几次接口. 实在解决不了那找领导. |
![]() | 8 vonfry 55 分钟前 > 前端页面下一个子组件对应到一个 endpoint ,不再分级,组件全部信息放在一个相同的 JSON schema 里就好 > 根据请求类型,后端自动去 request payload 里找需要的字段用或选择性更新 response body 里的部分字段 听起来很像 graphql 的想法,如果要用 json 也有类似的框架。简单来说就是后端不把功能拆得非常细,而是由前端来控制数据的获取,这样其实对迭代会比较简单,后续维护很多需求可能都不用过后端。不过就是初期开发会有点成本,用框架的话会好一点。 > 一年前上司曾批评过我过度设计,效率低 我觉得得看人和项目。对很多企业来说,产品能跑就行,根本不关心内部质量。以技术角度来说我个人认为不可取,企业内,你自己想明白就行。我觉得满足自己最重要,再严重也就是丢份工作而已。 > 他自称写过很多爬虫,也写过前端(他本职做 AI 算法的,211 硕) > 前端原型里部分组件 anti-pattern 的迹象很明显,一个模块里揉合状态信息、配置信息和控制指令,我倾向做 decomposition 拆到该 endpoint 的子路径里做(我很难接受前端把这种模式通过 API 扩散给后端) 和学历无关,身边统计学。国内前端、AI 出身的大部分不关注代码质量。另外做过什么并不能说明代码能力。何况爬虫这种又是调库为主的;并不是去维护了爬虫库,做了很复杂的反爬,或是有很好的性能调优或者架构。说明不了什么。 |
![]() | 9 vonfry 52 分钟前 你有 leader ,也提了前身兼容这种要求。那么你应该和 leader 多沟通,确认技术细节。 另外开会说的东西遗忘还蛮正常的,毕竟那么多内容,一般都主要关心自己的部分。这种会后开工前要对接的,提供沟通会比较合适。 |
10 kneo 50 分钟前 via Android 朋友,我看前面感觉可能是作为新员工的你太优秀了遭到同事妒忌。但是怎么感觉你写着写着就跑题了呢。不是很明白你要表达的重点。也不知道怎么回复。 |
![]() | 11 bbbblue 48 分钟前 他这个应该是前端也写的菜 所以最好你一个接口就对应他页面/组件里全部数据吧 数据组装全都在后端做 后面前端改后端跟着改 你和他互换一下 你写前端 他写后端 搞不好就要反过来了 他这个评价标准就是你们都要配合他 他怎么简单怎么来 |
![]() | 12 unbinilium OP @rabbbit 是的,这是第一个分歧点,我比较 RESTful ,endpoint 想做成 `/{组件}/{功能}` 第二个分歧点在 payload 部分,比如一个划定时间段的日程组件(`.../schedule`),对方倾向平铺 `{"monday":[{...},...],"tuesday":[...],...}`, 我是倾向规则化 `{"weekly":[{...},...],"exceptions":[...],...}` 以上两个分歧延伸到了其他接口上,再举个例子就是磁盘管理组件: - 显示当前可用的磁盘、每个磁盘的状态 - 用户对磁盘的配置(配额、清理策略等) - 用户执行的操作等(挂载、格式化等) 由于上面几点在原型里比较模糊,产品迟迟没有给出确定的需求,我就自己打了个草稿: - 按功能把 endpoint 分了两级 - response body 按磁盘->分区做了结构化的组合,然后加了一些冗余字段 - 比如状态机区分:错误/格式化中/未挂载/正常/同步中/索引中 - 状态机的冗余属性:格式化中状态下代表格式化进度(类型不变) - revision:用于将状态机与用户行为同步,比如用户请求格式化,重命名等( POST 非幂等) - 其他冗余字段如当前分区格式等... 可能对比现有的原型确实复杂了点,之前确实也没这方面的项目经验 |