Нужна помощь с MVC-шаблоном - PullRequest
1 голос
/ 26 апреля 2011

Я только начал читать о шаблоне MVC, и я не понимаю его полностью.

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

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

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

(из http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)

И

Модель. Модель управляет поведением и данными домена приложения, отвечает на запросы информации о его состоянии (обычно из представления) и отвечает на инструкции по изменению состояния (обычно из контроллера).

Представление. Представление управляет отображением информации.

Контроллер. Контроллер интерпретирует вводимые пользователем данные с клавиатуры и мыши, информируя модель и / или представление о необходимости изменения.

(из http://msdn.microsoft.com/en-us/library/ff649643.aspx)

Мне кажется, я понимаю, что такое Модель и Вид, однако я не понимаю контроллер. Из текста, который я прочитал, и некоторых примеров, которые я видел, контроллер получает информацию от пользователяЯ видел примеры, такие как (в Java): контроллер представляет собой JOptionPane, который получает число в градусах Фаренгейта от пользователя. Затем задницаигнорировать и преобразовать его в модель и показать результат в командной строке.Я не понимаю, почему контроллер принимает входные данные таким образом?

В Ruby on Rails у меня есть модель, которая хранит данные, контроллер, который отображает различные представления и делает "вещи" на входе, который был получен вПросмотр.

Ответы [ 5 ]

2 голосов
/ 26 апреля 2011

Проще говоря,

Вид - отвечает за отрисовку или рендеринг информации из Модели

Модель - отвечает за вашу бизнес-логику и хранит состояние вашего приложения

Контроллер - отвечает за интерпретацию действий пользователя и вызов необходимых событий в Модели и информирование Представления об обновлении себя (при необходимости).

Вид должен отвечать только за рисование / рендеринг, поэтому он не должен знать о том, какие события должны происходить при взаимодействии пользователя. Модель должна интересовать только бизнес-логику и данные. Он не должен ничего знать о View. Таким образом, контроллер связывает эти две части вместе, что позволяет многократно использовать модель и позволяет использовать несколько представлений для одной модели (например, представление для мобильных устройств / ТВ / Интернет одной модели данных).

В веб-мире ваш Контроллер - это часть, которая получает ваши входные данные HTTP, ваш View - это ваш HTML / JSP-код, а ваш Controller - это сервлет (или эквивалентный фреймворк), который действует на HTTP-запрос для выполнения необходимых бизнес-операций. модель.

0 голосов
/ 26 апреля 2011

Поле ввода (например, JTextField) является частью представления, логика которого определяет, что делать с тем, какие события взаимодействия (ввод символа, потеря фокуса, нажатие кнопки ...) находятся в контроллере.

Как и в вашем примере, логика контроллера МОЖЕТ находиться в том же классе, что и представление.Это будет иметь место, если вы расширяете JOptionPane, а также реализуете ActionListener, чтобы JOptionPane мог реагировать на события JTextField. НО это явно не рекомендуется, если вы хотите установить четкий шаблон MVC, так как вы бы смешали код вида и контроллера.

0 голосов
/ 26 апреля 2011

Контроллер в основном принимает взаимодействие с пользователем и, используя какое-то отображение, инициирует ответ, вызывая модель.Модель будет иметь бизнес-логику для манипулирования данными.Как только контроллер получит ответ от модели, контроллер передаст модель представлению, отобразит интерфейс для просмотра и взаимодействия с пользователем (в зависимости от модели).

В Ruby on Rails у меня естьмодель, в которой хранятся данные, контроллер, который отображает разные представления и выполняет «вещи» на входе, полученном в представлении.

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

0 голосов
/ 26 апреля 2011

Представьте себе очень простое приложение: одну модель (Java-бин), которая отражает таблицу базы данных, диалог с метками и текстовыми полями для отображения всех значений и волшебную кнопку для обновления содержимого.

Контроллер теперь имеет логику для обновления текстовых полей новыми значениями после , когда пользователь нажал (или нажал ) виджет кнопки.

В этом простом случае:

 Model:      Java bean (fields, getters, setters)
 View:       frame with txtfields, labels and a button widget
 Controller: logic to tell the model to update itself, update the textfields and tell 
             the view to refresh

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

КСТАТИ: В представлении и контроллере реализован классический шаблон стратегии: vew - это объект, для которого настроена стратегия (Head First Design Patterns, стр. 532)

0 голосов
/ 26 апреля 2011

Как уже указывает название controller , контроллер интерпретирует входные данные и координирует / контролирует связь между моделью и представлениями, то есть сначала запускает обновление модели, а затем (если представления не непосредственно наблюдать за моделью) уведомить мнение об изменении модели, чтобы они могли сами обновиться.

...