то в результате воз
врата кода состояния CMD OK механизм пересылки запустит ее только по пути
/addspace. Причем это произойдет только для пути /addvenue. А если в запро
се, по которому вызывается данная команда, указан путь /quickaddvenue, то
никакой пересылки не произойдет и отобразится представление quickaddvenue,
хотя команде типа AddVenue об этом ничего неизвестно. Она просто придержи
вается своих основных обязанностей.
Выводы
Реализовать полноценный пример шаблона Application Controller не
легко, потому что придется немало потрудиться, чтобы получить и применить
метаданные, описывающие взаимосвязи команды с запросом, представлением и
с другими командами.
410
ЧАСТЬ III
ШАБЛОНЫ
Поэтому я стараюсь реализовать нечто подобное, когда совершенно очевид
но, что это необходимо для приложения. Мне словно кто-то нашептывает это,
когда я ввожу условные операторы в команды, вызывающие разные представ
ления или другие команды в зависимости от обстоятельств. И в этот момент я
понимаю, что поток команд и логика отображения начинают выходить из-под
моего контроля.
Безусловно, в контроллере приложения могут применяться всевозможные
механизмы для установления взаимосвязей команд с представлениями, а не
только тот подход, который был применен здесь. Даже если начать в любом
случае с фиксированной взаимосвязи строки запроса с наименованием команды
и представлением, то все равно можно извлечь немалую выгоду из построения
контроллера приложения, где все это инкапсулировано. Это обеспечит значи
тельную степень гибкости, когда потребуется реорганизовать код, чтобы при
способиться к более высокому уровню сложности.
Шаблон Page Controller
Несмотря на то что мне очень нравится шаблон Front Controller, при
менять его целесообразно далеко не всегда. Применение данного шаблона на
стадии предварительного проектирования может иметь положительные послед
ствия для крупных систем и отрицательные для простых проектов, которые тре
бует быстро реализовать. И здесь может пригодиться шаблон Page Controller
(Контроллер страниц), с которым вы, вероятно, уже знакомы, поскольку он ча
сто выбирается в качестве общей стратегии проектирования. Тем не менее не
которые вопросы его применения все же стоит обсудить.
Проблема
И в данном случае задача состоит в том, чтобы управлять взаимосвязью за
проса, логики приложения и представления данных. В корпоративных проектах
это практически постоянная задача, а изменяются только накладываемые огра
ничения.
Так, если имеется относительно простой проект, где развертывание крупной
многофункциональной структуры приведет только к срыву сроков сдачи про
екта, не дав практически никаких преимуществ, то шаблон Page Controller
станет удобным инструментальным средством управления запросами и пред
ставлениями.
Допустим, требуется вывести страницу, на которой отображается список всех
культурных заведений в рассматриваемой здесь системе. Даже если у нас уже
имеется готовый код для извлечения такого списка из базы данных, без приме
нения шаблона Page Controller перед нами все равно встанет трудная задача
достижения такого простого на первый взгляд результата.
Итак, список культурных заведений должен отображаться на странице пред
ставления, и для его получения необходимо выполнить запрос. При обработке
ГЛАВА 12
ШАБЛОНЫ КОРПОРАТИВНЫХ ПРИЛОЖЕНИЙ
411
запроса допускается возможность возникновения ошибок, поэтому в получен
ном результате не всегда будет отображаться новое представление, как можно
было бы ожидать при решении сложной задачи. Поэтому в данном случае про
ще и эффективнее всего связать представление с контроллером, что зачастую
делается на одной и той же странице.
Реализация
Несмотря на то что при применении шаблона Page Controller могут воз
никать определенные трудности, сам шаблон довольно прост. В частности,
контроллер по этому шаблону связан с отдельным представлением или рядом
представлений. В простейшем случае это означает, что контроллер находится
в самом представлении, хотя его можно отделить, особенно если одно пред
ставление тесно связано с другими представлениями (т.е. в том случае, если в
различных ситуациях требуется отсылать браузер на разные страницы). Ниже
приведен простейший пример реализации шаблона Page Controller.
Последние комментарии
6 часов 46 минут назад
8 часов 19 минут назад
12 часов 12 минут назад
12 часов 17 минут назад
17 часов 37 минут назад
2 дней 5 часов назад