将两种形式结合在一起是不是很糟糕?

时间:2013-08-05 18:06:59

标签: c# coupling

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

我有一个名为GameMap的对象。它存在于MapForm上,这一切都很好。它可以编辑自己等等。但是,我还有一个TilesetFormLayerForm我正在GameMap传递给这些对象 - 但后来我发现我还需要通过CurrentLayer在图层表单和地图编辑器之间,以便他们可以在另一个表单上进行编辑和选择。我知道的下一件事 - 两者之间的依赖关系几乎捆绑在一起。 tileset的唯一目的是为MapForm提供服务,因此映射意义只是将它们结合在一起?

如何使其显式化 - 我无法使用构造函数,因为表单可能未处于活动状态 - 现在我只是在关注新地图表单时调用SwitchContext

1 个答案:

答案 0 :(得分:2)

您可以通过使用事件来解决此问题。

不是将地图的实例传递给tileset并且在事件发生时让tile集直接操作地图,而是在重要事件发生时在tileset中定义事件。然后,地图可以订阅这些事件并执行某些操作。然后,tileset根本不需要了解地图。

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