"managed" 取决于 "manager" 结构

"managed" depends on "manager" structure

我对 DependancyInject 有结构问题。

情况

我正在为基于体素的游戏创建服务器;完全调制,但相关模块如下3.

NetworkModule(发送和接收数据包) WorldModule(处理世界相关事件和存储世界) 世界(存储所有的块,并有世界上的玩家列表) 块(有一个material,和一些其他字段)

问题

当在块class中调用setMaterial(Material material)方法时,一个"BlockChange"数据包应该被发送到所有世界上的玩家让客户端知道方块已经改变类型。要发送该数据包,Block class 必须能够访问 NetworkModule。 WorldModule 中存储了一个 NetworkModule 实例。从技术上讲,这很容易解决,只需将 WorldModule 或 NetworkModule 传递到每个 Block class。对我来说,这敲响了警钟,它将管理器与被管理器联系在一起,并且还浪费 space 保存该实例。我觉得必须有更好的方法来做到这一点,这样他们就不会相互依赖。

您是否考虑过在您的游戏中添加“消息总线”模块?

基本上,您希望在组件之间发送消息,而不是让它们相互耦合。这就是 Mediator Pattern.

的目的

您可以创建您的组件订阅的主题以获得状态更新。您的组件也可以发布到此主题以通知其他组件其状态已更改。

我不会输入代码的细节,因为我现在没有太多时间,但这里有一些想法:

  • 您的 Mediator 对象应该包含一个映射,其键是“主题”,值是“订阅者”列表
  • 每当在特定主题中发布消息时,都应通知所有订阅者
  • 您的组件将“订阅”Mediator 的相关主题,以便从其他组件接收更新。
  • 您的组件应该知道您的 Mediator。这应该是他们之间唯一的交流方式。当组件状态发生变化时,它应该通过发布关于特定主题的消息(比如“BlockChange”)来通知其他组件。
  • 此消息不一定是纯文本。它可以是一个适当的对象,包含所有相关数据,这些数据将允许其他组件了解更改。此消息甚至可以包含对自身发生更改的对象的引用。

这是一些一般性的想法,让我们看看您是否可以从这里得到一些东西...