Обычно я реализую MVC следующим образом:
Просмотр - получает данные от контроллера и генерирует выходные данные. Обычно здесь должна отображаться только логика отображения. Например, если вы хотите взять существующий сайт и создать его версию для мобильных устройств / iPhone, вы можете сделать это, просто заменив представления (при условии, что вам нужна та же функциональность).
Модель - Оберните доступ к данным в моделях. В моих приложениях все SQL живут на уровне модели, прямой доступ к данным в представлении или контроллере запрещен. Как указывает Эли в другом ответе, идея в том, чтобы (хотя бы частично) изолировать ваши контроллеры / представления от изменений в структуре базы данных. Модели также являются хорошим местом для реализации логики, такой как обновление даты «последнего изменения» при изменении поля. Если основным источником данных для вашего приложения является внешний веб-сервис, подумайте, стоит ли включать его в класс модели.
Контроллеры - Используются для склейки моделей и видов. Реализуйте здесь логику приложения, проверяйте формы, передавайте данные из моделей в представления и т. Д.
Например, в моих приложениях при запросе страницы контроллер извлекает все данные, которые требуются от моделей, и передает их в представление для создания страницы, которую видит пользователь. Если эта страница была формой, форма может быть отправлена, контроллер выполняет проверку, создает необходимую модель и использует ее для сохранения данных.
Если вы будете следовать этому методу, в конечном итоге Модели будут достаточно универсальными и пригодными для повторного использования. Ваши контроллеры имеют управляемый размер и сложность, потому что доступ к данным и их отображение были удалены для моделей и представлений соответственно, и ваши представления должны быть достаточно простыми, чтобы дизайнер (с небольшим обучением) мог их понять.