我在 Windows 窗体应用程序中使用 MVP 模式。我需要更改视图上的单选按钮。我可以通过在视图上公开一个布尔属性来做到这一点,但是我应该使用事件来操作视图吗?
kye
问问题
1638 次
3 回答
5
这是纯洁与务实的问题……还有一点个人风格。没关系...事件只是比普通方法更有效,但更解耦。 亲自
- 我喜欢保持视图解耦或不知道演示者,因此视图通过引发事件与演示者进行通信。这消除了视图对演示者的引用的需要。保持视图薄而愚蠢。
- 另一方面,演示者通常具有对视图(和模型)的成员引用。因此,它可以通过接口进行方法调用来与视图对话(只要视图符合 IView 接口,就可以替换视图)。例如,在您的情况下, Set_X_Option(eOptionEnum) 将是 IView 接口的成员,然后演示者可以适当地调用该接口。
但是,您也可以通过两种方式使用事件来删除此 IView 依赖项(演示者引用了需要实例化和插入的 IView)......但是我发现它的工作量太大。上述方案从未让我失望过……然而。
于 2008-10-29T07:28:55.877 回答
2
使用“普通语言”分析,我会说“单选按钮是否显示是视图的属性”,因此使用实际属性将其传达给视图。
另一种(技术)可能性是在 Presenter 上发生一个事件,即RadioButtonVisibilityChanged
View 监听该事件并通过EventArgs
. 这与 View 独立且不了解 Presenter 背道而驰,因此破坏了 MVP 模式。我建议不要这样胡说八道。
于 2008-10-29T07:23:34.657 回答
1
通常,控制器通过属性更改视图并订阅视图引发的事件以了解更改。这是MVP 的一个很好的例子,尽管在 Asp.NET 中对于 Windows 窗体的工作原理基本相同。
于 2008-10-29T07:30:21.100 回答