複数の環境 (より具体的には、WPF、Silverlight、および WinForms ですが、それほど重要ではありません) をサポートする必要がある [Iron]Ruby プロジェクトを作成しています。以下は、私が立ち往生している場所の実際の具体的な例です。
ライブラリの一部としてクラスを実装Bitmap
する必要があります。このクラスは、実行中の環境に応じて異なる方法で実装する必要があります (たとえば、これを Silverlight アプリとしてブラウザーで実行している場合、アクセスできません)。デスクトップで利用できるメソッドに)。ここに問題があります。私は のインスタンス化Bitmap
も、ライブラリ内の他のクラスも制御しません。なんで?これは別のアプリケーションのポートであるためです。また、アプリケーションのコードはありますが、そのコードを変更して互換性を壊したくはありません。ただし、アプリケーションへのエントリ ポイントを制御しているので、必要なrequire
ことは何でも実行でき、セットアップを実行し、グローバル変数を構成できます。
編集:興味があるなら、これは私が取り組んでいるプロジェクトです: http://github.com/cstrahan/open-rpg-maker
知りたいことは次のとおりです。
- Bitmap が適切に動作するように、起動時に構成をどのように設定すればよいですか?
- git リポジトリ / ソース ツリーでこれをどのように構成すればよいですか?
以下は私の考えの一部ですが、もっと良いアイデアがあると確信しています。
- 起動時の構成はどのように設定すればよいですか?
- アプリを配布するときは
require
、対象の環境に応じて、次のように先頭に を配置しますrequire silverlight/bitmap
。この場合、lib/bitmap.rb
空にlib/silverlight/bitmap.rb
なりますが、実装が含まれます。または... - すべての実装を に詰め込み
lib/bitmap.rb
、クラス インスタンス変数または定数に基づいて条件付きで実行しますBitmap.impl = "silverlight"
。または... - ライブラリはほぼ同じですが、ディストリビューションごとに個別のブランチを維持します。
- アプリを配布するときは
- git リポジトリ / ソース ツリーでこれをどのように構成すればよいですか?
- ディストリビューションごとに別々のブランチ。または...
- 個別の実装固有のサブフォルダー (例:
lib/silverlight/bitmap.rb
)。
私は Ruby を初めて使用するので、そのようなベスト プラクティスにあまり詳しくありません (私は C# 出身です)。どんなアドバイスでも大歓迎です!
-チャールズ