Ruby: нацеливание на несколько платформ в одном проекте - PullRequest
1 голос
/ 12 февраля 2010

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

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

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

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

  1. Как настроить конфигурацию при запуске, чтобы растровое изображение работало надлежащим образом?
  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

...