Page 77 - 4190
P. 77
потрібна підтримка скасовування операцій. Операція Execute
об'єкта Команда може зберегти стан, що необхідний для скасування
дій, виконаних Командою. У цьому разі у інтерфейсі класу Command
повинна бути додаткова операція Unexecute, котра скасовує дії, вико-
нанні попереднім викликом операції Execute. Виконані команди збе-
рігаються у списку історії. Для реалізації довільної кількості рівней
скасування та повтору команд треба обходити цей список відповідно
в зворотному та прямому напрямках, викликаючи під час відвідуван-
ня кожного елементу операцію Unexecute або Execute;
підтримати протоколювання змін, щоб їх можна було виконати
повторно після аварійної зупинки системи. Доповнивши інтерфейс
класу Command операціями зберігання та завантаження, можна вести
протокол змін у внутрішній пам'яті. Для відновлення після збою тре-
ба буде завантажити збережені команди з диску та повторно виконати
їх за допомогою операції Execute;
треба структурувати систему на основі високорівневих опера-
цій, що побудовані з примітивних. Така структура є типовою для ін-
формаційних систем, що підтримують транзакції. Транзакція інкап-
сулює множину змін даних. Шаблон Команда дозволяє моделювати
транзакції. В усіх команд є спільний інтерфейс, що надає можливість
працювати однаково з будь-якими транзакціями. За допомогою цього
шаблону можна легко додавати у систему нові види транзакцій.
UML-діаграма класів патерну Command зображена на рисунку
7.9.
Рисунок 7.9 – UML-діаграма класів патерну Command
77