我想知道如何开发跨平台应用程序。例如像Microsoft Office适用于MAC / Windows、FireFox适用于MAC / Windows / Linux等应用程序。
如果他们需要为不同的平台编写代码,那么很难管理,并且涉及许多其他复杂性。
问题:开发团队如何管理开发多个平台的复杂性?
我想知道如何开发跨平台应用程序。例如像Microsoft Office适用于MAC / Windows、FireFox适用于MAC / Windows / Linux等应用程序。
如果他们需要为不同的平台编写代码,那么很难管理,并且涉及许多其他复杂性。
问题:开发团队如何管理开发多个平台的复杂性?
微软办公套件不是一个跨平台应用程序。如果你曾经使用过Mac版本,你就会知道。最后一个跨平台版本的Office是臭名昭著的Office 6.0,早在1998年。发生的事情是用户抱怨外观和感觉,并谴责“移植”思维。
Office的Mac版本不仅由不同的团队编写,而且由完全不同的部门编写:Mac业务部,也称为MacBU。不同的部门负责人、不同的经理以及我相信也有不同的销售和营销人员。
这是一种方法。在Mac用户中也被称为“正确的方法”。
当然,并非每个人都像微软那样规模庞大,能够创建一个完全不同的子公司来支持Mac用户(更不用说Linux用户了)。稍微更理智的做法是使用跨平台库来处理GUI等内容,例如wxWidgets、QT或GTK。毕竟,大多数核心的C代码在各个平台上并不会有太大变化,只有GUI和文件管理等专有部分会有差异。实际上,你甚至可以坚持使用POSIX函数调用进行文件管理和网络操作以实现跨平台性。但要注意,Mac用户很可能会不喜欢最终结果(就像发生在MS Office 6.0中的情况一样)。对于跨平台应用程序,可能有几乎与之相同的方法。一般来说,它们可以归结为几种不同的策略:
使用具有可移植运行时的语言 - 例如Java,.NET在某种程度上,或任何一个无数不同的解释脚本语言。
使用跨平台工具包(例如QT)隐藏平台差异。
在像C或C ++这样的语言中使用条件编译来更改不同平台的代码库。这类似于#2,只是您实际上正在构建自己的跨平台工具包。
如果你在谈论编译后的C++,你最终会得到一些条件定义,比如代码中的#IFDEF WIN32
。当你编写跨平台代码时,必须进行跨平台测试。像Hudson这样的构建系统可以在你提交代码时在所有平台上构建你的代码,这非常有帮助。
对于GUI方面,使用一个好的跨平台库,比如QT,是非常有帮助的。它让你以更或多或少相同的方式编写GUI代码,但在编译为任何系统时保持本地感觉。
希望这能帮到你!
多平台代码的主要方法是使用多平台基础。例如,大量使用boost库(用于文件访问、线程同步原语等)的C++代码将在多平台环境中工作。同样,如果您创建了.net(托管)代码,则可以通过.net运行时(如果在Windows上)或Mono(如果在Linux系统上)实现跨平台能力。
还有其他问题需要解决,但这是最重要的问题。在C++的情况下,其他问题可能包括如何处理GUI。有意选择再次使用跨平台代码也起到了作用,例如使用WxWidgets或Qt。
同时,拥有一个跨平台构建过程也很有帮助。
问题:开发团队如何管理为多个平台开发的复杂性?
答案:良好的回归测试。