Ruby: нацеливание на несколько платформ в одном проекте
Я создаю проект [Iron]Ruby, который должен поддерживать несколько сред (в частности, WPF, Silverlight и WinForms - но это не так важно). Ниже приведен конкретный пример того, где я застрял:
Я должен реализовать Bitmap
класс как часть библиотеки, и этот класс должен быть реализован по-разному, в зависимости от того, в какой среде он работает (например, если я запускаю это в браузере как приложение Silverlight, у меня не будет доступа к методам, которые будут доступно на рабочем столе). И вот подвох - я не контролирую создание Bitmap
Ни один из других классов в библиотеке. Зачем? Потому что это порт другого приложения; и, хотя у меня есть код для приложения, я не хочу нарушать совместимость, изменяя этот код. Я, однако, контролирую точку входа в приложение, поэтому я могу require
все, что мне нужно, выполнить настройку, настроить глобальные переменные и т. д.
Изменить: Если вам интересно, это проект, над которым я работаю: http://github.com/cstrahan/open-rpg-maker
Вот что я хочу знать:
- Как мне настроить конфигурацию при запуске, чтобы Bitmap работал правильно?
- Как мне структурировать это в моем дереве git repo / source?
Вот некоторые из моих мыслей, но я уверен, что у вас будут лучшие идеи:
- Как мне настроить конфигурацию при запуске?
- При распространении приложения, поместите
require
вверху, в зависимости от целевой среды, например:require silverlight/bitmap
, В этом случае,lib/bitmap.rb
будет пустым, в то время какlib/silverlight/bitmap.rb
будет содержать реализацию. Или же... - Наполните все реализации в
lib/bitmap.rb
и условно выполнить на основе переменной или константы экземпляра класса:Bitmap.impl = "silverlight"
, Или же... - Поддерживайте отдельную ветку для каждого дистрибутива - несмотря на то, что библиотека практически одинакова.
- При распространении приложения, поместите
- Как мне структурировать это в моем дереве git repo / source?
- Отдельные ветви для распределения. Или же...
- Отдельные зависящие от реализации подпапки (например,
lib/silverlight/bitmap.rb
).
Будучи новичком в Ruby, я не очень хорошо знаком с такими лучшими практиками (я из C#). Любой совет будет принята с благодарностью!
-Charles