====== Ключевые понятия контроллера Limb3 ====== См. также : [[.controller_workflow|Схема работы контроллера]]. Контроллер отвечает за логику работы приложения. С контроллером связаны следующие понятия: * **Request** - **Запрос**. Запрос содержит данные, которые пришли от клиента (пользователя) к системе. Для обычного сайта в Запросе хранятся POST и GET переменные, URI запроса, а также данные по отосланным файлам, если они есть. * **Response** - **Ответ**. Ответ содержит данные, которые система отдает клиенту после полной обработки Запроса. Для обычного сайта в Ответе хранятся заголовки, текст ответа, куки и т.д. * [[lmbService]] - **Сервис**. Это группа действий, относящихся к какой-то предметной или функциональной области. Например, есть сервис администрирования новостей AdminNews, в этот сервис входят действия по отображения списка новостей, созданию новости, редактированию новости, удалению новости. Можно сказать, что сервис - это объект над которым, в рамках приложения, выполняются какие-то действия. Можно рассматривать lmbService как модуль системы. * **Action** - **Действие**. Функциональная единица приложения. Можно рассматривать действие как отдельную страницу или лучше как тип страницы. Действие обязательно принадлежит какому-либо сервису. Например, есть действие create сервиса AdminNews для создания новости. Простое отображение, например, списка новостей - есть действие display сервиса AdminNews. То есть, **Action** - это действие, которое применяется к объекту (сервису). * [[RequestDispatching]] - **Разбор Запроса**. Обязательный этап в работе почти любого приложения; используется для того, чтобы проанализировать Запрос (Request) и решить, что именно система должна сделать. Результатом работы системы является объект класса [[lmbDispatchedRequest]] (Разобранный Запрос), который содержит Сервис и Действие. * [[lmbCommand]] - **Команды**. Реализуют действия. Команды выполняют всю специфическую для приложения работу. Например, команда AdminDisplayNewslistCommand отрендерит шаблон //news/admin_display.html//, что позволит вывести список новостей центра администрирования, а CreateNewsCommand соберет данные из Запроса и укажет классам модели добавить новую новость в базу данных. Именно от работы команд зависит, какой шаблон будет отображен, какие изменения произойдут с данными и когда. В большинстве случаев, на каждое действие (Action) приходится по одной команде. Controller можно расширять как вширь (делать более богатые функционально приложения), так и вглубь (делать более сложную логику работы приложения). То есть можно увеличивать количество сервисов, а можно регистрировать новые фильтры. Можно усложнить логику работы приложений и за счет выполнения более сложных команд.