我正在自学“模型视图展示器视图模型设计模式”,准备加入一个新项目,该项目将使用WinForms模式(NOT WPF)。
在我的研究中,我看到使用Presenter时模式的不同用法。我见过的一些站点通过构造函数传递了ViewModel对象以及视图,另一个站点在模型中作为接口和视图传递,最后另一个只是在演示者类中实例化模型的视图。
通过展示不同的方式,我的问题是,演示者的正确实现是什么,应该像MVP一样,视图和模型被传递,或者使用什么样的风格并不重要?
由于
答案 0 :(得分:3)
简短回答:在我看来,无论如何,只要你保持一致并确保你已经拆开部件进行测试。
<小时/> 由于两个主要原因,您遇到了很多不同的文章。
一,MVP(传统)有两种主要方法:
这些链接来自Jeremy Miller的伟大且不完整的“Build your own CAB”系列。 MSDN上还有this article可供进一步阅读。
二,还有两条主要建设路线:
您可以想象,一个意味着您从Presenter开始,然后请求/构建视图,反之亦然。有各种各样的,没有一个是“错误的”。
这种解耦的主要驱动因素是单元测试。如果你的解耦能够通过诸如抽象实现和分离问题之类的东西进行测试,那么你就没有把它做错了。
您的MVP-VM混合方法也不正确,但您需要查看正在播放的角色以及方法各部分中包含的职责。
<小时/> 我和你以前完全一样,自学这种模式。由于互联网上出现的所有不同方法,我陷入了一种学习的僵局,我一直担心自己做错了事。
然后我意识到我对该模式的特定实现非常担心。模式的要点不是它的实现,而是它试图实现的目标以及它试图解决的问题。 MVP是UI层的解耦和关注分离方法,尤其适用于WinForms。它与MVVM和MVC共享此目的。坚持租户并忽略实施细节差异,你会做得很好。
我有一个旧的示例应用程序,包含这个学习之旅。在WinForms中,您需要在后台创建许多引导代码来管理诸如显示/隐藏视图,导航,创建/部署演示者等内容。