“视图”在“模型-视图-控制器”模式中的目的是什么?

3

我理解Model-View-Presenter模式是一个好的模式的一般原因。它将关注点分离,使得处理向用户呈现信息的代码部分不必担心计算等问题。我的问题是为什么我们需要一个本质上什么都不做的视图?所有视图要做的就是告诉Presenter去做工作,并从Presenter那里获取结果。例如,在我的C#视图中,我经常只有一堆事件处理程序,调用在Presenter中实现的委托。为什么不将视图和Presenter合并?因为视图没有任何关注点,所以没有任何关注点被分离。


你会为你的代码编写单元测试吗? - Iarek
我认为单元测试不应该是我们向那些试图理解MVx的人强调的重点。整个想法是以更合乎逻辑的方式拆分您的应用程序,从而将组合作为特性而非事后考虑的内容。轻松进行单元测试的能力是这一过程的副产品。 - deanvmc
@deanmvc 我同意,但我认为编写控制器的单元测试是不将控制器逻辑和视图组合在一起的最明显方法。 - Iarek
2个回答

5

两个重要的优点:

  • 我们可以轻松编写多个视图或替换视图(例如 WinForms => WPF 实现)

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


既然你提到了,我实际上确实为单元测试创建测试视图。有趣的是,我从来没有想过这一点。 - Daniel

3
您的视图只是从用户那里获取数据和传递数据的一种方式。除此之外,与该功能无关的任何内容都应该被推入到Presenter(或者如果需要的话,推入到model中)。Presenter处理视图获取的内容,但它不应该关心视图在获取内容后做了什么。
Presenter试图以更语义化的方式查看您的“UI”。您的视图上可能有两个文本框,但Presenter看到的是姓名和姓氏。理念应该是,在最小的熔断量下,您可以将View移开并放置另一个View。
我不知道我是否完全同意这一点,我倾向于更喜欢MVVM,其中没有Presenter,而是使用ViewModels,我认为这是定义上述抽象的更好方法。

这很有道理。我认为我之前没有真正理解的部分原因是因为在C#和Visual Studio中,显示文本框等控件的代码有点隐藏,你看不到它。实际上并不是视图什么都不做。视图所做的工作,即显示所有UI控件的代码等,只是保存在另一个文件中,你不会真正去看它。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接