把两种形式结合在一起不好吗

本文关键字:在一起 结合 两种 | 更新日期: 2023-09-27 18:26:27

看起来表单应该是独立的,但我的困境是:

我有一个名为GameMap的对象。它存在于一个良好的MapForm上。它可以编辑自己等等。然而,我也有一个TilesetFormLayerForm,我在GameMap中传递给这些对象,但后来我发现我还需要在层窗体和映射编辑器之间传递CurrentLayer,这样它们就可以在另一个窗体上编辑和选择。接下来我知道的是,两者之间的依赖关系几乎是紧密相连的。tileset的唯一目的是为MapForm服务,那么将它们结合在一起有意义吗?

我该如何明确这一点——我不能使用构造函数,因为表单可能不是活动的——现在我只是在关注新的映射表单时调用SwitchContext

把两种形式结合在一起不好吗

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

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

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