我正在使用PlantUML创建一个序列图,它描述了一个约会应用程序击中一个RestfulController (它使用一个服务类来处理数据)。
我想要做的是通过序列图来表示服务类的内部私有方法。
注意:这是伪代码,请不要考虑语义。
class DatingApp {
public void hitExternalApi() {
}
}
class DatingRestController {
@Autowired
public void DatingService;
@GetMethod
public Object processService() {
return DatingService.findProfile();
}
}
class DatingService {
public Object findProfile() {
Object retValue = new Object(null, null);
var variable1 = doSomething();
var varable2 = doSomethingElse();
return retValue(variable1, variable2);
}
private String doSomething() {
}
private String doSomethingElse() {
}
}
PlantUML DSL文件:
@startuml
DatingApp -> DatingRestController: hitExternalApi()
DatingRestController -> DatingService: processService()
DatingService -> DatingService: findProfile()
DatingService -> DatingService: doSomething()
DatingService -> DatingService: doSomethingElse()
DatingService -> DatingRestController: sent retValue
DatingRestController -> DatingApp: Send JSON
@enduml
我的第一张通行证:
如您所见,这看起来像是DateService类正在调用process()
方法,然后调用doSomething()
和doSomethingElse()
方法。
我如何表示doSomething()
和doSomethingElse()
方法是从findProfile()
生命线中调用的,而不是看起来像外部公共调用?
发布于 2020-06-26 20:14:51
您可以使用activate
和deactivate
来显示哪个对象是活动的,并使用返回函数调用。
下面是一个示例:
@startuml
DatingApp -> DatingRestController: hitExternalApi()
DatingRestController -> DatingService: process()
activate DatingService
DatingService -> DatingService: doSomething()
DatingService -> DatingService: doSomethingElse()
DatingService --> DatingRestController
deactivate DatingService
@enduml
uml序列图没有显示私有/公共方法调用的规则,但是没有什么可以阻止您通过图例添加自己的规则,以澄清如何读取图形。例如,您可以使用颜色来表示私有规则。
@startuml
legend top left
<color blue> Blue calls</color> denote public method calls
<color red> Red calls</color> denote private method calls
endlegend
DatingApp -[#blue]> DatingRestController: hitExternalApi()
DatingRestController -[#blue]> DatingService: process()
activate DatingService
DatingService -[#red]> DatingService: doSomething()
DatingService -[#red]> DatingService: doSomethingElse()
DatingService -[#blue]-> DatingRestController
deactivate DatingService
@enduml
颜色也可以用于激活线,但序列描述则要复杂一些:
@startuml
legend top left
<color blue> Blue activation </color> denote public method calls
<color red> Red activation</color> denote private method calls
endlegend
DatingApp -> DatingRestController: hitExternalApi()
DatingRestController -> DatingService: process()
activate DatingService #blue
DatingService -> DatingService: doSomething()
activate DatingService #red
deactivate DatingService
DatingService -> DatingService: doSomethingElse()
activate DatingService #red
deactivate DatingService
DatingService --> DatingRestController
deactivate DatingService
@enduml
发布于 2020-06-29 08:13:46
因此,经过多次尝试和错误之后,我查看了PlantUML文档,发现真正的问题是如何将私有方法调用表示/表示为嵌套生命线。
这是我的解决方案:
@startuml
skinparam Shadowing false
title __Dating API Sequence Diagram__\n
caption \nVersion 1.0 - 6/26/2020 (Draft)\n
autonumber
activate DatingApp
DatingApp -> DatingRestController: hitExternalApi()
activate DatingRestController
DatingRestController -> DatingService: processService()
activate DatingService
DatingService -> DatingService: findProfile()
activate DatingService #90EE90
DatingService -> DatingService: doSomething()
DatingService -> DatingService: doSomethingElse()
deactivate DatingService
DatingService -> DatingRestController: return retValue
DatingRestController -> DatingApp: jsonPayload
deactivate DatingRestController
deactivate DatingApp
legend bottom right
Legend
|=Color |= Name |= Type |= Lifeline |
|<back:#FFFFFF> </back>| DatingApp.hitExternalApi() | method | default |
|<back:#FFFFFF> </back>| DatingRestController.processService() | method | default |
|<back:#FFFFFF> </back>| DatingService.findProfile | method | default |
|<back:#90EE90> </back>| DatingService.doSomething() | method | nested |
|<back:#90EE90> </back>| DatingService.doSomethingElse() | method | nested |
endlegend
@enduml
下面是从IntelliJ IDEA生成的序列图:
doSomethingElse()
方法是否仍然可以指向绿色嵌套管道,或者指向包含调用findProfile()
方法的默认白色生命线的箭头是否正确?
PlantUML是一个很好的工具,我期待着越来越好地使用它,帮助这里的其他人解决他们的问题!
https://stackoverflow.com/questions/62602005
复制相似问题