我想画一个uml图来表示我的SpringBoot应用程序。我是uml新手,不知道如何表示使用其他类的两个类之间的交互。我有一个发布spring事件的类和一个处理此类事件的类。发布者示例:
import org.springframework.context.ApplicationEventPublisher;
class Publisher {
ApplicationEventPublisher springPublisher;
public publishEvent() {
springPublisher.publishEvent(new SomeEvent());
}
}
经办人:
import org.springframework.context.event.EventListener;
class EventHandler {
@EventListener
public handleEvent(Event event) {
// some processing
}
}
因此,当我通过SpringApplicationEventPublisher发布一些事件时,我的处理程序通过@eventlistener注解的方法处理事件。但它不是该方法的直接调用。我如何在uml图上说明它?
2条答案
按热度按时间bvuwiixz1#
类图
正如qwerty所正确指出的,在类图中,我们并不表示交互:我们表示结构,例如类、类之间的关联和依赖关系:
上
EventHandler
另一方面,你对Event
. 因为这是一个@EventListener
,Event
可能是ApplicationEvent
上Publisher
另一方面,您的代码依赖于SomeEvent
. 因为这是一个ApplicationEventPublisher
,SomeEvent
可能是ApplicationEvent
.因此,您可能希望显示对公共对象的依赖关系
ApplicationEvent
:Spring的魔力
我不是一个springMaven,但我知道在“spring魔力”的背后是一个注解,它隐藏了一个监听器到发布者的自动注册,基于注解方法的签名。
您可能会试图在模型中显示侦听器和发布器之间的(自动)关联。但是我认为,这并不能很好地反映您的设计,因为您的模型会硬连接魔术,而您的代码在这方面是动态的。这就是为什么我上面展示的更简单的图表看起来更合适的原因:魔力是由公共事件分母引起的。只要使用正确的中间类型。
相互作用
如果你想展示相互作用的动态,就要复杂一点。例如,您可以使用一个序列图,将魔法封装在一个
:SpringFramework
生命线,并实现自动注册的消息发送到这个“虚拟”生命线。此外:事件发送将是发布者向框架发送的消息,
事件侦听是框架发送给一个或多个侦听器的消息。
这不是真正的细节。但是图的读者不需要知道这些细节(除非他们属于spring开发团队)。所以尽可能简单,但不要更多:-)
af7jpaap2#
您可以使用活动,或者在本例中最好使用序列图。这些都显示了行为。在sd中,从
Publisher
至Eventhandler
示例(生命线)并用操作标记它handleEvent()
.类图只显示静态结构。