V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mouyase
V2EX  ›  问与答

同一个项目具有多种不同的发行版,应该如何管理代码与产物?

  •  
  •   mouyase · 138 天前 via Android · 949 次点击
    这是一个创建于 138 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如我手上现在有一个 App 项目,现在同时有国内版和国外版两种版本,以及 android 和 ios 两个平台,所以一共具有 4 种不同的发行版,如何才能正确的管理和维护项目的代码和产物呢?



    该项目具有以下的特性



    - 是使用 ReactNative 开发的 App 项目,所以 android 和 ios 的代码是在同一个项目里

    - 国服和国际服使用了不同的原生 SDK ,因此原生代码不同

    - 国服和国际服使用了不同的包名,图标,签名等

    - 国服和国际服使用了不同的服务端

    - 国服和国际服有大量相同的逻辑代码和相同的页面 UI 组件,但在各种各样的细节地方有区别,例如同一个组件在两个服调用的接口不同,数据结构不同

    - 两个服因为服务端不同,导致服务端的接口版本也不同,发版时间也不同



    暂时想到的好像就只有这么多了,现在项目是所有代码都在一起,通过不同的环境变量来判断,项目里的状态管理已经一团糟了,经常改了国际服的逻辑,结果导致国服版本出问题之类



    还有个问题就是两个服用了不同的 npm 库,最后导致打出来的原生包包含了两个服所有的 sdk 文件,产物体积变得非常巨大



    不知道各位大佬有没有遇到类似的问题,有没有好的解决方案
    5 条回复    2024-07-15 12:17:59 +08:00
    snipking
        1
    snipking  
       138 天前
    简单解:app 分成两个代码库,相同的代码维护两遍,复制粘贴而已
    一般解:app 分成两个代码库,抽象组件库供 app 使用,非组件库的相同代码维护两遍,复制粘贴而已
    进阶解:按 DDD / Clean-Architecture 思想重构,将现在通过状态控制的逻辑抽象为接口及实现,完善单元测试
    mouyase
        2
    mouyase  
    OP
       138 天前
    @snipking 现在一个问题是相同的代码和不同的代码是分散的分布于各种地方,做不到解耦,如果复制粘贴可能会导致一侧的改动覆盖另一侧
    snipking
        3
    snipking  
       138 天前 via Android
    @mouyase 只是单纯的复制粘贴的话,你需要的是一只猴子而不是程序员
    kongkx
        4
    kongkx  
       137 天前 via iPhone
    拆成两个项目,公共部分做 submodule 。 核心逻辑层需要做抽象, 各自项目在项目内结合 sdk 做核心数据库的 adapter 或者 utils 。 能复用的 UI 也是独立成库。
    mouyase
        5
    mouyase  
    OP
       135 天前
    @kongkx 感谢提供参考
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1666 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:48 · PVG 00:48 · LAX 08:48 · JFK 11:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.