В разработке игр, является ли контроллер в MVC исключительно для работы с пользовательским вводом? - PullRequest
3 голосов
/ 10 декабря 2008

Я прочитал противоречивые вещи по этому поводу.

Из Википедии:

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

Это слово ТИПИЧНО сбивает с толку. Если не просто пользовательский ввод, то что еще?

Ответы [ 6 ]

3 голосов
/ 10 декабря 2008

Я рассматриваю контроллер как Координатор , большая часть моего кода обычно находится в контроллере. Здесь происходит большинство ветвей. В представлении или модели большая часть вашего кода будет иметь дело с самим собой (объект данных ничего не знает об объекте представления). Однако контроллер сопоставляет объект данных (модель) с объектом представления, поэтому я думаю о нем как о координаторе .

Общий «тест», который можно применить к их заявке, чтобы проверить, достаточно ли они соответствуют MVC: разве очень легко перенастроить ваше приложение? (Измените представление, не переписывая весь код).

Не попадайтесь на все религиозные дебаты и жесткие «правила», окружающие MVC, продукт, который зарабатывает деньги, только следуя 80% «правил» MVC, лучше, чем продукт, который еще не сделан и слишком комплекс на самом деле работает правильно ...

2 голосов
/ 10 декабря 2008

Контроллер отвечает за управление потоком приложений. Он обрабатывает запросы, объединяет соответствующие модели / представления / помощники и при необходимости выдает ответ.

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

2 голосов
/ 10 декабря 2008

Нет. В классической схеме контроллер может получать входные данные из любого источника. Для веб-платформ MVC, таких как Ruby / Rails или ASP.NET MVC, контроллер получает свои данные из параметров запроса и формы.

Больше информации о MVC на http://en.wikipedia.org/wiki/Model-view-controller

РЕДАКТИРОВАТЬ : когда я говорю входные данные из любого источника, я имею в виду приложение, которое может иметь графический интерфейс пользователя и другие интерфейсы для входных источников, скажем, подсистему датчика, которая взаимодействует с контроллером для обновления модель.

РЕДАКТИРОВАТЬ : на основании вашего обновления контроллер может реагировать на сетевые события, если игра была многопользовательской интернет-игрой. Они не будут обрабатываться контроллером для пользовательского устройства ввода.

0 голосов
/ 10 декабря 2008

Не обязательно. Контроллер может обрабатывать вводимые пользователем данные, обновлять вашу модель и, возможно, принять решение о прямом возвращении результата JSON или даже сгенерированного динамически изображения вместо страницы просмотра.

Контроллер также может определять поток страниц. Пользователь нажимает ссылку "моя учетная запись" на вашем веб-сайте, но еще не вошел в систему, поэтому он перенаправляется на страницу входа. После успешного входа в систему контроллер может решить перенаправить их обратно на страницу «Моя учетная запись» с помощью параметра запроса ReturnUrl или нет.

Вы также можете добавить логику проверки в свой контроллер, но я бы не предложил этот подход для более крупных проектов. Эта логика принадлежит вашей модели.

0 голосов
/ 10 декабря 2008

Нет, его следует использовать для ВСЕХ взаимодействий между моделью и видом (экран пользовательского интерфейса). Это включает в себя отображение данных на экране пользовательского интерфейса (обновление экрана), полученных из модели, а также реагирование на вводимые пользователем данные. / взаимодействия с экраном UI ...

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

0 голосов
/ 10 декабря 2008

Я вызываю проверку и дезинфекцию пользовательской части представления.

Я называю контроллер логикой, которая принимает проверенные, очищенные данные и работает с ними. Таким образом, вы можете написать тестовый жгут, который выступает в качестве представления, который передает данные в контроллер и тестирует результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...