【问题标题】:Software Architecture for developing apps that run on Multiple platforms [closed]用于开发在多个平台上运行的应用程序的软件架构 [关闭]
【发布时间】:2009-06-10 15:33:24
【问题描述】:
各种应用程序,如 Firefox、Fring、Skype 可在各种平台上运行。他们如何管理他们的代码?他们是否有针对不同平台的不同 UI?例如,Firefox 必须在 Mac 上使用 Cocoa,在 Windows 上使用 WinForms 或等效软件,在 Linux 上使用 QT 等效软件。同一个源代码怎么可能只通过编译一个 diff 目标来显示 diff UI?
他们确保一个版本中的错误修复(如安全问题)在所有版本中都得到修复,这意味着代码不会在任何地方重复。那么底层架构是如何设计的呢?
【问题讨论】:
标签:
design-patterns
architecture
open-source
【解决方案1】:
根据我的经验,帮助我解决跨平台问题的是:
- 一种语言的库代码,可在您需要开发的任何平台上移植,在我的例子中是 C/C++。
- 与单元测试持续集成,以便您可以尽快处理任何破坏性代码更改。
- 非常模块化的库,尽量减少依赖项。
- 不要害怕拥有任何您需要的速度/功能/其他概念的特定平台实现。有很多方法可以隐藏您在代码主体中使用特定于平台的代码这一事实。
- 使用设计模式有助于实现您想要的结果。 DRY 和 SOLID 等其他原则也有帮助。这是比跨平台特定的更好的软件设计。
您可能面临的一些设计问题在很大程度上取决于您要实现的目标。如果 UI 不是一个交易,那么使用像 QT 这样的库可能是要走的路。这同样适用于您应用程序的任何方面。使用开源或付费库有助于减少开发时间,这可能是一件好事。
您的应用程序应该在哪里大放异彩,那么您真的应该自己编写这部分代码。
我不能过多地谈论 UI 选择,因为我处理的大多数平台都非常不同,以至于您每次都必须重新设计 UI 层。库和主引擎层可在平台之间移植这一事实有助于简化这一过程。
【解决方案2】:
基本解决方案是将差异集中在应用程序的一小部分。例如,FireFox 在幕后有 XulRunner。
您也可以为此使用现有框架。如果你在 Linux 上使用 Qt,你就不会去 WinForms for Windows。你仍然会使用 Qt,这也适用于 Mac。
因此,诸如安全漏洞之类的事情要么在平台特定层,要么在通用层。在第一种情况下,您只需要在受影响的平台上修复它们。在第二种情况下,当您修复错误时,它会在所有地方修复。