Rails и MVC метафоры - PullRequest
       26

Rails и MVC метафоры

3 голосов
/ 20 мая 2009

Я работаю над переписыванием своего приложения на основе того, что я узнал на RailsConf 2009. Я понимаю, что Модель, Контроллер и Вид связаны друг с другом. Однако, одна вещь, с которой я боролся, это «правильный» уровень для контроллера.

Если Модель Rails отображается (приблизительно) в таблицу базы данных ... И если Rails View отображает (примерно) страницу браузера ...

На что указывает контроллер Rails?

Ответы [ 6 ]

3 голосов
/ 20 мая 2009

Контроллер - это средство соединения моделей с представлениями с использованием логики, ограничений и условий вашего решения.

Итак, я полагаю, что это может соответствовать "мозгу" вашего решения.

1 голос
/ 20 мая 2009

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

Уровень контроллера в MVC отвечает за извлечение данных из модели и преобразование их в форму, готовую для просмотра их зрителем. Прекрасным примером этого являются три разные страницы, на которых все данные представлены в одинаковой (или очень похожей) форме, но отображаемые данные поступают из очень разных источников. В каждом из этих случаев может использоваться один и тот же код представления, однако контроллер - это тот, кто знает, как вызывать различные функции в модели, чтобы получить данные для отображения и поместить их в правильное имя коллекции, чтобы представление могло найти и отобразить это, , даже если представление на самом деле не знает, что отображает .

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

Если бы у вас была аналогия, я бы воспользовался ответом Майкла «Мозги».

1 голос
/ 20 мая 2009

Контроллер действительно не сопоставляется ни с чем в контексте, который вы ищете. Вы должны думать о контроллере как о клее, который вы используете, чтобы поместить модель в представление.

Модель выкладывает ваши данные.

Представление представляет представление данных.

Контроллер отвечает за принятие запроса и получение правильной модели и представления ... затем представление этого результата пользователю.

0 голосов
/ 20 мая 2009

Контроллер тесно связан с URL, особенно при использовании ресурсов RESTFUL.

Мне нравится воспринимать URL как интерфейс командной строки для вашего приложения.

0 голосов
/ 20 мая 2009

Контролером является менеджер или координатор. Думайте о моделях и представлениях как о двух разных группах внутри компании (возможно, отдел продаж и ИТ). Контролер - это человек, который сидит над этими двумя и гарантирует, что они хорошо играют вместе.

Сказав это, все эти метафоры будут в некотором роде ошибочны. Например, контроллер обычно гарантирует, что пользователь вошел в систему для страниц, которые требуют, чтобы пользователь вошел в систему. Это не вписывается в мою метафору или некоторые другие.

0 голосов
/ 20 мая 2009

Если вы ищете метафору для MVC, которая помогла мне немного упростить задачу, я подумал о таких вещах:

  • Модель - Ваш скелет (помогает структуре вещей)

  • Контроллер - Ваши мышцы (Помогает все двигаться и делать необходимые задачи)

  • Вид - Ваш внешний вид (Это то, как мир видит, что другие две части делают)

Это самый простой способ, которым я мог бы придумать себя, чтобы заставить себя «Получить это», надеюсь, это поможет. Опять же, The Controler в этой части «сопоставит» все, что делает работу для ваших приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...