我有DependancyInject的结构问题。
情况
我正致力于为基于体素的游戏创建服务器;它完全被调制,但相关模块如下3。
NetworkModule(发送和接收数据包) WorldModule(处理世界相关事件和商店世界) 世界(存储所有区块并列出世界各地的球员) 阻止(有材料和其他一些领域)
问题
当在Block类中调用setMaterial(Material material)方法时," BlockChange"应该将数据包发送给世界上的所有玩家,让客户知道该块已经改变了类型。要发送该数据包,Block类必须能够访问NetworkModule。 WorldModule中存储了一个NetworkModule实例。从技术上讲,这可以很容易地解决,只需将WorldModule或NetworkModule传递到每个Block类中。对我来说,敲响了警钟,它将经理与管理人员联系在一起,同时也浪费了节省空间的实例。我觉得必须有一个更好的方法来做到这一点,使他们不相互依赖。
答案 0 :(得分:1)
您是否考虑在游戏中添加“消息总线”模块?
基本上,您希望在组件之间发送消息,而不是将它们相互耦合。这是Mediator Pattern的目标。
您可以创建组件订阅的主题,以获取状态更新。您的组件也可以发布到此主题,以通知其他组件其状态已更改。
我不会输入代码的详细信息,因为我现在没有太多时间,但这里有一些想法:
Mediator
对象应该包含一个地图,其键是“主题”,值是“订阅者”列表Mediator
的相关主题,以便从另一方接收更新。Mediator
。这应该是他们之间沟通的唯一手段。当组件状态发生变化时,它应该通过发布关于特定主题的消息来通知其他人(假设“BlockChange”)。这是一些一般性的想法,让我们看看你是否可以从这里到达某个地方......