MVC: почему контроллер — это стратегия для представления

Вот определение Strategy Pattern:

Стратегия — определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Стратегия позволяет алгоритму изменяться независимо от клиентов, которые его используют.

Итак, Strategy разделяет функциональность на две части: одну, которая не меняется, и другую, которая может измениться в будущем.

И в MVC они говорят, что:

контроллер - это стратегия для представления

Это означает, что контроллер меняется, и представление может не измениться в будущем.

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

Пожалуйста, объясните мне, почему люди так говорят.




Ответы (1)


Я подозреваю, что вы могли видеть примечание «контроллер — это стратегия для представления» в разделе вики C3 на Model Просмотрите контроллер как совокупный шаблон проектирования, что интересно, но немного кратко.

Эта идея более подробно описана во введении к шаблонам проектирования, где в разделе о MVC говорится:

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

Представление использует экземпляр подкласса Controller для реализации конкретной стратегии ответа; чтобы реализовать другую стратегию, просто замените экземпляр контроллером другого типа. Можно даже изменить контроллер представления во время выполнения, чтобы представление могло изменить способ, которым оно реагирует на пользовательский ввод. Например, представление можно отключить, чтобы оно не принимало ввод, просто предоставив ему контроллер, игнорирующий события ввода.

Отношение View-Controller является примером шаблона проектирования Strategy. Стратегия — это объект, представляющий алгоритм. Это полезно, когда вы хотите заменить алгоритм статически или динамически, когда у вас много вариантов алгоритма или когда алгоритм имеет сложные структуры данных, которые вы хотите инкапсулировать.

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

person Don Roby    schedule 08.04.2012