объект в бинарное представление. • кладёт в очередь (БД, хранилище Redis, …) • Обработчик: (через какое-то время, другой процесс, другой компьютер) • достаёт из очереди объект «Команда». • десериализует. • выполняет.
отката команды, ибо контекст исполнения отличается от контекста порождения. • Макрокоманда — цепочка из нескольких команд. • Транзакционность — макрокоманда либо будет выполнена до конца (с изменением состояния), либо не будет выполнена вообще (состояние останется неизменным). • Если 8-я команда завершилась с ошибкой, откатываем обратно с 7-й по 1-ю.
не наоборот. Принцип Голливуда: «Не звоните нам, мы сами вам позвоним». • Hooks (callbacks, крючки, зацепки) — определяются по желанию. Как правило, в базовом классе это функции с пустыми телами. • virtual foo() = 0; заставляет определять функции в подклассе. Принцип инверсии зависимостей
• Переходы между состояниями может делать как основной класс, так и классы состояний. • Классы состояний можно наследовать друг от друга (если поведение несильно отличается). • Можно сделать классы состояний синглтонами (если все данные лежат в основном классе). Принцип открытия- закрытия