web-dev-qa-db-ja.com

UMLシーケンス図-非同期応答を表す方法

たとえば、Aが非同期メッセージをBに送信して、非同期画像をWebからUIにロードする場合などです。応答メッセージはどこに送るべきですか?

斜めでも直接でもいいですか?そして、送信者(A)のアクティベーションはどこにありますか?

enter image description here

7
shinzou

ここには2つの質問があります。1。矢印の傾斜と、2。アクティベーションをどうするか。

  1. メッセージをAからBに、またはその逆に移動するのに時間がかかることを図で表現したい場合は、矢印を傾ける必要があります。
    メッセージが非同期で処理されることを示すだけの場合は、メッセージに開いた矢印を使用するだけで十分です。

  2. メッセージ(AからBに送信)が非同期で処理されると、Aのアクティブ化はメッセージが送信されるとすぐに終了し、Bからの応答を受信すると再び開始されます。
    これは、Aが応答を待機している間はブロックしないが、応答を待機している間は他の処理を実行できるという仮定の下にあります。

私は以前、これらを自分の仕事の一部として描いていました。私たちはそれらを行う決まった方法を持っていました。どのダンショップにも独自の方法があるため、その方法については説明しません。 google image search でこれを証明できます。

あなたが気づく一つのことは、ほとんど誰も矢に傾斜をつけないということです。この比喩では、傾斜は非同期ではなく遅れです。

Y軸は時間を表します。非同期であるということは、独自のy軸があることを意味するため、非同期はこの図に実際には適合しません。したがって、ここで描くものはすべて推測です。とにかくやってみます。

あなたの「ここでの応答」の行は、Bが終了したときにAがまだ処理中であることを期待し、最後にそれを置いたので、Bが応答したときに終了することを示しています。

「またはここ」の行は、Bが終了したときに、Aがすでに終了していることを期待していることを示しています。

ほとんどの場合、あなたはどちらが起こるかさえ知りません。これらの場合、最も安全な描写は、まったく帰りの矢ではありません。 Aへのコールバックがある場合は、「戻る」矢印がある方が理にかなっています。実際には、その時点でAを通過する2つの異なる制御フローがあります。

従来、シーケンス図には2つの役割がありました。制御の流れを描き、オブジェクトの寿命を予測して、いつ削除しても安全かを知る。非同期でオブジェクトの寿命を予測する場合、この方法は非常に複雑になります。

最も重要なことは、あなたの店があなたがお互いを理解できるようにそれを行うための標準的な方法を持っているということです。その標準がUMLブックの一部のバージョンから出てきた場合は、はるかに優れています。つまり、新入社員に渡す本があるということです。しかし、私たちはあなたのお店にはいません。私たちはプログラマーです。

2
candied_orange

非同期という用語は、このレベルでは実際には適用されません。 Async は、プログラムのメインフロー(ここではAまたはB)とは無関係に発生するイベント(メッセージなど)を示します。これは、クライアントまたはサーバーの内部スレッド設計に関連する外部イベントの実装の詳細とタイミングを説明する形容詞であり、メインプログラムが同時に何か他のことをしている可能性があるため、そのようなイベントを処理する戦略を呼び起こします。

高レベルでは、クライアントとサーバー間または2つのサーバー間でメッセージについて話すとき(そしてどちらか一方の内部実装の詳細については詳しく説明しません)、一方向のメッセージ、要求/コマンド(つまり、自由に開始されたメッセージ)、および応答について話すことができます。非同期メッセージをWeb経由で送信するようなものはありません。Web経由でメッセージを送信するだけであり、要求/コマンドまたは返信のいずれかです。

まず、動作(特定の要求/コマンドに対して1つ以上の応答があるかどうか)とタイミング(予想される遅延の大きさ)に焦点を当てる必要があります。これは、AとBの間の相互作用のハイレベルな要点です。

どちらか一方の内部スレッドについて説明したい場合、たとえば、アクティブ化から受信された応答を示すことができます。ただし、明確にするために、これはメッセージングまたは2つの間の相互作用のプロパティではなく、この場合のAの実装方法の内部の詳細であり、図の目的によっては実際にはトピックとは異なる場合があります。

2
Erik Eidt