Какова работа контроллера в MVC?

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

model.php подключается к базе данных и получает сообщение. view.php просто отобразит сообщение.

model.php

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

model.php подключается к базе данных и получает сообщение. view.php просто отобразит сообщение.

model.php

[110]

view.php


Я установил для своего браузера значение http: //whwhathost/view.php? Id = 5

Это загружает пост с идентификатором 5. Мне не нужен контроллер здесь. Так что я запутался, зачем вам контроллер?

Примечание: объясните, пожалуйста, со ссылкой на приведенный выше пример. Я не увлекаюсь программированием, и изучение таких вещей, как CakePHP и т. Д., Является для меня ошеломляющим.

Редактировать: было бы здорово, если бы вы добавили controller.php к приведенному выше коду. Это помогло бы мне понять роль контроллера и то, как он взаимодействует с моделью и представлениями.

POST['id'] . "'"); $row = mysql_fetch_array($result); $post = $row["post"]; mysql_close($db); ?>

view.php


Я установил для своего браузера значение http: //whwhathost/view.php? Id = 5

Это загружает пост с идентификатором 5. Мне не нужен контроллер здесь. Так что я запутался, зачем вам контроллер?

Примечание: объясните, пожалуйста, со ссылкой на приведенный выше пример. Я не увлекаюсь программированием, и изучение таких вещей, как CakePHP и т. Д., Является для меня ошеломляющим.

Редактировать: было бы здорово, если бы вы добавили controller.php к приведенному выше коду. Это помогло бы мне понять роль контроллера и то, как он взаимодействует с моделью и представлениями.

8
задан Cracker 17 January 2010 в 09:51
поделиться

3 ответа

Вам не нужен контроллер, потому что ваш пример тривиален. Пример из реального случая:

Предположим, у вас есть CAD-приложение. CAD-приложение организовано как MVC. У вас есть:

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

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

Конечно, можно сказать, почему тогда не создается вид, создающий объекты команды? Ну, никто вам этого не запрещает, но в конечном итоге логика представления смешивается с логикой работы. Это идет вразрез с хорошим дизайном, хотя в самых тривиальных случаях с таким дизайном можно было бы жить. Например, если ваше CAD-приложение позволяет отображать список объектов как в виде 3D-представления, так и в виде списка объектов, и вы можете удалить оба вида, то вы ясно видите, что либо оба вида реализуют одну и ту же логику для работы с шаблоном команд (плохой дизайн), либо они просто направляют одно и то же сообщение на общий контроллер (хороший дизайн, MVC).

14
ответ дан 5 December 2019 в 06:23
поделиться

IMHO в MVC контроллер имеет два основных целя :

  1. Живовида графической логики или что-то за триггеры GUI. В большинстве случаев вы можете написать модульные тесты для контроллера относительно простым, для GUI намного сложнее, например, формы PHP или Windows. Первый зависит от браузера, чем позже зависит от сообщений Windows, оба не проще, когда вы пишете тесты подразделения. Это почти одинаково с любыми другими технологиями слоя презентации.
  2. Взаимоотносимость из слоя презентации или (в некоторых случаях) контроллер. Существуют сценарии, где вы можете использовать тот же контроллер в двух группе («свет» для специального случая и «богатую» форму для другого случая), либо наоборот (не так часто).

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

0
ответ дан 5 December 2019 в 06:23
поделиться

model.php is в данном случае вы управляете.

Роли модели, вида и контроллера нелегко различить, если у вас нет хорошего MVC фреймворка (простой PHP - не очень хороший).

Модель - это ваша структура данных, которая сделана постоянной в БД. С точки зрения кода, если в основном состоит из структуры данных как класса.

Вид просто отображает данные. В основном html с некоторыми тегами скриптинга.

Контроллер управляет тем, что происходит. Например, пользователь редактирует сообщение. Данные принимаются контроллером, могут быть немного изменены (добавлены метки времени, пользователи ip) и отправлены в модель для хранения. Затем контроллер решает, какой вид отобразить следующим и какие данные взять для нового вида.

Просто небольшой пример.

1
ответ дан 5 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: