我明白为什么Model-View-Presenter模式是一个好模式的一般原因。它分离了关注点,以便处理向用户呈现信息的代码的相同部分不用担心计算等。我的问题是为什么我们需要一个基本上什么都不做的视图?所有的观点都是告诉主持人做工作并从主持人那里得到结果。例如,在我的C#视图中,我经常会有一大堆事件处理程序调用在演示者中实现的委托。为什么不把观点和主持人结合起来?没有关切是真的分开,因为这个观点没有任何顾虑。模型 - 视图 - 演示者模式中“视图”的用途是什么?
回答
你的观点应该只是一种从用户获取数据的方式。任何与该功能没有特别关联的东西都应该推入Presenter(如果需要的话,可以是模型)。演示者处理视图获得的内容,但不应该关注一旦获取视图就会发生什么。
演示者试图以更语义的方式查看您的“UI”。您的视图上可能有2个文本框,但您的演示者会看到名称和姓氏。这个想法应该是,用最少量的保险丝,您可以将视图关闭并弹出另一个视图。
我不知道我对此有多认同,并倾向于选择MVVM,因为您没有演示者,相反,您有ViewModel,我觉得这是更好的方式来定义上述抽象。
这很有道理。我认为我之所以没有真正理解的部分原因是因为在Visual Studio中的C#中,显示文本框等的代码是隐藏的,你并没有真正看到它。事实并非如此,该观点不会做任何事情。视图所做的工作代码,显示所有UI控件等,只是保存在另一个文件中,而您并不真正看。 – Daniel
两个重要的优点
我们可以写多个视图或容易地更换次(例如的WinForms => WPF实现)
我们通过创建测试视图增加可测试性单元测试
现在你提到它,我确实为单元测试创建了测试视图。有趣的是,我从来没有想过这件事。 – Daniel
- 1. 模型 - 视图 - 演示者:为什么模型是静态的?
- 2. 模型 - 视图 - 演示者模式中的演示者是否应处理视图上的多个“UI”元素?
- 3. 模型 - 视图 - 演示者:验证UI
- 4. 模型视图演示者和复合视图
- 5. 模型,视图,视图模型和演示器
- 6. 视图模型定位器的用途是什么?
- 7. iOS中的模型,视图和演示者的不同框架?
- 8. 关于模型 - 视图 - 演示者(C#)的一般问题,模型是否应该知道演示者?
- 9. 模型 - 视图 - 使用虚拟网格的演示者
- 10. 在Android中实现模型 - 视图 - 演示者的困难
- 11. 什么是MVP模式中的“视图”?
- 12. 在演示者,GWT模型视图演示者之间传递控件/值?
- 13. ASP.NET Web窗体 - 模型视图演示者和用户控件
- 14. TDD模型视图演示者使用MOQ
- 15. 模型视图演示和Repeater
- 16. 模型视图演示者 - 处理更复杂的UI控件
- 17. SQL中视图的用途是什么?
- 18. 模型视图演示者,如何在视图之间传递实体?
- 19. 在模型视图中使用演示者中的工厂模型视图演示者和域驱动设计项目
- 20. 模型/视图/主持人:主持人对演示者通信
- 21. 模型视图演示者和iOS(Swift)架构
- 22. 模型视图演示者事件和问题分离
- 23. Mediator和Proxy在模型视图控制器模式中扮演什么角色
- 24. 是什么视图模型和AndroidViewModel
- 25. 什么是从多个视图模型
- 26. Reveal.js和演示者视图
- 27. 模型 - 视图 - 控制器(MVC)优于模型 - 视图的优点是什么?
- 28. 什么是模态视图?
- 29. 模型视图控制器与模型查看演示文稿
- 30. 从视图中添加模型的最佳方式是什么?
你为你的代码编写单元测试吗? –
我不认为单元测试应该是我们对那些试图理解MVx的人的抨击。整个想法是以更合理的方式打破你的应用程序,其中组成是一个功能,而不是事后的想法。轻松进行单元测试的能力是这个的一个副产品。 – deanvmc
@deanmvc同意,为控制器编写单元测试还是我不把控制器逻辑和视图结合起来最明显的方法。 –