我希望用Ruby开发一个桌面应用程序。然而,我希望在每个平台上都有本地GUI(而不是跨平台GUI工具包,在所有平台上都看起来一样糟糕)。
我预计需要为每个平台做出不同的GUI(因为它不仅仅是外观,还涉及行为和习惯的差异),但我想知道我的选择是什么?特别是想知道是否有一种清晰的方法来分离前端和后端并正确地绑定数据?
目标平台包括Windows(Vista和7,XP是额外加分项)、Mac OS X(Cocoa)和Linux(GTK?Qt?不确定)。
我希望用Ruby开发一个桌面应用程序。然而,我希望在每个平台上都有本地GUI(而不是跨平台GUI工具包,在所有平台上都看起来一样糟糕)。
我预计需要为每个平台做出不同的GUI(因为它不仅仅是外观,还涉及行为和习惯的差异),但我想知道我的选择是什么?特别是想知道是否有一种清晰的方法来分离前端和后端并正确地绑定数据?
目标平台包括Windows(Vista和7,XP是额外加分项)、Mac OS X(Cocoa)和Linux(GTK?Qt?不确定)。
两种跨平台技术
事实证明,有两种跨平台UI工具包。
一种是自己绘制控件,就像你所说的,在所有平台上看起来都很糟糕。更糟糕的是:它在除一个平台外的所有平台上看起来都不协调。
但还有另一种只提供本地小部件的协调接口的工具包。这种工具包的最佳例子是SWT1.。它在每个平台上看起来几乎完全本地化,但只有一个API。
因此,您不应该简单地排除所有跨平台工具包,只排除伪造本地UI的工具包。
开发包装器接口
还有第二种方法。如果您的程序与用户的界面可以通过相对较窄的接口进行交互,那么您只需为要支持的每个平台开发其底层部分即可实现该接口。是的,您必须重写一个模块,但所有其他模块保持完全相同,而且您还可以获得本地小部件。您还可以获得最小的可执行文件,而没有大量的膨胀。
也许最重要的是,您没有复杂和不透明的软件层在代码和本地窗口系统之间。您可能会节省与编写第一个端口的额外模块相同的调试时间。
1. 我知道我的Java示例对您没什么帮助,除非您使用jRuby,但SWT vs Swing是正确vs错误(在我看来)UI工具包分歧的真正纯粹的例子。