Потерянное звено в UML.
Две вещи в UML всегда вызывали у меня вопросы:
1. Разрыв между диаграммой вариантов использования и более детальным дизайном. Use Case Diagram показывает названия вариантов использования, а где же их сценарии? Диаграмма последовательности помогает не всегда — она сфокусирована на передаче сообщений, и не показывает внутреннюю работу. А также не всегда сценарий юскейса линейный.
2. Необычные значки на диаграмме последовательности. Вот эти кружочки: boundary, control, entity — что это такое? Они больше нигде в UML не используются.
Оказывается, ответ на это один — Robustness Diagram! (диаграмма устойчивости) Вот она, на картинке. Она раскрывает сценарий отдельного юскейса. Куда пользователь обращается (с каким экраном и элементом интерфейса он взаимодействует), как система это обрабатывает (осуществляет проверки, выполняет команду или целую транзакцию), какие данные при этом использует или создает.
При этом соблюдаются следующие правила:
* Actor может взаимодействовать только с boundary (интерфейсом)
* Boundary взаимодействует только с актором и контроллером, но не с данными напрямую
* Контроллеры связывают boundary с данными, и могут общаться друг с другом (тут можно показать микросервисы)
* Entity взаимодействует только с контроллером
Знакомая раскладка? Похоже на паттерн MVC. Но из без него можно использовать, просто для проверки, что у нас есть интерфейс под каждую задачу, есть бизнес-логика и у нас есть все данные, которые нужны для выполнения юскейса. Поэтому это и диаграмма устойчивости — позволяет проверить, что всё на месте и ничего не забыли.
На сайте Аджайл-моделирования диаграмму хвалят, и добавляют, что на неё стоит вынести также вещи, понятные бизнес-заказчикам:
* Отчеты (это тоже Boundary)
* По контроллеру на каждое бизнес-правило
* Каждая бизнес-сущность зафиксирована как entity
* Контроллер, который управляет всем юскейсом в целом
Диаграмма не вошла в стандарт UML, но набросать дизайн реализации юскейса в этой нотации довольно удобно.
(Картинки отсюда)
Post #364
3.69K


- 👍 26
- 🤔 6
- ✍ 2
- ❤ 2