2010-04-26 3 views
10

Плохая привычка работать с несколькими моделями в одном действии контроллера? Должно ли оно всегда быть как один контроллер - один вариант модели?PHP и MVC, несколько моделей

+1

Отличный вопрос! Жаль, что никто не заботится о таких вопросах! – Sliq

ответ

11

Нет, конечно, это не плохая привычка. Там, где вы работаете с несколькими таблицами, вам понадобятся различные модели.

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

Не каждый проект - простой блог! :)

Редактировать: Я также должен сказать, что такая вещь является одной из моих главных проблем с каркасами MVC в целом. Компромисс между тем, что ваш проект пытается достичь, и то, что позволяет инфраструктура, всегда будет там, где волосы потеряны, а поздние ночи вложены.

+0

Спасибо за быстрый ответ! – PPPHP

+0

На мой взгляд, большая часть вашего кода должна быть в ваших моделях, из которых будет много классов. Определенно не взаимно однозначное сопоставление между моделями и контроллерами. Это было бы плохо. – d11wtq

+0

Да, все любят толстые модели :) – dmp

4

Я не мог представить, что можно работать только с одной моделью вовремя. Эти базы данных называются «реляционными базами данных» по определенной причине. Все таблицы взаимодействуют друг с другом.

Я фактически использовал фреймворк, который позволял загружать только одну модель, которая была связана с этим контроллером. Определенно ужасный опыт, единственными работами, которые работали, были основные действия CRUD.

+0

Спасибо за быстрый ответ! – PPPHP

1

Как все говорят, вы свободны делать то, что хотите. Я бы предложил посмотреть сайт для используемой структуры и посмотреть, как другие люди ее используют. У них часто есть «Проекты с использованием XXXX Framework».

И, как комментарий troelskin, 1 таблица не всегда равна одной модели. Некоторые примеры, использующие базовый шаблон активной записи (например, CodeIgniter), как правило, относятся к методу модели 1 таблицы 1.

2

Нет, это не плохая практика.

Контроллеры сопоставляются с ресурсами HTTP (иначе URI) больше, чем с вашими моделями данных. Запрос на определенный ресурс (пользователи, продукты, ...) часто может потребовать загрузки и/или хранения данных из/в разных местах (таблица БД, файловая система, удаленная веб-служба ...), поэтому Контроллер 1: 1: сопоставление моделей, вероятно, является скорее исключением, чем правилом. Если ваш сайт действительно простой.

Смежные вопросы