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

想问各位一套代码应用到几十个项目该怎么管理

  •  
  •   FranzKafka95 · 3 天前 via Android · 2602 次点击

    各位程序员朋友,我们团队一直有一个问题,基于项目 A 我们构建了一套平台化代码,项目 A 稳定后平台化代码也趋于稳定直至项目 A 量产。后续又有项目 B/C/D/E/F…,都是基于这套平台化代码,同时由于这些项目上一些新的特性,不断在这套代码上进行扩充。但是原量产项目 A 会定期更新迭代,迭代时怎样才能不引入由于这些新的特性而增加的代码呢?随着量产项目越来越多,如果管控好真的难到我们团队了。如果各个项目分开管理,代码同步上又会比较困难,很难做到真正的平台化。想问一下大家是怎么做管理的呢? 我们目前能想到的是为每一个量产项目定版时的软件打上 TAG ,更新迭代如果无必要则拉取对应 TAG 的代码进行编译组版,如果确有更新,则同步修改 TAG 。想请问大家有更好的方式吗?

    26 条回复    2022-01-17 10:01:36 +08:00
    wudaye
        1
    wudaye  
       3 天前
    不太懂,说两点废话:1. 拆分代码,模块化 2. 主线分支做好版本管理
    lscho
        2
    lscho  
       3 天前
    这不就是微服务干的事吗?
    bigfatDone
        3
    bigfatDone  
       3 天前
    前端就直接开发 npm 包,哪个版本有哪些更新,需要哪些功能就拉哪个包就可以了。做好版本管理
    vance123
        4
    vance123  
       3 天前
    monorepo
    tomczhen
        5
    tomczhen  
       3 天前 via Android
    你以为是一个问题,实际上是一堆问题。
    gengchun
        6
    gengchun  
       3 天前
    这么玩能不能成功,取决于项目性质。

    和流程管理没有太大关系。

    真要共享,开发一个框架,框架开发好以后,只做 bugfix ;然后把各项目的功能需求拆开成插件形式。项目的发布当于框架再集成加各种插件。框架和插件的代码统统分开。框架有 bug 所有项目都升级一次框架。

    当然,这么玩,没有太多功力,玩不转。
    3dwelcome
        7
    3dwelcome  
       3 天前 via Android
    把偏特化需求写成插件的形式。
    mineralsalt
        8
    mineralsalt  
       3 天前
    参考 IDEA, 所有额外功能都做成插件
    vanton
        9
    vanton  
       3 天前
    按我的经验,基本没法做到。

    这是一大堆问题的集合。
    darkengine
        10
    darkengine  
       3 天前
    “但是原量产项目 A 会定期更新迭代,迭代时怎样才能不引入由于这些新的特性而增加的代码呢?”,如果后续项目 A 的代码有改掉一些共有的 bug ,基于项目 A 平台代码的 B/C/D/E/F 要不要跟进?

    项目 A 应该拆成两个项目,一个是承载业务的项目 A',一个是平台化的项目( SDK 项目)。
    xiangyuecn
        11
    xiangyuecn  
       3 天前
    A:1.0 2.0 3.0
    B/C/D 引用的 1.0
    E/F/G 引用的 2.0

    A 更新:1.0 2.0 3.0 更新成 1.1 2.1 3.1
    B/C/D 更新成引用的 1.1
    E/F/G 更新成引用的 2.1

    分大版本嘛,互不兼容🐶
    zoharSoul
        12
    zoharSoul  
       3 天前   ❤️ 1
    我选择跑路
    rekulas
        13
    rekulas  
       3 天前
    这个就是类似我们以前遇到的问题,最开始也是采用独立版本,但是这样同步修改比较麻烦
    所以后面就直接整合在一个版本里了,相当于你每个不同项目就是一个子站,数据库上能直接数据独立就独立实在不能独立就分别存储,程序上根据不同子站实现定制化功能需求,这样做的缺点是前期整合起来很痛苦,耦合性也过高,但优点就是维护方便
    我感觉大型公司处理这个问题也是整合到一起的,不然随着版本号的不断累加,拆分后即使是大公司也难以承担越来越高的维护成本
    没有优雅的解决方案
    zjsxwc
        14
    zjsxwc  
       3 天前
    之前 bilibili 泄漏的 golang 源码就是所有子项目都在一个项目里面
    wuby
        15
    wuby  
       3 天前
    之前也遇到类似的问题,但是一直拖着没解决。我个人认为这个跟版本控制有关系,可以参考各个开源社区的方式,设置分支,基库一个分支,其他是各个项目分支的,修改某个项目分支的时候发现这个是通用的就合并到基库。这个工作需要一个人维护分支的。
    iv2ex
        16
    iv2ex  
       3 天前
    以前做 App 遇到过,最开始用一套代码仓库,后面发现随着项目发展,各项目可能出现差异化,耦合太高,B 项目发版本,很难保证A、C项目不受影响,维护成本极高(要熟悉业务、熟悉代码哪些耦合了);如果人员变动,这套代码维护起来就没完没了;

    后面直接拆分项目,各自一套仓库,随便项目怎么变动迭代,哪个更新测哪个,如果多个更新就复制粘贴。从技术的角度说这种方式很“低级”,从业务的角度来说,出错几率极低,而且不会影响其他项目。
    YYyoung
        17
    YYyoung  
       3 天前
    现在的项目也遇到几乎一样的场景问题。在接手前已经有从,耦合度高的一套代码模式转变为相对解耦的多套代码维护模式。但一直以来也发现有不少问题,如:过多的复制粘贴,很多时候还会漏,维护起来很麻烦,大家都对修复一个问题或者加一个通用的功能要去多个版本中去改动代码感觉比较繁琐,所以近期又在打算重构为使用一套代码的模式。考虑使用插件化的方式进行,但是估计后续还是会有一些问题,但至少能解决当前的一些项目痛点吧。就是不断折腾。
    jones2000
        18
    jones2000  
       2 天前
    基础库+丰富的扩展接口就可以了呀。 每个项目特性的东西都通过扩展接口定制修改, 不需要修改底层基础库。 公共通用的东西就修改底层的基础库。
    ligiggy
        19
    ligiggy  
       2 天前
    Any problem in computer science can be solved by another layer of indiretion.

    计算机科学领域的任何问题都可以通过添加一个间接的中间层来解决。
    FACEB00K
        20
    FACEB00K  
       2 天前
    同一套代码,最后项目之间的依赖太复杂了
    FACEB00K
        21
    FACEB00K  
       2 天前
    @zoharSoul 哈哈哈,是我[doge]
    yurong333333
        22
    yurong333333  
       2 天前
    和我司差不多。真的无语。这是一大堆问题的集合,不一定是技术问题。
    einq7
        23
    einq7  
       2 天前
    git subModule 不香吗
    qza1212
        24
    qza1212  
       2 天前
    1.单代码库 monorepo ,对程序员要求高,任一 lib 项目 merge 都必然影响其他项目
    2.多代码库做 stable 分支依赖,需要自己管理依赖以及反向构建来保证 stable 分支可用

    不建议 tag 依赖
    ychost
        25
    ychost  
       2 天前
    考验抽象能力了,api 层尽可能的轻量化,实现都是各个 Plugin ,Java 的话可以参考 SF4j
    SmiteChow
        26
    SmiteChow  
       1 天前
    搜索 sass
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3557 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:09 · PVG 12:09 · LAX 20:09 · JFK 23:09
    ♥ Do have faith in what you're doing.