公共方法或订阅查看事件

Kil*_*are 4 mvp winforms

我编写了一个MVP项目,其中View是一个实现我的IView接口的WinForm.我正在审核代码,在可以的地方进行改进,并且想询问您关于视图和演示者如何交互的想法.您认为以下哪项是最佳做法?

  1. 公开presenter类的方法以供视图使用.(即将它们公之于众).
  2. 让演示者听取View类引发的事件.

例如,我的MVP使用通过serialport进行通信的服务.为了连接到远程设备,我的视图调用公共Presenter方法Connect(),然后调用相应的服务方法.

提升Connect()事件并让演示者听取它是更好的做法吗?

Mar*_*ris 6

通常我的工作方式是视图取决于演示者,演示者依赖于模型.这意味着多个演示者可以使用相同的模型,同一个演示者可以使用我的多个视图(不同的UI布局,或Winforms与Web等).为方便起见,视图调用演示者上的公共方法并侦听演示者发来的事件以说明数据何时发生变化.

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