1

我正在创建一个 [Iron]Ruby 项目,该项目需要支持多种环境(更具体地说,是 WPF、Silverlight 和 WinForms——但这并不重要)。以下是我陷入困境的实际具体示例:

我必须实现一个Bitmap类作为库的一部分,并且这个类需要根据它运行的环境以不同的方式实现(例如,如果我在浏览器中将它作为 silverlight 应用程序运行,我将无法访问到桌面上可用的方法)。这里有一个问题——我不控制 的实例化Bitmap,也不控制库中的任何其他类。为什么?因为它是另一个应用程序的端口;而且,虽然我确实有应用程序的代码,但我不想通过更改该代码来破坏兼容性。但是,我确实require控制应用程序的入口点,因此我可以根据需要执行设置、配置全局变量等。

编辑:如果你好奇,这是我正在做的项目:http: //github.com/cstrahan/open-rpg-maker

这是我想知道的:

  1. 我应该如何在启动时设置配置,以便 Bitmap 能够正常运行?
  2. 我应该如何在我的 git repo / 源代码树中构建它?

以下是我的一些想法,但我相信你会有更好的想法:

  1. 我应该如何在启动时设置配置?
    • 分发应用程序时,require根据目标环境将 a 放在顶部,如下所示:require silverlight/bitmap. 在这种情况下,lib/bitmap.rb将为空,而lib/silverlight/bitmap.rb将包含实现。或者...
    • 将所有实现填充在 中lib/bitmap.rb,并根据类实例变量或常量有条件地执行:Bitmap.impl = "silverlight"或者...
    • 为每个发行版维护一个单独的分支 - 尽管库几乎完全相同。
  2. 我应该如何在我的 git repo / 源代码树中构建它?
    • 每个分布单独的分支。或者...
    • 分离特定于实现的子文件夹(例如lib/silverlight/bitmap.rb)。

作为 Ruby 的新手,我对这样的最佳实践不是很熟悉(我来自 C#)。任何建议将不胜感激!

-查尔斯

4

0 回答 0