如何在 UML 中表示一个 class 在发布 spring 事件时调用另一个 class 方法
How to represent in UML that one class calls another class method when publishing spring event
我想绘制代表我的 Spring 启动应用程序的 UML 图。我是 UML 的新手,不知道如何表示两个使用其他 classes 的 classes 之间的交互。我有一个发布 spring 事件的 class 和一个处理此类事件的 class。发布商示例:
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 图上说明它?
您可以使用 activity 或者在这种情况下最好使用序列图。那些表现行为。在 SD 中绘制一条从 Publisher
到 Eventhandler
实例(生命线)的消息箭头,并用操作标记它 handleEvent()
.
class 图仅显示静态结构。
class 图表
正如 正确指出的那样,在 class 图中,我们不表示交互:我们表示结构,例如 classes,class 之间的关联es 和依赖项:
- 在
EventHandler
方面,您依赖于 Event
。因为它是 @EventListener
, Event
is probably an ApplicationEvent
- 在
Publisher
方面,您的代码依赖于 SomeEvent
。因为它是 ApplicationEventPublisher
, SomeEvent
is probably an ApplicationEvent
.
因此,您可能希望显示对通用 ApplicationEvent
:
的依赖
Spring魔法
我不是 Spring 专家,但我知道 behind the "spring magic" is the annotation 根据注释方法的签名隐藏了监听器向发布者的自动注册。
您可能想在模型中显示听众和发布者之间的(自动)关联。但是恕我直言,这并不能很好地反映您的设计,因为您的模型会硬连线魔术,而您的代码在这方面是动态的。这就是为什么我上面显示的更简单的图表似乎更合适:魔法是由共同的事件分母引起的。只需使用正确的中介类型。
互动
如果要显示交互的动态,则稍微复杂一些。例如,您可以使用序列图,将魔法封装在 :SpringFramework
生命线中,并通过发送到该“虚拟”生命线的消息实现自动注册。此外:
- 事件发送将是从发布者到框架的消息,
- 事件监听是框架发送给一个或多个监听器的消息。
这不是真正的细节。但是图表的读者不需要知道这些细节(除非他们属于 spring 开发团队)。所以尽可能简单,但不要更多:-)
我想绘制代表我的 Spring 启动应用程序的 UML 图。我是 UML 的新手,不知道如何表示两个使用其他 classes 的 classes 之间的交互。我有一个发布 spring 事件的 class 和一个处理此类事件的 class。发布商示例:
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 图上说明它?
您可以使用 activity 或者在这种情况下最好使用序列图。那些表现行为。在 SD 中绘制一条从 Publisher
到 Eventhandler
实例(生命线)的消息箭头,并用操作标记它 handleEvent()
.
class 图仅显示静态结构。
class 图表
正如
- 在
EventHandler
方面,您依赖于Event
。因为它是@EventListener
,Event
is probably anApplicationEvent
- 在
Publisher
方面,您的代码依赖于SomeEvent
。因为它是ApplicationEventPublisher
,SomeEvent
is probably anApplicationEvent
.
因此,您可能希望显示对通用 ApplicationEvent
:
Spring魔法
我不是 Spring 专家,但我知道 behind the "spring magic" is the annotation 根据注释方法的签名隐藏了监听器向发布者的自动注册。
您可能想在模型中显示听众和发布者之间的(自动)关联。但是恕我直言,这并不能很好地反映您的设计,因为您的模型会硬连线魔术,而您的代码在这方面是动态的。这就是为什么我上面显示的更简单的图表似乎更合适:魔法是由共同的事件分母引起的。只需使用正确的中介类型。
互动
如果要显示交互的动态,则稍微复杂一些。例如,您可以使用序列图,将魔法封装在 :SpringFramework
生命线中,并通过发送到该“虚拟”生命线的消息实现自动注册。此外:
- 事件发送将是从发布者到框架的消息,
- 事件监听是框架发送给一个或多个监听器的消息。
这不是真正的细节。但是图表的读者不需要知道这些细节(除非他们属于 spring 开发团队)。所以尽可能简单,但不要更多:-)