似乎一个表格应该是独立的,但这是我的困境:
我有一个名为GameMap
的对象。它存在于MapForm
上,这一切都很好。它可以编辑自己等等。但是,我还有一个TilesetForm
和LayerForm
我正在GameMap
传递给这些对象 - 但后来我发现我还需要通过CurrentLayer在图层表单和地图编辑器之间,以便他们可以在另一个表单上进行编辑和选择。我知道的下一件事 - 两者之间的依赖关系几乎捆绑在一起。 tileset的唯一目的是为MapForm
提供服务,因此映射意义只是将它们结合在一起?
如何使其显式化 - 我无法使用构造函数,因为表单可能未处于活动状态 - 现在我只是在关注新地图表单时调用SwitchContext
。
答案 0 :(得分:2)
您可以通过使用事件来解决此问题。
不是将地图的实例传递给tileset并且在事件发生时让tile集直接操作地图,而是在重要事件发生时在tileset中定义事件。然后,地图可以订阅这些事件并执行某些操作。然后,tileset根本不需要了解地图。
如果地图逻辑上“拥有”tileset没有意义,那么它甚至不会直接订阅事件。有一个第三方(一些更高级别的概念)“了解”瓷砖集和地图可能是有意义的;然后它会为tile集订阅一个事件处理程序,并在事件处理程序中调用地图上的一些适当的方法。 (这种方法即使这个高级概念也不知道地图的特定UI实现。)