关于前端代码规范的问题 请教一下大家

5 天前
 ali233

最近入职了一家公司 领导在 review 代码的时候有一些分歧,我跟他聊了一些问题

  1. 使用最新的 vue3 技术,而用着老旧的 vue2 的写法
  2. 能 1 行代码解决 10 行代码,但是非要用 10 行代码的写法
  3. 长达 1000 行请求(定义请求 url 的)的代码文件,不做任何拆分处理,页面上所有请求都写到这个文件中
  4. 目前我维护的几个前端项目每个项目都是不同的写法

对于以上几点,以下是我跟领导的讨论记录

  1. 使用最新的 vue3 技术,而用着老旧的 vue2 的写法

    xxx: 會沿用像 vue2 的寫法純粹是因為當時我們幾個一致覺得這種寫法比較好,比 vue3 那種自由奔放,全部宣告的變數都放進 view 裡面好 以下是具体代码举例

    <script setup>
      export default defindComponent({
        component: xxx,
        setup:(){
            const listData = ref()
            const handleData = ()=>{xxx}
    
            return buildSetup({
              method:{},
              data:{ listData },
              handles: { handleData }
            })
        },
      })
    <script>
    // 页面上使用需要 
    // {{ data.listData }}  {{ handles.handleData }}
    
    // 还有些页面甚至全是 vue options API 写法
    
  2. 能 1 行代码解决 10 行代码,但是非要用 10 行代码的写法

    我: 当页面要获取请求的 loading 和 data 来展示的时候,老写法需要定义两个 ref 来存储接口的数据和状态,过于繁琐,所以使用了以下写法

    const { data, loading} = useRequest(fetchData)
    

    xxx: 現在項目的最優先考量是沒有必要的話,不要引入新的寫法,就算新寫法比較好用也是一樣, 因為只會造成新舊不一致,哪天你走了以後下個人又來一個寫法,久了就更難維護了 所以有出現 useRequest 的地方,我都會退回

    const data = ref()
    const loading = ref(false)
    
    const getData = ()=>{
        loading.value = true
         await getData(xxx).then(res=>{
              data.ref = res.data
         })
         loading.value = false
    }
    
  3. 长达 1000 行请求(定义请求 url 的)的代码文件,不做任何拆分处理,页面上所有请求都写到这个文件中

    我: 请求文件中代码量已经非常大,快接近 1000 行,继续往里写可读性会越来越差

    export default {
      async getListData = () => {
        return  axios.get(xxx)
      },
    
      async getUser = () => {
        return axios.xxx
      },
    
      xxx...
    }
    

    xxx: 現階段我不覺得這是個問題,我也不覺得可讀性有變差,而且對 reviewer 來說沒有多的心智負擔,只要順順看過去就知道在做什麼了。你可能會問說:「那之後變到 3000 行怎麼辦?」,我會說,到那個規模的時候,這個項目很多寫法都不適用了,那時八成會打掉重做,因此現階段這不是個問題

  4. 目前我维护的几个前端项目每个项目都是不同的写法

    我: 之前前端这块没有前端规范是因为项目都在不同的人手里,每个人开发会有差异,那既然现在项目都是我们自己人在维护了,为什么不统一一下写法和规范呢( PS: 大概 3-4 个项目,每个项目的写法都不一样)

    xxx: 做任何事情都是需要成本的,如果沒有考慮到成本跟帶來的效益,那就只是種自我滿足而已 現在的前端系統不會常出 bug ,代表功能上沒太大問題,那會很難維護嗎?不會,雖然幾個項目彼此的風格可能有差,但盡可能維護項目內的風格是一致的,就算以前沒有一致之後,之後也會盡量一致 再來還需要考量項目之後的發展以及生命週期,之後還有很多新功能嗎?還是已經差不多了?那如果已經進入維護期了,重構的必要性是什麼?有些人只是覺得代碼看起來不順就要重構,沒思考過這個理由是不是合理,是不是符合效益 總結一句話大概是我認為目前沒有制定開發規則的必要性,現有代碼也暫時不需要大規模的重構

最后是领导对于团队规范的总结: 不同階段/規模的項目有不同的做法,1 個人的、10 個人的或是 100 人合作的項目,做法都不同,如果硬要把 A 項目的做法直接套到 B 項目上面,或是直接把以前習慣帶進來覺得這一套之前很好用,現在一定也很好用,那通常是有問題的

我理解这句话的意思一个公司中的团队规范如果在 A 项目中好用,然后套用到 B 项目上还是很好用的话,那么这通常是有问题的

欢迎大家理性讨论,不知是我过于追求代码洁癖了还是什么

3649 次点击
所在节点    职场话题
86 条回复
jjwjiang
5 天前
评估你的方案、effort 和收益。

本质上是你没能说服你上级,没能说服的原因是这些点上他都有能自洽的道理而你的道理也自洽,但是并不能取得压倒性的胜利。
比如你那个 hooks 的例子,你能看到有人曾经因为这个写法产出过 bug ,最后增加了多少工时,那这就是一个可以说服的点,相比你的写法的心智负担,降低了 bug 产生率,等等等,而心智负担你可以通过注释、wiki 之类的东西来降低影响。
或者说哪次扩展功能,结果需要修改大量重复代码等等。

如果你发现你列不出合理的例子和收益,那说明这事他说得对,你自己没想明白。

代码是为项目服务的,你又不是在做开源。
Hanser002
5 天前
如果团队和领导对于 `review` 这件事的导向是维持项目稳定,那就不要折腾了,毕竟人是要“合群”的。

4 里面说了 `目前我维护的几个前端项目每个项目都是不同的写法`,但是 2 用了更现代的方案反而被打回。我理解之前的团队和领导也没有做好团队规范,领导给你描述的只是他认为/习惯的方式。说不好听点,就像国内很多团队一样,我升级到 vue3 ,但我还用 vue2 的写法;我引入 ts, 但是只用 any 。如果不能接受升级框架带来的新的规范、新的写法、新的库,那就没有必要升级,更何况 `vue2` 已经停止维护了。

对于 2 而言, `useQuery` 就是 `vue3` 请求的范例,你领导的代码就是繁琐、过时、低效,为什么有封装好的不用要自己写。如果一个组件有多个请求,参数之间有竞争,是不是还要手动去处理这些关系?我 review 碰到这种请求方式都是直接打回,自己手动去管理这些状态往往会出问题。这么看下来 “做任何事情都是需要成本的,如果沒有考慮到成本跟帶來的效益,那就只是種自我滿足而已” 这句话只是你领导不学不会不练的托辞。
ali233
5 天前
@jjwjiang 本质就是理性在跟领导讨论这个话题,但是后面他越说越有点厌烦的感觉,所以我也没有再深入讨论下去了

对于 hooks 的列子我在跟他讨论的时候已经列了好几个收益和示例了其实还是他最后的那一句话 : 不愿意使用新写法
kiroter
5 天前
就是老古董不接受新事物而已,看不懂又不好意思问。
colorcat
5 天前
没有太大意义,卷要向能给项目赚钱的方向卷
zy0829
5 天前
能跑就行了,打工人别难为打工人
ali233
5 天前
@colorcat
@zy0829
并不是在卷或者为难谁,这是啥日常开发的一些小插件,发出来就是想听听大家的意见一起讨论一下这种事的本质问题
ali233
5 天前
@ali233 #47 小插曲
Daotin
5 天前
1,2,3 问题不大,但改起来麻烦,需要成本,大可不必,而且对自身成长没有啥帮助。

4 ,领导说的对,老项目不动它,既没成长,亦无收益,动它作甚。

以后的新项目,再采用统一的标准。

以上为个人观点。
zy0829
5 天前
@ali233 #47 能理解你所说的,几年前还对技术充满激情的时候感受跟你一样。现在躺平了想法也变了,管好自己就 ok
1094705286
5 天前
领导不去学习吗?墨守成规,固步自封。
wtf12138
5 天前
代码重构,没出问题领导没啥好处,出了问题领导背锅
lisongeee
5 天前
示例有问题, <script setup> 里面不能写 export default
ali233
5 天前
@lisongeee hhhh 写着急了,是 <script lang="ts">
iyaozhen
5 天前
楼主你说这些没用,还不如找机会去大公司

至少我所在的团队,提这些是没人反对你的,最多只是细节上的问题
Razio
5 天前
2 我也确实不能理解,就算 useRequest 这个写法加进来又怎样呢,和 4 是不是自相矛盾。
其他的没办法,凑合干吧,理想和现实的差距。有时候要学会说不,但大部分情况还是多一事不如少一事来的顺心,学会放下
iceprosurface
5 天前
对于问题 1:
要么直接用 option 要么直接用 setup ,目前看这个写法出了麻烦没什么好处,如果是老项目我建议不改,如果是新写,就不要沿用了。

对于问题 2:
对于老项目,重构价值不大的,你领导说的对,不要改,对于新维护,维护频率高的,你可以据理力争改改

对于问题 3:
对于 api 请求我的观点是多少行都无所谓, 应该尽量自动生成,有类型( PS: 我们项目里面的请求文件目前有 13300 行, 反正 idea 自动折叠无所谓,而且一般不用点进去看)
如果手动写的,确实应该是分模块封装起来用,你领导说的也对,过早的优化是没有必要的

对于问题 4:
按照你们现在这个情况,你领导说的对。因为要执行需要满足下面几个条件:

1. 严格执行 review ,且 review 要求高,必须是交叉 review ,review 不通过不给合并
2. 项目时间安排合理
3. 整个前端所有人达成共识才能执行的
4. 要有对应的规范指南,每个新人进来前两天必须熟读
5. 所有项目的 code style 、lint 规则一致
pulengba
5 天前
领导”懒政“而已,做多错多,稳定是第一位的。
AtlantaANiu
5 天前
如果贵司要求必须写单元测试,并以代码覆盖率作为考核目标,就能解决所有问题。风格再好,代码再漂亮,不写测试最终都会变成一坨大便。
mikawang
5 天前
你们领导不注重开发体验,我们公司就很注重开发体验

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1072868

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX