c# - 使用 MVP-VM 设计模式在 Presenter 中正确使用模型

标签 c# design-patterns mvp

我正在自学 Model View Presenter View Model Design Pattern 以准备加入一个新项目,该项目将使用 WinForms(不是 WPF)的模式。

在我的研究中,我看到了在使用 Presenter 时模式的不同用途。我见过的一些网站通过构造函数传入 ViewModel 对象和 View ,另一个网站将模型作为接口(interface)和 View 传入,最后还有一个只是在演示者类中实例化模型的 View 。

随着显示方式的不同,我的问题是,presenter 的正确实现是什么,应该像 MVP 一样传递 View 和模型,还是不管使用什么样式?

谢谢

最佳答案

简短回答:在我看来,这并不重要,只要您保持一致并确保已将部件分离以进行测试即可。


您遇到很多不同的文章有两个主要原因。

一、MVP(传统)主要有两种方法:

这些链接来自杰里米·米勒 (Jeremy Miller) 的伟大但不完整的“构建您自己的 CAB”系列。还有this article在 MSDN 上进一步阅读。

二、主要的 build 路线也有两条:

  • 演示者优先
  • 先查看

如您所想,一个意味着您从 Presenter 开始,然后 Presenter 请求/构建 View ,反之亦然。有各种各样的看法,但没有一个是“错误的”。

这种分离的主要驱动力是单元测试。如果您的解耦能够通过抽象实现和分离关注点等方式进行测试,那么您并没有做“错”。

您的 MVP-VM 混合方法也没有错,但您需要查看所扮演的角色以及该方法每个部分中包含的职责。


我和你之前做的完全一样,自学这个模式。由于互联网上有各种不同的方法,我让自己陷入了学习的僵局,我一直担心自己做错了事情。

然后我意识到我非常担心该模式的特定实现。模式的重点不在于它的实现,而在于它试图实现的目标和它试图解决的问题。 MVP 是一种针对 UI 层的解耦和关注点分离方法,特别适合 WinForms。它与 MVVM 和 MVC 共享此目的。坚持租户并忽略实现细节差异,您会做得很好。

我在某处有一个包含此学习之旅的旧示例应用程序。在 WinForms 中,您需要在后台创建大量引导代码来管理诸如显示/隐藏 View 、导航、创建/处置演示者等内容。

关于c# - 使用 MVP-VM 设计模式在 Presenter 中正确使用模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29970753/

相关文章:

c# - 从代码中确定我的进程以哪个用户身份运行

c++ - 递归策略模式

android - 使用 RxJava2 PublishSubject 管理 null bool 值

c# - Azure 文件挂载到云服务

c# - 为我自己的类型在 byte[] 上实现 Linq 查询

c# - 努盖特/MSBuild : Build for multiple 3rd Party DLL versions

c# - 使用 C# 的存储库模式的通用业务层设计(如何)

unit-testing - 测试复合模式

javascript - JavaScript 中的被动 View

android - 实现 MVP 时,在 Android 中保留 Presenter 的最佳做法是什么?