1

我在 Windows 窗体应用程序中使用 MVP 模式。我需要更改视图上的单选按钮。我可以通过在视图上公开一个布尔属性来做到这一点,但是我应该使用事件来操作视图吗?

4

3 回答 3

5

这是纯洁与务实的问题……还有一点个人风格。没关系...事件只是比普通方法更有效,但更解耦。 亲自

  • 我喜欢保持视图解耦或不知道演示者,因此视图通过引发事件与演示者进行通信。这消除了视图对演示者的引用的需要。保持视图薄而愚蠢。
  • 另一方面,演示者通常具有对视图(和模型)的成员引用。因此,它可以通过接口进行方法调用来与视图对话(只要视图符合 IView 接口,就可以替换视图)。例如,在您的情况下, Set_X_Option(eOptionEnum) 将是 IView 接口的成员,然后演示者可以适当地调用该接口。

但是,您也可以通过两种方式使用事件来删除此 IView 依赖项(演示者引用了需要实例化和插入的 IView)......但是我发现它的工作量太大。上述方案从未让我失望过……然而。

于 2008-10-29T07:28:55.877 回答
2

使用“普通语言”分析,我会说“单选按钮是否显示是视图的属性”,因此使用实际属性将其传达给视图。

另一种(技术)可能性是在 Presenter 上发生一个事件,即RadioButtonVisibilityChangedView 监听该事件并通过EventArgs. 这与 View 独立且不了解 Presenter 背道而驰,因此破坏了 MVP 模式。我建议不要这样胡说八道。

于 2008-10-29T07:23:34.657 回答
1

通常,控制器通过属性更改视图并订阅视图引发的事件以了解更改。这是MVP 的一个很好的例子,尽管在 Asp.NET 中对于 Windows 窗体的工作原理基本相同。

于 2008-10-29T07:30:21.100 回答