Ruby: нацеливание на несколько платформ в одном проекте

Я создаю проект [Iron]Ruby, который должен поддерживать несколько сред (в частности, WPF, Silverlight и WinForms - но это не так важно). Ниже приведен конкретный пример того, где я застрял:

Я должен реализовать Bitmap класс как часть библиотеки, и этот класс должен быть реализован по-разному, в зависимости от того, в какой среде он работает (например, если я запускаю это в браузере как приложение Silverlight, у меня не будет доступа к методам, которые будут доступно на рабочем столе). И вот подвох - я не контролирую создание Bitmap Ни один из других классов в библиотеке. Зачем? Потому что это порт другого приложения; и, хотя у меня есть код для приложения, я не хочу нарушать совместимость, изменяя этот код. Я, однако, контролирую точку входа в приложение, поэтому я могу require все, что мне нужно, выполнить настройку, настроить глобальные переменные и т. д.

Изменить: Если вам интересно, это проект, над которым я работаю: http://github.com/cstrahan/open-rpg-maker

Вот что я хочу знать:

  1. Как мне настроить конфигурацию при запуске, чтобы Bitmap работал правильно?
  2. Как мне структурировать это в моем дереве git repo / source?

Вот некоторые из моих мыслей, но я уверен, что у вас будут лучшие идеи:

  1. Как мне настроить конфигурацию при запуске?
    • При распространении приложения, поместите require вверху, в зависимости от целевой среды, например: require silverlight/bitmap, В этом случае, lib/bitmap.rb будет пустым, в то время как lib/silverlight/bitmap.rb будет содержать реализацию. Или же...
    • Наполните все реализации в lib/bitmap.rb и условно выполнить на основе переменной или константы экземпляра класса: Bitmap.impl = "silverlight", Или же...
    • Поддерживайте отдельную ветку для каждого дистрибутива - несмотря на то, что библиотека практически одинакова.
  2. Как мне структурировать это в моем дереве git repo / source?
    • Отдельные ветви для распределения. Или же...
    • Отдельные зависящие от реализации подпапки (например, lib/silverlight/bitmap.rb).

Будучи новичком в Ruby, я не очень хорошо знаком с такими лучшими практиками (я из C#). Любой совет будет принята с благодарностью!

-Charles

0 ответов

Другие вопросы по тегам