Согласно Википедии :
Объект Controller - это объект не пользовательского интерфейса, отвечающий за получение или обработку системного события.
С Применение UML и шаблонов :
Какой первый объект за пределами пользовательского интерфейса первым получает и координирует («контролирует») системную операцию?
Контроллеры по всем направлениям - будь то в MVC или GRASP или Шаблоны EAA - все это для получения входных данных и реагирования на события.
Я понимаю это буквально: вспомните видеоигру контроллер .
Он реагирует на входные события - пользователь нажимает кнопки. Он не обязательно знает, что делать, когда вы нажимаете кнопку, но он по крайней мере получает событие.
Глядя на контроллер, можно легко понять, что такое системные события, то есть, на какие входы он реагирует и как пользователь взаимодействует с системой. На контроллере Nintendo очевидно, что системные события:
- Нажмите
A
- Нажмите
B
- Нажмите
X
- Нажмите
Y
- Нажмите
↑
- Нажмите
↓
- Нажмите
→
- Нажмите
←
- Нажмите
L
- Нажмите
R
Если бы мы взяли все эти события и построили программный контроллер для их обработки, это был бы контроллер MVC: все эти события связаны с физическим контроллером в том виде, как он представлен пользователю - это «представление», если вы будут. Но для большинства видеоигр существует второй уровень входных событий, где пуговицы кнопок соответствуют конкретным операциям системы. Например, если вы играете за Скорпиона в Mortal Kombat 2, нажатие ← ← B
запускает один из ваших специальных ходов. В этом случае системе могут потребоваться разные контроллеры, которые имеют дело с такими видами событий:
Здесь NES Button Controller
- это контроллер MVC, который будет отслеживать состояние элементов пользовательского интерфейса - например, запоминать, какие кнопки были нажаты в каком порядке. В зависимости от состояния приложения (см. Application Controller - еще один!) NES Button Controller
будет реагировать на определенные комбинации кнопок, вызывая методы на других контроллерах - например, Scorpion Controller
- которые являются контроллерами вариантов использования.
Важно то, что, глядя на конструкцию этих объектов контроллера, вы можете быстро и легко перечислить системные события, на которые они реагируют.
В целом, в конце концов, MVC Controller все еще является своего рода GRASP Controller - поскольку его методы имеют тенденцию представлять системные события, которые реагируют на ввод данных пользователем. Но есть и другие контроллеры GRASP, которые не являются контроллерами MVC: контроллеры Case. Контроллер варианта использования GRASP может реагировать на системные события, такие как «пользователь создает новую продажу», в то время как контроллер MVC реагирует на такие события, как «система получает запрос PUT на /sales/new
» или «java.awt.event.ActionEvent
срабатывает».