Подтвердить что ты не робот

Контроллер принадлежит к слою презентации?

Я слышал, что контроллер принадлежит слою презентации. Как это возможно?

Я думал, что:

  • для представления
  • модель для бизнес-логики
  • контроллер предназначен для управления логикой

Есть ли хорошая ссылка, чтобы доказать, что контроллер принадлежит уровню представления?

"Spring MVC используется для уровня представления": как мы можем использовать MVC только в уровне представления?

4b9b3361

Ответ 1

Уровень представления содержит представления и. Вы не должны допускать архитектуру MVC для архитектуры многоуровневого уровня (особенно трехуровневую архитектуру). В большинстве случаев Model/View/Controller не является основным дизайном веб-приложения, это всего лишь подмножество архитектуры многоуровневого уровня.

Взгляните на эту упрощенную схему (у вас могут быть DAO в выделенном уровне доступа к данным, но это не важно в этом сообщении):

Simplified layers

Spring MVC представляет собой инфраструктуру представления: он имеет дело с контроллерами и представлениями. Но почему "М" в Spring MVC? Просто потому, что, как и многие другие рамки представления, он, естественно, имеет дело с представлением модели/сущности ( "M" ). Это представление используется в ваших контроллерах, отображается в ваших представлениях, представлено в ваших формах и т.д. . Поэтому структура называется Spring MVC, даже если модель/сущность не является частью уровня предварительной оценки.

Я думаю, что это хорошее имя для этой Framework, потому что это действительно "MVC". Действительно, представление модели/объекта может быть:

  • direct: структура напрямую обрабатывает объект model/entity
  • косвенный: структура обрабатывает объект формы или DTO, который содержит информацию, связанную с одним или несколькими объектами.

Spring рекомендация заключается в непосредственном использовании объекта model/entity ( "M" ):

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

Вот почему я говорю, что структура очень ориентирована на "MVC", по сравнению с другими, такими как Struts, где вам нужно использовать разные объекты формы.

Некоторые интересные ссылки:

Ответ 2

Контроллер управляет логикой уровня представления. Для всего бизнес-кода, случаев использования транзакций, сохранения и т.д. Он обычно делегирует сервисный уровень.

Типичным способом выполнения этого является внедрение транзакционных сервисов как spring beans и встраивание этих spring beans в контроллеры. Типичный пример использования: createa new product:

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

Ответ 3

В значительной степени зависит от того, какой вкус MVC вы используете, и в какой среде вы его используете.

Например, ASP.NET MVC полностью является шаблоном пользовательского интерфейса, поэтому все три части являются частью презентации.

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

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