2011-08-30 126 views
3

我明白为什么Model-View-Presenter模式是一个好模式的一般原因。它分离了关注点,以便处理向用户呈现信息的代码的相同部分不用担心计算等。我的问题是为什么我们需要一个基本上什么都不做的视图?所有的观点都是告诉主持人做工作并从主持人那里得到结果。例如,在我的C#视图中,我经常会有一大堆事件处理程序调用在演示者中实现的委托。为什么不把观点和主持人结合起来?没有关切是真的分开,因为这个观点没有任何顾虑。模型 - 视图 - 演示者模式中“视图”的用途是什么?

+0

你为你的代码编写单元测试吗? –

+0

我不认为单元测试应该是我们对那些试图理解MVx的人的抨击。整个想法是以更合理的方式打破你的应用程序,其中组成是一个功能,而不是事后的想法。轻松进行单元测试的能力是这个的一个副产品。 – deanvmc

+0

@deanmvc同意,为控制器编写单元测试还是我不把控制器逻辑和视图结合起来最明显的方法。 –

回答

3

你的观点应该只是一种从用户获取数据的方式。任何与该功能没有特别关联的东西都应该推入Presenter(如果需要的话,可以是模型)。演示者处理视图获得的内容,但不应该关注一旦获取视图就会发生什么。

演示者试图以更语义的方式查看您的“UI”。您的视图上可能有2个文本框,但您的演示者会看到名称和姓氏。这个想法应该是,用最少量的保险丝,您可以将视图关闭并弹出另一个视图。

我不知道我对此有多认同,并倾向于选择MVVM,因为您没有演示者,相反,您有ViewModel,我觉得这是更好的方式来定义上述抽象。

+0

这很有道理。我认为我之所以没有真正理解的部分原因是因为在Visual Studio中的C#中,显示文本框等的代码是隐藏的,你并没有真正看到它。事实并非如此,该观点不会做任何事情。视图所做的工作代码,显示所有UI控件等,只是保存在另一个文件中,而您并不真正看。 – Daniel

5

两个重要的优点

  • 我们可以写多个视图或容易地更换次(例如的WinForms => WPF实现)

  • 我们通过创建测试视图增加可测试性单元测试

+0

现在你提到它,我确实为单元测试创​​建了测试视图。有趣的是,我从来没有想过这件事。 – Daniel

相关问题