我想绘制代表我的Spring启动应用程序的UML图。我是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
}
}
因此,当我通过Spring ApplicationEventPublisher发布一些事件时,我的处理程序将通过带有@EventListener注释的方法来处理事件。但这不是该方法的直接调用。我如何在UML图上说明它?
正如qwerty_so正确指出的那样,在类图中,我们不表示交互:我们表示结构,例如类,类之间的关联以及依赖项:
EventHandler
一侧,你有一个对的依赖Event
。由于是@EventListener
,Event
可能是ApplicationEvent
Publisher
一边,你的代码有依赖关系SomeEvent
。由于是ApplicationEventPublisher
, SomeEvent
可能是ApplicationEvent
。因此,你可能希望显示对common的依赖ApplicationEvent
:
我不是Spring专家,但我了解“ spring magic”的背后是基于注释方法签名的注释,该注释隐藏了侦听器向发布者的自动注册。
你可能会想在模型中显示侦听器和发布者之间的(自动)关联。但是恕我直言,这将不能很好地反映你的设计,因为你的模型将使魔术变得僵硬,而代码在这方面是动态的。这就是为什么我在上面显示的更简单的图看起来更合适的原因:魔术是由公共事件分母引起的。只需使用正确的中间类型即可。
如果要显示交互的动态,则要复杂一些。例如,你可以使用序列图,将:SpringFramework
生命线中的魔咒化为一体,并使用发送到此“虚拟”生命线的消息来实现自动注册。而且:
这不是真正的细节。但是你的关系图的读者不需要知道这些细节(除非它们属于spring开发团队)。因此,请使其尽可能简单,但不要过多:-)
您必须以某种方式访问时间机器以产生所有这些答案:-)
@qwerty_so你成就了我的一天:-)