Winforms 公共方法或订阅查看事件

Winforms 公共方法或订阅查看事件,winforms,mvp,Winforms,Mvp,我已经编写了一个MVP项目,其中视图是一个WinForm,它实现了我的IView接口。 我正在审查代码,尽可能改进代码,并想询问您对视图和演示者如何交互的想法。您认为以下哪项是最佳实践 公开视图要使用的presenter类的方法。(即公开) 让演示者收听View类引发的事件 例如,我的MVP使用通过串行端口进行通信的服务。要连接到远程设备,“我的视图”将调用public Presenter方法connect(),然后该方法将调用相应的服务方法 引发Connect()事件并让演示者监听是否是更好的

我已经编写了一个MVP项目,其中视图是一个WinForm,它实现了我的IView接口。 我正在审查代码,尽可能改进代码,并想询问您对视图和演示者如何交互的想法。您认为以下哪项是最佳实践

  • 公开视图要使用的presenter类的方法。(即公开)
  • 让演示者收听View类引发的事件
  • 例如,我的MVP使用通过串行端口进行通信的服务。要连接到远程设备,“我的视图”将调用public Presenter方法connect(),然后该方法将调用相应的服务方法


    引发Connect()事件并让演示者监听是否是更好的做法?

    通常,我的工作方式是视图依赖于演示者,演示者依赖于模型。这意味着同一模型可供多个演示者使用,同一演示者可用于我的多个视图(不同的UI布局,或Winforms vs Web等)。为了方便这一点,视图调用演示者上的公共方法,并侦听来自演示者的事件,以说明数据何时发生了更改


    例如,您可能希望以这种方式工作,请想象一个界面有两个视图,一个用于初学者用户,另一个用于专家,初学者视图显示专家命令的子集。如果这两个视图都使用同一个演示者,那么初学者视图将需要公开所有专家命令的事件,因为演示者需要它们在那里,这样它就可以绑定到它们——即使它们永远不会被触发。另一方面,演示者可以公开所有专家选项的方法,而初学者视图从不调用它们,这意味着视图和演示者都没有实现未使用的功能

    我在这里遵循的原则是:“presenter中的公共方法应该是无参数的。View对象应该只访问presenter的无参数方法。另一个选项是View可以定义presenter可以订阅的事件。无论哪种方式,都不应该传递参数。”。接受建议和评论。

    同意!在项目中使用选项2很长时间后,我们改为选项1(将视图调用引入演示者)。减少复杂性和工作量。你能回答吗?