|
@@ -20,3 +20,35 @@
|
|
|
- _получение не гарантировано_. Поскольку у запроса нет явного получателя, то нет и гарантий, что он вообще будет обработан: он может достичь конца цепочки и пропасть.
|
|
- _получение не гарантировано_. Поскольку у запроса нет явного получателя, то нет и гарантий, что он вообще будет обработан: он может достичь конца цепочки и пропасть.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+# [Команда (Command)](./command/main.kt)
|
|
|
|
|
+
|
|
|
|
|
+Это поведенческий паттерн проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций.
|
|
|
|
|
+
|
|
|
|
|
+## Другое название
|
|
|
|
|
+Действие (Action), Транзакция (Transaction)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+## Применимость
|
|
|
|
|
+
|
|
|
|
|
+- параметризация объектов выполняемым действием
|
|
|
|
|
+- определение, постановка в очередь и выполнение запросов в разное время
|
|
|
|
|
+- поддержка отмены операций
|
|
|
|
|
+- поддержка протоколирования изменений, чтобы их можно было выполнить повторно после сбоя в системе
|
|
|
|
|
+- структурирование системы на основе высокоуровневых операций, построенных из примитивных
|
|
|
|
|
+
|
|
|
|
|
+## Отношения
|
|
|
|
|
+
|
|
|
|
|
+- клиент создает объект конкретной команды и устанавливает для него получателя
|
|
|
|
|
+- инициатор сохраняет объект конкретной команды
|
|
|
|
|
+- инициатор отправляет запрос, вызывая операцию команды Execute. Если поддерживается отмена выполненных действий, то перед вызовом Execute сохраняет информацию о состоянии, достаточную для выполнения отмены
|
|
|
|
|
+- объект конкретной команды вызывает операции получателя для выполнения запроса
|
|
|
|
|
+
|
|
|
|
|
+## Результаты
|
|
|
|
|
+
|
|
|
|
|
+- команда отделяет объект, инициирующий операцию, от объекта, располагающего информацией о том, как ее выполнить
|
|
|
|
|
+- команды — это самые настоящие объекты. Их можно обрабатывать и расширять точно так же, как любые другие объекты
|
|
|
|
|
+- из простых команд можно собирать составные
|
|
|
|
|
+- новые команды добавляются легко, поскольку никакие существующие классы изменять не нужно
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|