用于开发在多个平台上运行的应用程序的软件架构

时间:2009-06-10 06:26:36

标签: design-patterns architecture open-source

各种应用程序,如Firefox,Fring,Skype在各种平台上运行。他们如何管理他们的代码?他们对不同的平台有不同的用户界面吗?如同,Firefox必须在Mac上使用Cocoa,在Windows上使用WinForms或同等产品,在Linux上使用QT。如何通过编译diff目标,相同的源代码如何显示diff UI?

他们确保在所有版本中修复了一个版本中的错误修复(如安全问题),这意味着代码不会在任何地方重复。那么底层架构是如何设计的?

2 个答案:

答案 0 :(得分:3)

根据我的经验,帮助我解决跨平台问题的是:

  • 一种语言的库代码,可以在您需要开发的任何平台上移植,在我的例子中是C / C ++。
  • 持续集成单元测试,以便您可以尽快接收任何破坏代码更改。
  • 非常模块化的库,试图尽可能减少依赖。
  • 不要害怕具有针对速度/功能/任何需要的任何概念的特定平台实现。有许多方法可以隐藏您在主体代码中使用特定于平台的代码这一事实。
  • 使用设计模式有助于实现您想要的结果。还有其他原则如DRY和SOLID也有帮助。这是比跨平台特定的更好的软件设计。

您可能面临的一些设计问题在很大程度上取决于您要实现的目标。如果UI不是一个交易,那么使用像QT这样的库可能是要走的路。您的应用程序的任何方面都是如此。使用开源或付费库有助于缩短开发时间,这可能是一件好事。

如果您的应用程序要发光,那么您应该自己编写该部分。

我不能谈论UI选择,因为我处理的大多数平台都是如此不同,以至于每次都必须重新设计UI层。库和主引擎层在平台之间可移植这一事实有助于使这更容易。

答案 1 :(得分:1)

基本解决方案是将差异集中在应用程序的一小部分中。例如,FireFox在幕后有XulRunner。

您也可以使用现有框架。如果你在Linux上使用Qt,你就不会去WinForms for Windows。你仍然使用Qt,这也适用于Mac。

因此,安全漏洞等问题可能在特定于平台的层中,也可能在通用层中。在第一种情况下,您只需要在受影响的平台上修复它们。在第二种情况下,当您修复错误时,它在任何地方都已修复。