如何为简单游戏布局解耦类结构?

时间:2011-08-23 06:20:33

标签: c# design-patterns

现在我有六个班级:

  1. 侦听器 - 管理套接字连接
  2. 世界 - 实体和任务的集合
  3. Ticker - 更新世界的坐标
  4. MessageProcessor - 接收来自玩家的命令
  5. 智力 - 控制非玩家角色的行为
  6. 任务 - 跟踪和执行任务
  7. 但是它们就像是意大利面条,在整个地方互相引用......世界是MessageProcessor,Intelligence和Tasks类修改的数据模型。 Ticker协调这三个更新世界的课程。 MessageProcessor使用Listener来输入消息,并通过其他类来推送更新。

    我该如何改善这种情况?

2 个答案:

答案 0 :(得分:4)

不久前我给了related answer。主题是提高代码的可测试性,一般的解决方案是放松耦合。之前的答案主要集中在将网络相关代码与世界解耦,这是逻辑,因为网络代码不是单元可测试的,也是模拟的痛苦。

给出的解决方案是使用接口来传入消息,这样就可以将MessageProcessor(在其他帖子中名为Handler)与网络代码分离,同样地,将UpdateNotifier与World分离。

enter image description here

虚线只是由接口或委托处理的间接引用。现在世界和网络组件之间没有直接关系,使其可测试。这实际上只是Model View Adapter模式的应用。

M-V-A

这与您所描述的设计似乎没有什么不同,除非您缺少一些接口。有了这种基于接口的UpdateNotifiers用于推送更新的模式,我基本上重用了相同的架构来处理NPC,任务或其他在其他地方处理的东西。您可以选择特定区域所需的事件通知程序,并为它们实现具体的Notifier类,以便在同一模型上有多个适配器。

enter image description here

这真的看起来比现在看起来更复杂。 World对象与其他任何东西没有直接的依赖关系,并且每个其他类最多只有一个直接依赖关系。您也可以将计时器与World隔离开来,因为它可能不需要 - 但也许最大的障碍之一就是处理不同适配器之间的同步。

答案 1 :(得分:3)