现在我有六个班级:
但是它们就像是意大利面条,在整个地方互相引用......世界是MessageProcessor,Intelligence和Tasks类修改的数据模型。 Ticker协调这三个更新世界的课程。 MessageProcessor使用Listener来输入消息,并通过其他类来推送更新。
我该如何改善这种情况?
答案 0 :(得分:4)
不久前我给了related answer。主题是提高代码的可测试性,一般的解决方案是放松耦合。之前的答案主要集中在将网络相关代码与世界解耦,这是逻辑,因为网络代码不是单元可测试的,也是模拟的痛苦。
给出的解决方案是使用接口来传入消息,这样就可以将MessageProcessor(在其他帖子中名为Handler)与网络代码分离,同样地,将UpdateNotifier与World分离。
虚线只是由接口或委托处理的间接引用。现在世界和网络组件之间没有直接关系,使其可测试。这实际上只是Model View Adapter模式的应用。
这与您所描述的设计似乎没有什么不同,除非您缺少一些接口。有了这种基于接口的UpdateNotifiers用于推送更新的模式,我基本上重用了相同的架构来处理NPC,任务或其他在其他地方处理的东西。您可以选择特定区域所需的事件通知程序,并为它们实现具体的Notifier类,以便在同一模型上有多个适配器。
这真的看起来比现在看起来更复杂。 World对象与其他任何东西没有直接的依赖关系,并且每个其他类最多只有一个直接依赖关系。您也可以将计时器与World隔离开来,因为它可能不需要 - 但也许最大的障碍之一就是处理不同适配器之间的同步。
答案 1 :(得分:3)