1

似乎一个表单应该是独立的,但这是我的困境:

我有一个名为GameMap. 它存在于MapForm一切都很好的地方。它可以自己编辑,等等。但是,我也有一个TilesetForm并且LayerForm我正在传递GameMap给这些对象 - 但后来我发现我还需要在图层表单和地图编辑器之间传递 CurrentLayer,以便它们可以编辑和被选中另一种形式。接下来我知道 - 两者之间的依赖关系非常紧密。瓦片集的唯一目的是服务于MapForm,那么将它们耦合在一起是否有意义?

我怎样才能明确这一点-我不能使用构造函数,因为表单可能未激活-现在我只是SwitchContext在聚焦新地图表单时调用。

4

1 回答 1

2

您可以通过使用事件来处理这个问题。

与其将地图的实例传递给瓦片集并让瓦片集在发生某些事情时直接操纵地图,不如在发生重要事件时在瓦片集中定义一个事件。然后地图可以订阅这些事件并执行一些操作。然后,tileset 不需要知道任何关于地图的信息。

如果地图在逻辑上“拥有”瓦片集没有意义,那么它甚至不会直接订阅事件。拥有一个“了解”图块集和地图的第 3 方(一些更高级别的概念)可能是有意义的;然后它会为瓦片集订阅一个事件处理程序,并在事件处理程序中调用地图上的一些适当方法。(这种方法使得即使是这个高级概念也不知道地图的具体 UI 实现。)

于 2013-08-05T18:27:55.227 回答