V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
firhome
V2EX  ›  程序员

困惑好久的问题,如何做代码管理?

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

    我是前端,相信大家也遇到过。

    在写项目中经常遇到这种问题:

    写一个新的接口,代码格式/样子都是一样的。 如:

    const getList = (params)=>{ return ajaxfn({url:'xxx',type:'post',params:params}) }

    经常这个项目要加新接口的时候,我都是从别处先复制一下这段代码,然后改改方法名和接口地址即可。

    再比如写一个弹框。一般是 xxxModal.vue ,然后要写新弹框也是复制一个 Modal 。改改里面的逻辑即可。

    还有类似后台 列表/筛选 等等,都是找之前写好的。然后改改里面的逻辑接口,一般 80%的代码都是一样的。

    不要说抽出来写组件什么的,其实已经是最简了。哪怕再抽搞成 组件 + json 配置什么的。下次用还是会去看一下之前怎么做的,把 json 复制配置一下。。。。以此类推。。。。

    所以,只有这个项目刚建或者新的业务场景的时候,才会去“思考”怎么手把手来做。其它时间都在 cv 。

    我曾经想过,在一个项目里,直接放个 demo 目录,然后大家直接去 copy 相关代码即可。但是也难免有遗漏(偷懒不更新 demo 目录)

    也写过用自带的代码片段来维护。但是管理又麻烦。

    不知道大家有什么好的办法么?

    24 条回复    2024-08-09 18:31:31 +08:00
    ming159
        1
    ming159  
       104 天前
    有个东西叫 "Code snippets" 很多 IDE 都支持. 可以将这类东西配置到 IDE 中. 例如 VS Code 就支持
    https://code.visualstudio.com/docs/editor/userdefinedsnippets
    8355
        2
    8355  
       104 天前
    copilot 直接就能弹了。。不需要管理
    wander555
        3
    wander555  
       104 天前
    live templates....idea
    NessajCN
        4
    NessajCN  
       104 天前
    panlatent
        5
    panlatent  
       104 天前
    恰巧尝试过不少

    1.( Code ) Snippets 无论是 IDE / Alfred / Snippets (Mac APP)

    需要收集和整理,本质上还是个剪辑板。基本上不用了。

    2. IDEA 重点 Live Template

    面对特定框架下的高度样板化代码有奇效,缺点是需要自己归纳便携和不断优化才会越来越好用,但可控程度更高。

    3. Copilot 等 AI

    大部分时间都很好用,主打一个省事。

    4. 模板项目或特定生成工具

    需要开发和调整,适合框架类项目。
    zjsxwc
        6
    zjsxwc  
       104 天前
    "Code snippets"不错,
    我用的最多的是自己写的代码生成脚本。
    fusi
        7
    fusi  
       104 天前
    自己写了几个样板页面,对应不同的产品,主要是 vue\css\mixin 几个文件
    面向产品编程,我们这边每个产品风格基本固定,新加的页面或者逻辑都是大差不差,逻辑塞到 mixin 中,样式塞到 css 中,差异塞到 vue 中,直接整个文件夹移动到不同项目就能用
    当然,这些只针对新页面
    forty
        8
    forty  
       104 天前
    如果是 UP 说的这个场景, 我感觉是属于代码抽象的不对,这种雷同的应该是不需要再 cv 代码的.
    就比如说你为文章列表的展示写了一份代码,然后又有另一个分类的文章列表展示,又复制粘贴一份代码?不应该。
    正常是前端传不同的参数,后端都是同一套代码,不需要到处 cv 同样的代码。
    需要 cv 的,一般是大部分不同的。
    seeu2ex
        9
    seeu2ex  
       104 天前 via iPhone
    要么 ide 代码片段,要么再封装一个通用函数,把公用的抽离出来,只需要填不同的参数
    1wlinesperday
        10
    1wlinesperday  
       104 天前
    单说前后端交互有明显的冗余的部分,这里工程化比较好的方法是参考 GraphQL ,利用中间的 Schema 来同时生成后端和前端交互的代码。
    举个例子:

    API.schema:


    GET https://xxx.com/api/v1/users
    Request Type Decl {...}
    Response Type Decl {...}

    前端: 可以利用上述的信息直接生成 hook
    function useUsers(...){ ... }
    后端: 可以利用上述的信息直接生成 API 的 scaffold


    列表,modal 那几条应该不是问题
    shizhibuyu2023
        11
    shizhibuyu2023  
       104 天前
    觉得自带的代码片段不方便管理,可以自己写个 vscode 插件整个界面来维护吧(我猜可能已经有类似的插件了)
    tool2dx
        12
    tool2dx  
       104 天前
    我自己写了一个工具,针对源代码级别来提取业务相关的函数和代码。

    但其实关键不在于代码复制粘帖的效率,而在于代码的高度业务复用性。

    如果不做这点,以后维护代码更麻烦。
    kokutou
        13
    kokutou  
       104 天前
    idea 不是直接弹了
    Chinsung
        14
    Chinsung  
       104 天前
    copilot 基本都直接弹了,要么大量相同的定义就直接丢掉 gpt 让他按照规则帮忙生成下
    ruoxie
        15
    ruoxie  
       104 天前
    ruoxie
        16
    ruoxie  
       104 天前   ❤️ 1
    shunia
        17
    shunia  
       104 天前
    目前用 AI 是相对来说最轻松的,你写类似的代码它自动提示,tab 一下就好了,基本不用改。
    supuwoerc
        18
    supuwoerc  
       104 天前
    lizhenda
        19
    lizhenda  
       104 天前
    你凭什么觉得你这些代码能一直复用下去?试试过几年再回过头看看?
    crayygy
        20
    crayygy  
       104 天前
    你需要的是脚手架,在这方面个人觉得做得不错的是 Ruby on Rails ,很早以前写 RoR 的时候就觉得,几乎没写过什么重复代码,大多数都是复用的或者是直接调用
    sampeng
        21
    sampeng  
       104 天前
    Copilot 已经干死掉 snippets 了。但是,Copilot 不能解决特别大段的代码。这没什么办法。
    以我身边统计学来说,现在的研发 10 个里面只有 1-2 个接受 copilot 。。

    所以像你说的:如果你用 gitlab 作为仓库。gitlab 的每个项目可以创建自己的 code snippets 。比目录强多了。

    说实话,程序员都是懒得整理的。记得在哪打开文件过去现拷
    sampeng
        22
    sampeng  
       104 天前
    @forty 这就是代码写少了代码抽象魔怔了。。。
    有很多场景就是改个函数名和调用的。其实这种我更喜欢,因为好改,看代码特别好理解。
    air1314
        23
    air1314  
       104 天前
    一般不整理 因为整理费时间而且基本不会看 业务代码如果有做过类似的直接去对应项目里扣 像工具类这种更适合单独整个仓库 import 进来
    wenye123
        24
    wenye123  
       104 天前
    每个人写代码都有自己那一套东西可以复用 很难说有啥高低之分
    毕竟最终目的都是为了业务 然后业务是为了挣钱 只要功能实现了就行 业务不挣钱 代码简洁上天也没用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:28 · PVG 06:28 · LAX 14:28 · JFK 17:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.