88867
現在、認証情報を入力する画面のシーケンス図を記述しています。認証が成功すれば次のページへ、情報に不備があればエラーを出し再度入力させるという処理の流れになっています。質問は、エラーがあるまで入力をし続ける必要がある場合、それはループ処理として書く必要があるのかということです。実際のコードではここはループ処理にはならないので間違っていると思っているのですが、単純な条件分岐にした場合、そのまま処理が終了するように見えると思いました。

今回のような流れを実現したい場合、どのように書くのが適切なのでしょうか。

[![記述したシーケンス図](https://i.stack.imgur.com/480WM.png)](https://i.stack.imgur.com/480WM.png)

plantumlのコード

```

    @startuml
    actor       ユーザー       as user
    participant UI as ui #skyblue
    participant APIサーバー as api
    database    DB    as db #yellow
    
    
    user <- ui: 認証情報入力画面
    loop
    user -> ui: フォームを入力
    activate ui
    ui -> api: フォーム送信
    activate api
    api -> db: 該当ユーザーのデータ取得
    activate db
    api <- db: 完了
    deactivate db
    api -> api: 認証情報の照合
    ui <- api: 認証結果の返却
    deactivate api
    
    alt 空の入力項目がある場合
      user <- ui: エラー「入力必須項目です。」
    
    else 認証に失敗した場合
      user <- ui: エラー「認証に失敗しました。」
    
    end
    
    break 認証成功
      user <- ui: [[#1 次のページ]]
    deactivate ui
      end
    end
    
    @enduml
    
```
CC BY-SA 4.0
2022-05-16T09:08:07.217
88850
2022-05-17T00:46:31.113
50855
question
uml plantuml
シーケンス図でフォームを使った認証処理を記述する場合、認証が成功するかどうかを条件にしてループ処理にした方が良いのか
仮にループにしないとすると画面設計まで落とし込んだ時に  
エラー画面を出して終了画面が出てきてもシーケンス図通りの設計であるといえてしまいます。  
それでもいいということであればループを書く必要はありません。  
しかしユーザにフォーム画面を表示させて繰り返し入力をしてもらうことを想定するならばユーザ都合のループを書くべきです。

シーケンス図の大事なことはコードの実装を書くことではなく、各オブジェクト間のやりとりを時系列に書くことです。  
オブジェクトの仕様やふるまいは開発する部分だけではなく今回でいう「ユーザ」や「外部システム」いわゆる「外側」のふるまいも必要になります。  
外側を書くことでどういった開発をするのかしないのかを明確に分けるためのドキュメントです。
CC BY-SA 4.0
2022-05-17T00:46:31.113
88867
2022-05-17T00:46:31.113
22665
88850
answer