2010-04-15 5 views
2

Я хотел бы разработать ряд нетривиальных приложений Rails, которые реализуют основной набор функциональных возможностей, но каждый из них имеет определенные настройки, расширения и эстетические различия. Как я могу вытащить основные функции (модели, контроллеры, помощники, классы поддержки, тесты), общие для всех этих систем, таким образом, чтобы обновление ядра принесло пользу каждому приложению на его основе?Как я могу абстрагироваться от основной функциональности нескольких приложений Rails?

Я видел Rails Двигатели, но они кажутся слишком отстраненными, почти слишком абстрагируемыми, чтобы их можно было использовать. Я могу показаться, что они полезны для добавления одного компонента в существующее приложение, например, привязки движка блога к существующему сайту электронной коммерции. Поскольку двигатели, по-видимому, в основном автономны, кажется сложным и неудобным переопределять их функциональность и представления при сохранении DRY.

Я также рассмотрел абстрагирование кода на драгоценный камень, но это кажется немного странным. Я заставляю жемчужину зависеть от драгоценных камней Rails, а также определить модели контроллеров &, а затем подклассифицировать их в разных приложениях? Или я могу определить многие модули внутри драгоценного камня, которые я включаю в разные места внутри моих различных приложений? Как проверить жемчужину, а затем проверить набор настроек и переопределенные функции поверх него? Я также обеспокоен тем, как я буду разрабатывать Gem и Rails-приложения в тандеме, могу ли я создать git-хранилище жемчужины в приложении и оттолкнуться от этого, поэтому мне не нужно создавать новый камень на каждой итерации? Кроме того, есть ли частные жемчужины/я могу установить собственный источник драгоценных камней?

Также любые общие предложения для такого рода обязательств? Абстракционные парадигмы придерживаться? Требуется чтение? Комментарии от мудрых, кто сделал это раньше? Благодаря!

ответ

1

Никогда не сделал такую ​​вещь, но я предполагаю, что плагин Rails будет правильным местом для этого:

http://guides.rubyonrails.org/plugins.html#models

http://guides.rubyonrails.org/plugins.html#controllers

http://guides.rubyonrails.org/plugins.html#helpers

И вы можете создать камень из них впоследствии:

http://guides.rubyonrails.org/plugins.html#plugingems

+0

Плагин действительно был бы самым простым способом ... – severin

+0

Можете ли вы попытаться объяснить, как я буду открывать (или подкласс, если повторное открытие невозможно) классы, определенные в моем плагине внутри приложения? Моя основная проблема заключается в совместном использовании кода между плагином и приложением, где говорят, что нормальное поведение модели определено в плагине, но приложение переопределяет только несколько методов. Если я определяю модель в приложении, Rails сначала смотрит туда, находит класс, который он ищет, и определяет отсутствующую константу. Rails никогда не смотрит в плагин, а это означает, что ни одна из моих основных функций не приходит. – hornairs

Смежные вопросы