【问题标题】:Maintain source code of app that runs on different platforms维护在不同平台上运行的应用程序的源代码
【发布时间】:2020-11-07 13:03:31
【问题描述】:

我正在开发一个可以在 Windows、Ubuntu 和 Raspberry Pi 等不同平台上运行的应用程序。把它想象成一个由 Python Flask 服务器提供的 webapp。到目前为止,我一直在 Ubuntu 上运行该应用程序。我想移植代码并使应用程序也可以在 Windows 和 Raspberry Pi 上运行。

这是所有平台的共同点——应用的核心部分,烧瓶服务器与 UI 代码保持不变

这就是不同之处 - 数据和功能。如果 Ubuntu 和 Windows 版本的应用程序有十几个功能,那么用于 Raspberry Pi 的功能将只有其中的一半。功能所需的数据也会相应更改。另一个值得注意的变化是效用函数。例如:我必须在每个平台上使用不同的文本到语音转换程序。

如果我为每个创建单独的存储库,它会起作用。我想知道这种场景的开发和代码管理过程会是什么样子。以下是我认为可以尝试的想法:

  1. 支持每个平台的单独存储库
  2. 单个存储库,每个存储库具有不同的文件夹
  3. 分离出通用代码的单一仓库(我不确定这是否可行)
  4. 每个平台支持的不同分支

很想知道此类开发活动的标准程序是什么,以及上述 4 种方法中的每一种方法的常见程度(尤其是 4 种)。谢谢!

【问题讨论】:

    标签: python version-control raspberry-pi repository cross-platform


    【解决方案1】:

    通常做的是某种特征检查或抽象,或两者兼而有之。例如,您可以为文本到语音编写一个接口,然后为每个平台提供一个实现。同样,您可以对功能 foo 进行功能检查,然后在每个平台上将其定义为不存在或存在。

    这是大多数代码库使用的方法,与单独的存储库相比,它保持了更好的跨版本兼容性。使用单独的分支意味着您最终可能会遇到很多将功能合并到各个分支中的冲突。

    某些特定于平台或特定于功能的代码可能会存在于单独的文件或文件夹中,这是必要的,也可以。例如,可能需要隔离该代码,以便它不会加载不存在的依赖项。但是您会希望尽可能多地使用统一接口共享大部分代码。

    通过使其基于功能,您可以专注于可用的功能,因此如果 Raspberry Pi 变得更强大,那么您只需打开该功能即可。同样,如果您决定要支持 macOS,您只需找出操作系统可以支持的功能并将其打开即可。同样,您可以为 macOS 上的本机文本转语音层添加一个抽象,然后也可以翻转该功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2020-03-25
      • 2019-11-07
      • 2011-07-07
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多