【问题标题】:Subpackage for custom events in JavaJava中自定义事件的子包
【发布时间】:2014-03-27 10:42:46
【问题描述】:

假设我将四个类分为两个包:

我创建了包myapp.enginemyapp.engine.events 用于事件处理。如您所见,这会在包之间创建循环依赖。

如何避免这种情况? 换句话说:保存与事件相关的类的最佳位置在哪里?

【问题讨论】:

  • 为什么事件或监听器需要依赖引擎包?
  • 您是否担心它会收到不应该的消息,然后会做不该做的事情?
  • @Jon Skeet:例如,事件可能包含对该包中某些类的引用,该类在 SomeClass 中使用。然后听众使用这个类。
  • 这听起来像是应该进入问题的更多信息。一个显示所有相关类的完整示例会更容易为您提供帮助。
  • 似乎双向依赖只存在因为 SomeClassEvent 使用 SomeClassStuff。由于这显然是事件 API 的一部分,因此 SomeClassStuff 类也应该进入事件包。然后你就有了一个清晰而有凝聚力的包。

标签: java events listener packages


【解决方案1】:

感谢所有 cmets。现在是总结的时候了。我有以下建议的解决方案:

_retrievedStuff 设为Object 类型

Seelenvirtuose 提及。它将打破循环,但随后我们将丢失有关_retrievedStuff 类型的信息。

SomeClassStuff 移至活动包

Seelenvirtuose 再次提及。这个解决方案也可以工作,但前提是SomeClassStuff 不依赖于任何 myapp.engine 类。否则,周期性依赖不会消失。

在我的情况下这是行不通的,因为SomeClassStuff 严重依赖于 myapp.engine 包。所以,我只好选择第三个选项,也就是……

将特定于事件的类提取到事件包中

我在 myapp.engine.events 包中创建了名为 EventStuff 的类,其中包含事件处理所需的内容,并且不依赖来自 myapp.engine 的任何类。以前在事件处理期间需要来自 SomeClassStuff 的任何数据和逻辑,现在将在 EventStuff 中。

那么,SomeClassEvent 将只依赖于这个类,仅此而已。 这是应用解决方案后的类图:

瞧!简单,但有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多