我正在创建一个 [Iron]Ruby 项目,该项目需要支持多种环境(更具体地说,是 WPF、Silverlight 和 WinForms——但这并不重要)。以下是我陷入困境的实际具体示例:
我必须实现一个Bitmap
类作为库的一部分,并且这个类需要根据它运行的环境以不同的方式实现(例如,如果我在浏览器中将它作为 silverlight 应用程序运行,我将无法访问到桌面上可用的方法)。这里有一个问题——我不控制 的实例化Bitmap
,也不控制库中的任何其他类。为什么?因为它是另一个应用程序的端口;而且,虽然我确实有应用程序的代码,但我不想通过更改该代码来破坏兼容性。但是,我确实require
控制应用程序的入口点,因此我可以根据需要执行设置、配置全局变量等。
编辑:如果你好奇,这是我正在做的项目:http: //github.com/cstrahan/open-rpg-maker
这是我想知道的:
- 我应该如何在启动时设置配置,以便 Bitmap 能够正常运行?
- 我应该如何在我的 git repo / 源代码树中构建它?
以下是我的一些想法,但我相信你会有更好的想法:
- 我应该如何在启动时设置配置?
- 分发应用程序时,
require
根据目标环境将 a 放在顶部,如下所示:require silverlight/bitmap
. 在这种情况下,lib/bitmap.rb
将为空,而lib/silverlight/bitmap.rb
将包含实现。或者... - 将所有实现填充在 中
lib/bitmap.rb
,并根据类实例变量或常量有条件地执行:Bitmap.impl = "silverlight"
。或者... - 为每个发行版维护一个单独的分支 - 尽管库几乎完全相同。
- 分发应用程序时,
- 我应该如何在我的 git repo / 源代码树中构建它?
- 每个分布单独的分支。或者...
- 分离特定于实现的子文件夹(例如
lib/silverlight/bitmap.rb
)。
作为 Ruby 的新手,我对这样的最佳实践不是很熟悉(我来自 C#)。任何建议将不胜感激!
-查尔斯