Иерархический MVC в Rails 3?
Я читал о HMVC (контроллер представления иерархической модели) и его гибкой структуре.
Посмотрите на эту картинку:
http://techportal.inviqa.com/wp-content/uploads/2010/02/MVC-HMVC.png
Интересно, являются ли плагины Rails 3 ответом на HMVC в Rails 3?
РЕДАКТИРОВАТЬ: Почему я не могу начать щедрость на этом? Нет кнопки щедрости, ошибка?
4 ответа
На основании комментариев к ответу Тоби кажется, что вы хотели бы иметь возможность использовать приложения MVC в качестве компонента в новом приложении. Rails Engines (см. http://rails-engines.org/) обеспечивает эту функциональность. Вы просто устанавливаете гем движков и помещаете приложения в vendor / plugins, и все его модули / views / controller доступны.
Это на самом деле не соответствует HMVC, где контроллеры в новом приложении делегируют другим контроллерам. Но, как и Тоби, я не вижу в этом преимущества.
Что хорошо в подходе Engines, так это то, что вы можете перебрать любую из моделей в плагине, просто добавив версию модели в новую папку приложения / модели приложения (то же самое относится и к представлениям и контроллерам).
Я переопределил приложение / views / layouts, чтобы придать моему приложению / плагину аутентификации такой же внешний вид, как и приложению, в которое оно включено.
Для Rails 3 Railtie занимает место движков и официально поддерживается (и фактически используется - Action Mailer - плагин Railtie. Хотя я сам еще не использовал его.
Проверьте это на http://edgeapi.rubyonrails.org/classes/Rails/Railtie.html
Хорошая запись об этом также здесь http://www.igvita.com/2010/08/04/rails-3-internals-railtie-creating-plugins/
У Rails давно есть плагины.
Я сомневаюсь, что есть техническая причина, по которой контроллер не может передать другому контроллеру, передавая объект запроса по цепочке. Я просто не знаю, что вы получаете от этого - диаграмма выглядит как спагетти.
Для меня это злоупотребление MVC. Я хотел бы предложить, что гораздо проще и удобнее обслуживать логику в модели и классы более низкого уровня и создать единый контроллер, который стоит перед этой логикой, а не создавать цепочку контроллеров.
В своем блоге, посвященном Rails 3, DHH упомянул проект Cells. Я не использовал это, но я собираюсь проверить это.
Пример корзины хорошо показывает, как такая функциональность может очистить код вашего приложения. Код, который извлекает данные, должен быть размещен где-то в контроллере. В каждом действии или в фильтре перед. Ячейка кажется намного лучшим решением.
Пожалуйста, посмотрите на это сообщение на rubyonrails: https://groups.google.com/forum/