306 Глава 13. Дополнительные аспекты реализации прецедентов
13.3. Продолжения
Продолжения (continuations) позволяют фрагменту взаимодействия
показать, что его поток завершается таким образом, что он может быть
подхвачен и продолжен другим фрагментом взаимодействия. Продол
жение изображается в виде метки внутри прямоугольника со скруг
ленными углами.
Продолжения обеспечивают возможность завершать фрагмент взаимо
действия таким образом, что его может продолжить другой фрагмент.
Когда продолжение является последним элементом фрагмента взаи
модействия, оно обозначает точку, в которой этот фрагмент заверша
ется, но может быть продолжен другими фрагментами.
Если продолжение является первым элементом фрагмента взаимодей
ствия, оно показывает, что этот фрагмент является продолжением
предыдущего фрагмента.
Продолжения обеспечивают способ соединения разных взаимодейст
вий. По сути, одно взаимодействие завершается, оставляя свои линии
жизни в определенном состоянии, а другие взаимодействия могут при
соединиться в этой точке и продолжить работу.
Визуальный синтаксис продолжений аналогичен инвариантам состоя
ния, которые обсуждались в разделе 12.9.4. Однако продолжение – это
лишь способ соединения разных взаимодействий в помеченных точ
ках. Оно не обязательно отображается в конкретное состояние автома
та контекстного классификатора.
На рис. 13.11 показана простая диаграмма последовательностей, на ко
торой :RegistationUI (UI – пользовательский интерфейс) вызывает актера
:Registrar сначала для получения имени курса, а затем для осуществле
ния одной из трех операций: добавить, удалить или найти. В зависимо
сти от того, какой вариант выбран, взаимодействие заканчивается од
ним из трех продолжений: addCourse, removeCourse или findCourse.
На рис. 13.12 можно увидеть взаимодействие HandleCourseOption (произ
вести действие над курсом), которое включает GetCourseOption (получить
вариант действия над курсом) и затем выбирает одно из его продолже
ний. Как видите, продолжения позволяют:
• разъединить взаимодействия GetCourseOption и HandleCourseOption;
• потенциально повторно использовать GetCourseOption и HandleCourse
Option с другими взаимодействиями, имеющими аналогичные про
должения.
При использовании продолжений необходимо помнить следующее:
• Продолжения начинают и заканчивают взаимодействия, следова
тельно, они должны быть или первым, или последним элементом
взаимодействия.