维护在不同平台上运行的应用程序的源代码



我正在开发一个在不同平台上运行的应用程序,如Windows、Ubuntu和Raspberry Pi。把它想象成一个由PythonFlask服务器提供服务的网络应用程序。到目前为止,我一直在Ubuntu上运行这个应用程序。我想移植代码,让应用程序在Windows和Raspberry Pi上运行。

这在所有平台中都很常见——作为应用程序的核心部分,flask服务器和UI代码保持不变

这就是不同之处——数据和功能。如果Ubuntu和Windows版本的应用程序有十几个功能,那么树莓派的应用程序将只有其中的一半。功能所需的数据也会相应地发生变化。另一个显著的变化是效用函数。例如:我将不得不在每个平台上使用不同的文本到语音程序。

如果我为每个人创建单独的回购,它就会起作用。我想知道这样一个场景的开发和代码管理过程会是什么样子。以下是我脑海中的想法,我觉得我可以尝试一下:

  1. 用于支持每个平台的独立转发
  2. 单个repo,每个repo有不同的文件夹
  3. 分离出通用代码的单一回购(我不确定这是否可行(
  4. 每个平台支持的不同分支

我很想知道这种开发活动的标准程序是什么,以及以上4种方法(尤其是4种(的常见程度。谢谢

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

这是大多数代码库使用的方法,并且与单独的repo相比,它在各个版本之间保持了更好的兼容性。使用单独的分支意味着将功能合并到不同的分支中可能会出现很多冲突。

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

通过使其基于功能,你可以专注于可用的功能,所以如果树莓派变得更强大,那么你只需打开该功能。同样,如果你决定支持macOS,你可以找到该操作系统可以支持的功能并打开这些功能。同样,你可以在macOS上为原生文本到语音层添加一个抽象,然后也可以翻转该功能。

相关内容

最新更新