MVC для чайников: почему контроллер должен отправлять что-либо для просмотра? - PullRequest
4 голосов
/ 22 декабря 2010

Если я правильно понял, то функция Контроллера обрабатывает POST-данные и технически вносит изменения в состояние приложения (например, DB) с помощью Model.

Насколько я понимаю, View также получает данныеиз модели.

Так вот как я понимаю рабочий процесс:

Запрос клиента -> App Front Controller -> (если метод = POST -> Controller) -> View -> обратно к клиенту

Здесь Model используется Controller для чтения и записи данных и View для чтения данных.

Таким образом, контроллер не являетсяфактически используется каждый раз, когда страница загружается, только когда данные приложения добавляются / обновляются.В большинстве случаев обойден контроллер.

Таким образом, почему почти каждый ресурс о MVC говорит о том, что контроллер отправляет данные в представления?

Я пытаюсь написать приложение, используя шаблон, подобный MVC.,Так что в моих представлениях приложения всегда получают данные для страницы из модели.Когда Модель обновляется, я добавляю определенное время обновления модели в Memcache.Во время выполнения каждое представление просматривает время последнего обновления связанных моделей и генерирует кэш последнего времени для этого представления.Если модель была обновлена ​​до того, как был сохранен кэш, просмотрите кэш чтения, в противном случае выполняется повторное рендеринг на основе обновленной модели.

Ответы [ 7 ]

13 голосов
/ 22 декабря 2010

Контроллер отвечает за представление представлений на основе запрошенных данных.Это так, поэтому ни модель, ни представление не должны знать о запросе.Да, представление получает данные из модели, но не всегда напрямую;Контролеру, возможно, придется также принять некоторые решения в зависимости от запроса.

Это похоже на работу официантов в ресторане, чтобы они могли принимать заказы и подавать блюда клиентам.Это не повара, которые готовят блюда после их приготовления;это официанты.Это не клиенты, которые ходят на кухню с просьбой о еде;это официанты, которые принимают их заказы, а затем дают поварам знать, к чему готовиться.Точно так же контроллер для обработки клиентских запросов, какой бы ни была их природа.Это очень грубое сравнение, но я надеюсь, что вы получите картину.

2 голосов
/ 22 декабря 2010

Если я неправильно истолковал ваш вопрос: проблема в том, что представление напрямую обращается к модели.Это не должно происходить, поскольку это побеждает причину паттерна MVC.Представление не должно ничего знать о самой модели, поэтому модель можно заменить на что-то другое - контроллер должен предоставить данные (чаще всего это сплющенный или спроецированный путь) представлению.Я сделал: контроллер никогда не обходится.Тот факт, что он ничего не делает с данными, не означает, что он не нужен - он обеспечивает уровень абстракции между моделью и представлением.Смысл в том, чтобы иметь возможность менять модель без необходимости настраивать вид.

1 голос
/ 22 декабря 2010

alt text

1 голос
/ 22 декабря 2010

Если вы человек, который учится быстрее, набирая руки грязными кодами или глядя на что-то визуальное, как я ....

Я предлагаю вам следовать руководству на railsforzombies.org . Это в значительной степени объясняет все основное использование рельсов, включая MVC. В уроке упоминается, что если вы рассмотрите всю эту логику, это будет грязно. Код немного подойдет, потому что парни, которые хотят использовать ваш код, будут перепутаны с кодами. Поместив всю логику в контроллер, выведите ее на экран. Человеку, который изучит ваши коды, будет очень ясно.

1 голос
/ 22 декабря 2010

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

По своей сути MVC используется для разделения проблем. Модель работает с данными, представления обрабатывают представление, а контроллер обеспечивает логику между ними.

0 голосов
/ 22 декабря 2010

MVC для чайников: почему контроллер есть что-нибудь для просмотра?

Это основной смысл MVC: создавать слабую связь, разделяя и выделяя проблемы приложения. У вас есть View, Model и Controller, выполняющие определенные задачи.

Зачем нужно разделение, потому что трудно отладить и исправить одно гигантское приложение годзиллы. Представьте себе починку автомобиля из камня. Там нет болтов. Все вырезано из большой скалы. Как трудно это исправить, если вы просто хотите поменять колеса. Вам нужно будет высечь саму скалу.

Основная задача контроллера заключается в обработке запросов и отображении соответствующего представления. Это работа. Это все равно, что спросить, почему почтальон должен отправлять почту. Потому что это его работа.

0 голосов
/ 22 декабря 2010

Обычно контроллер использует Модель и передает обработанные данные в View. Вид не должен видеть модель. Основная цель - сохранить вид отдельно от модели!

...