Warm tip: This article is reproduced from serverfault.com, please click

java-发布Spring事件时如何在UML中表示一个类调用另一种类方法

(java - How to represent in UML that one class calls another class method when publishing spring event)

发布于 2020-12-03 13:09:28

我想绘制代表我的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图上说明它?

在此处输入图片说明

Questioner
Valeriy K.
Viewed
11
Christophe 2020-12-04 05:23:05

类图

正如qwerty_so正确指出的那样,在类图中,我们不表示交互:我们表示结构,例如类,类之间的关联以及依赖项:

因此,你可能希望显示对common的依赖ApplicationEvent

在此处输入图片说明

春天的魔力

我不是Spring专家,但我了解“ spring magic”的背后是基于注释方法签名的注释该注释隐藏了侦听器向发布者的自动注册。

你可能会想在模型中显示侦听器和发布者之间的(自动)关联。但是恕我直言,这将不能很好地反映你的设计,因为你的模型将使魔术变得僵硬,而代码在这方面是动态的。这就是为什么我在上面显示的更简单的图看起来更合适的原因:魔术是由公共事件分母引起的。只需使用正确的中间类型即可。

互动

如果要显示交互的动态,则要复杂一些。例如,你可以使用序列图,将:SpringFramework生命线中的魔咒化为一体,并使用发送到此“虚拟”生命线的消息来实现自动注册。而且:

  • 事件发送将是从发布者到框架的消息,
  • 事件侦听将是框架发送给一个或多个侦听器的消息。

这不是真正的细节。但是你的关系图的读者不需要知道这些细节(除非它们属于spring开发团队)。因此,请使其尽可能简单,但不要过多:-)