Иерархический 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/

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