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

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

  •  
  •   firhome · 2024-08-09 10:51:01 +08:00 · 4275 次点击
    这是一个创建于 379 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    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  
       2024-08-09 10:59:40 +08:00
    有个东西叫 "Code snippets" 很多 IDE 都支持. 可以将这类东西配置到 IDE 中. 例如 VS Code 就支持
    https://code.visualstudio.com/docs/editor/userdefinedsnippets
    8355
        2
    8355  
       2024-08-09 11:01:06 +08:00
    copilot 直接就能弹了。。不需要管理
    wander555
        3
    wander555  
       2024-08-09 11:05:41 +08:00
    live templates....idea
    NessajCN
        4
    NessajCN  
       2024-08-09 11:06:42 +08:00
    panlatent
        5
    panlatent  
       2024-08-09 11:10:43 +08:00
    恰巧尝试过不少

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

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

    2. IDEA 重点 Live Template

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

    3. Copilot 等 AI

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

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

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

    API.schema:


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

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


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

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

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

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

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