Xwab
Форумыnavigate_nextОбщение

MVC объясните ..
Сообщения
IceJOKER

в чем разница между контроллером и моделем?
ну никак не могу понять.

вьюва - ну ясное дело, а вот разница между C и M не могу найти.
разбирал разные фреймворки, даже знаю кохану, но как я понял оттуда, то - в моделе ты описываешь какой то блок кода, который вызывает контроллер..

Давайте представим страницу вывода всех пользователей из базы данных.

Сама страница вывода aka шаблон - view

блок с запросом поользователей из базы и их возвращение - модель

а контроллер тупо вызывает его

^^
Так ли? или если можете, объясните по своему, а не книжными словами(материалами).

p.s. не знал где создать тему, если не там, то плиз перенесите

05 Апр 2013, 20:08
Okula

IceJOKER, даже если посмотреть на блок схемы реализации MVC станет ясно, что за что отвечает.

05 Апр 2013, 20:26
IceJOKER

Okula, как раз после вопроса вбил в гугл и эта первая картина которая попалась ))

вроде я все понимал оказывается правильно , то есть контроллер контроллирует весь процесс, вьюв - вывод данных, а модель - ..... отвечает за запрос каких либо данных и передачу их в контроллер.


меня смущает тот момент, что модель мог бы выполнить и функции контроллера ..

05 Апр 2013, 20:34
Okula

Контроллер связывает модель с представлением и в зависимости от ситуации подгружает ту или иную модель.

05 Апр 2013, 20:41
IceJOKER

Okula, то есть это некий путеводитель .

ты запросил это - иди туда
а ты запросил вот это - ты иди воон туда
а вот этот запросил совсем не то - иди нафиг

ну в общем у меня осталось тоже самое мнение, как я себе все это представлял ))

05 Апр 2013, 20:42
wapmorgan

Лично я модели использую в следующих случаях:
1. работа с базой / формами(пошло из yii)
2. куски кода, которые можно совершенно безопасно использовать в другом проекте
По сути, модель - это данные, и некоторые базовые методы работы с ними (получение, обработка, форматирование). А в контроллерах я реализую более высокоуровненые действия. Модель может лишь записывать/извлекать данные, работать со связанными моделями (обновлять данные); контроллер может работать с api, предоставляемыми фреймворком, со сторонними библиотеками, с несвязанными моделями.

05 Апр 2013, 20:49
san

Эм. Окай. Давайте лучше возьмем вариант посложнее. Например... создание фала в загруз-центре.
У тебя будет контроллер аля FileController. У него будет несколько экшнов: index -вывод списка, show - показ конкретного файла, new - форма создания, edit - форма редактирования. (еще будут эшны без вьюх аля create, update, destroy).
И будет модель File... да, для вывода списка ты мог бы диспатчером дернуть сразу index view, а в ней выбрать File.all и вывести.
Но, давай представим что, файл может добавить не каждый пользователь, а только аутентифицированные. У тебя появляется логика аутентификации. Куда ты вставишь работу с сессией? В диспатчер? А он может только дергать нужный контрол и действие. В вьюшку? Там нельзя логику делать, тем более такую низкоуровневую) Уже нужно что-то между диспатчером и вьюхой. А если тебе нужно на index отсортировать все данные или произвести поиск? Где ты будешь фильтровать данные от пользователя и составлять запрос к модели? Во вьюшке?)
А теперь представим, что у тебя файл имеет много скриншотов.. у тебя добавляется связь 1*N и модель Screenshot. И ты можешь выбрать скриншот из загруженных тобой файлов.
Твоя вьюха расползается уже на обработку запросов к двум моделям и твой стройный шаблон превращается в кашу.
А потом мы добавляем одминку и разделяем права... К примеру одмин может изменить владельца файла, а владелец и другие пользователи - нет. Где ты это будешь проверять?)
Или, например, перед вызовом new и show тебе нужно вызвать какой-то метод, которые сделает какую-нибудь магию. Лезть в диспатчер? Нельзя! код во вьюхах? А точно ли это вьюхи тогда?)

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

06 Апр 2013, 23:50
IceJOKER

san, ни хрена себе объяснение % ) даже то что знал чуть ли не забыл пока читал это ))
а так спасибо конечно )

19 Апр 2013, 9:51
Ответить на тему