通信图和序列图从不同的角度表示相同的交互。但是消息的简化图形表示在涉及组合片段时意味着通信图中的限制。
在通信图中,您可以表示:
- 简单的消息序列和嵌套消息,通过时间顺序编号,例如:
1
,2
和3
十进制编号,例如2.1
, 2.2
,2.2.1
- 循环(
loop
序列图中的运算符),使用*
后面的数字。更具体的循环规范可以在括号之间的开头之后,例如*[1..n]
或*[element in collection]
。您的循环条件在序列图中未指定,因此 a*
会这样做。
- 简单条件(
opt
序列图中的运算符),在数字后的括号之间使用条件,例如[t>10]
因此,在您的示例中,我们可以想象:`
1: Enters username and passord
2: Check validity
2.1*: Mismatch of name or password // return message, not usual
2.2: Prompt user to re-enter credentials
2.3: Re-enter username and password
2.4: Re-check validity // missing in the SD in the loop
3: Verify user
4: USer verified
5: Display profile
现在这里有两个问题:首先,在您的序列图check validity
中,循环中缺少一个。其次,为了简单起见,我展示了所有消息,但在通信图中,您通常不会返回消息,以使事情更简单。所以我们会有一个稍微简单的模型:
1: Enters username and passord
2: Check validity //message, return is implicit
3.1*[credentials invalid]: Prompt user to re-enter credentials
3.2: Re-enter username and password
3.3: Check validity
4: Read user
5: Display profile
选择 SD 和 CD 的建议:
- 如果您有许多相关的生命线,请制作几个较小的 SD 或选择 CD。
- 如果您有很多消息交换,尤其是在同一条生命线之间,则更喜欢 SD,因为随着消息的增加,跟随 CD 上的数字会呈指数级不直观,并且箭头上方的长消息列表看起来很难看。
- 如果您有许多组合片段,或者如果您有多个循环和可选项,请继续使用 SD。