Если вы говорите о цикле, то у вас есть ряд операций, которые выполняются для всех элементов цикла.
Я бы смоделировал операции, выполненные в цикле, как диаграмму последовательности, если операции в цикле довольно сложны.
Я не думаю, что у нас здесь могут быть практические правила, но когда процесс с самим циклом сложен, а цикл относительно менее сложен, мы можем иметь их в одной диаграмме последовательности.
Если процесс с циклом не очень сложен, но цикл сложен, то я бы нарисовал диаграмму последовательности операций цикла и заметил, что вся эта последовательность вызывается циклом.
При необходимости вы также можете иметь обе диаграммы последовательности.
Обновление:
Мы должны добавить некоторые примечания к диаграмме, потому что не просто обозначить «условие» на диаграмме последовательности.
Проверка является частью что-то вроде
do validation
if validation succeeds
proceed to next (business or other) logic
if validation fails
feedback to user (or some other logic)
+----+ +----+ +----------------+ +----------------+
|User| | UI | | Your Validator | | Business Logic |
+----+ +----+ +----------------+ +----------------+
| select | | |
|--------------->| doValidation | |
| |------------------>|----+ |
| | | | Validate |
| | |<---+ |
| | | |
| | | (validation fails: |
| | Validation Fail | feedback to client) |
| |<------------------| |
| | | |
| | | |
| | | (validation succeeds: |
| | | proceed to |
| | | business logic) |
| | | |
| | | someLogic |
| | |----------------------->|
| | | |
ОБНОВЛЕНИЕ 2
Зачем использовать диаграмму последовательности в случае, как мой?
Потому что вам все еще нужно показывать последовательность операций, а разработчику все еще нужна эта информация для кодирования :-)
С UML, как вы, наверное, уже знаете, ничего не навязано 1026 *. Вы можете свободно что-то обозначать, если ваша команда также понимает это так, как вы хотели. Эти заметки также полезны.
Я должен был упомянуть об этом раньше, некоторые используют фрагмент "option" для обозначения if if else. Это более или менее примечание (я вижу это так), но, возможно, более очевидно. Я использую их только тогда, когда обе части IF
и ELSE
являются сложными.
+----+ +----+ +----------------+ +----------------+
|User| | UI | | UI - Backend | | Busines Logic |
+----+ +----+ +----------------+ +----------------+
| Add Record | | |
|--------------->| doinsertOrUpdate | |
| |------------------>| |
| | | exists(record) |
| | |----------------------->|
| | | |
____|________________|___________________|________________________|__________
|[Record exists] | | | |
| | | | Get Record | |
| | | |----------------------->| |
| | | | | |
| | | |--------+ | |
| | | | | Set UI Values | |
| | | |<-------+ | |
| | | | | |
| | | | Update Record | |
| | | |----------------------->| |
| | | | | |
| | | Send Message | | |
| | |<------------------| | |
| | | "Record found, | | |
| | | Updated" | | |
|___|________________|___________________|________________________|_________|
| | | |
| | | |
______|________________|___________________|________________________|_________
| [Record does not | | | |
| exist] | | | |
| | | |--------+ | |
| | | | | Generate | |
| | | | | Seqeuence | |
| | | |<-------+ | |
| | | | | |
| | | | Create New Record | |
| | | |----------------------->| |
| | | Send Message | | |
| | |<------------------| | |
| | | "New Record | | |
| | | Created" | | |
|_____|________________|___________________|________________________|_________|
| | | |
| | | |
| | | |
См. this для примера использования блока alt.