学习ASP.NET MVC5框架揭秘笔记-PV与SC

1.                                   PVSC

解决View难以测试最好的办法就是让他无须测试。如果View不需要测试,其先决条件就是让它尽可能不涉及UI处理逻辑,这就是PV模式的目的所在。
如果我们纯粹的采用PV模式来设计View意味着我们需要将View中的UI元素通过属性的形式暴露出来。具体来说,当我们为View定义接口的时候,需要定义基于UI元素的属性使Presenter可以对View进行细粒度操作,但这并不意味着我们直接将View上的控件暴露出来。
举个例子,假如我们开发的HR系统中有这样一个界面,界面上有一个包含所有部门列表的DropDownList,还有一个是显示员工列表的GridView,还有一个查询按钮,我们可以通过查询按钮来讲选择的部门的员工显示出来。
        如果为该View定义一个接口IEmployeeView我们不能如下所示的代码将上述的两个控件直接以属性的形式显示出来。针对具体控件类型的数据绑定属于View的内部细节,不能体现在表示用于抽象View的接口中。

public interface IEmployeeView
{
<span style="white-space:pre">	</span>DropDownList     Departments{	  get; }
<span style="white-space:pre">	</span>GridView<span style="white-space:pre">	</span> Employees  {     get;}
}

正确的接口和实现该接口的View应该采用如下的定义方式:Presenter通过对属性DepartmentsEmployees赋值来实现对相应DropDownListGridView的数据绑定,同时通过属性SelectedDepartment得到用户选择的筛选部门。为了尽可能让接口只暴露必需的信息,我们还特意将对属性的读/写作了控制。

public interface IEmployeeView
{
<span style="white-space:pre">	</span>IEnumerable<String>			Departments{  set;}
<span style="white-space:pre">	</span>String					SelectedDepartment{   get;}
<span style="white-space:pre">	</span>IEnumerable<Employee>		<span style="white-space:pre">	</span>Employees{   set;}
}
public partial class EmployeeView : page , IEmployeeView
{
<span style="white-space:pre">	</span>public IEnumerable<string> Departments
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>Set
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>this.DropDownListDepartments.DataSource = value;
<span style="white-space:pre">			</span>this.DropDownListDepartments.DataBind();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>} 
<span style="white-space:pre">	</span>public string SelectedDepartment
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>get{
<span style="white-space:pre">			</span>return this.DropDownListDepartments.SelectedValue;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public IEnumerable<Employee>  Employees
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>set
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>this.GridViewEmployees.DataSource = value;
<span style="white-space:pre">			</span>this.GridViewEmployees.DataBind();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
}

   PV模式将所有的UI处理逻辑全部定义在Presenter上,意味着所有的UI处理逻辑都可以被测试,从可测试性的角度来看这是一种不错的选择。但它要求将View中可供操作的UI元素定义在对应的接口中,对于一些复杂的富客户端(Rich Client)应用的View来说,接口成员的数量可能会变得很多。另外,由于Presenter需要在控件级别对View进行细粒度的控制,这往往会使原本简单的逻辑复杂化。这种情况下我们往往采用SC模式。

   在SC模式下,为了降低Presenter的复杂度,我们倾向于将诸如数据绑定和显示数据格式化这样简单的UI处理逻辑转移到View中,这些处理逻辑会体现在View实现的接口中,尽管ViewPresenter接管了部分UI处理逻辑,但Presenter依然是整个三角关系的驱动者,View被动的地位依然没有改变。对于用户作用在View上的交互操作,View本身并不进行响应,它只会将交互请求转发给Presenter,后者在独立完成相应的处理流程(可能涉及针对对Model的调用)之后会驱动View对用户交互请求进行响应。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蒋金楠编*的《ASP.NET MVC5框架揭秘》以一个 模拟ASENET MVC内部运行机制的“迷你版MVC框架” 作为开篇,其目的在于将ASENET MVC真实架构的“全 景”勾勒出来。接下来本书以请求消息在ASENET MVC 框架内部的流向为主线将相关的知识点串联起来,力 求将“黑盒式”的消息处理管道清晰透明地展示在读 者面前。相信精读本书的读者一定能够将ASENET MVC :从接收请求到 响应回复的整个流程了然于胸,对包 括路由、Controller的激活、Model元数据的解析、 Action方法的选择与执行、参数的绑定与验证、过滤 器的执行及View的呈现等相关机制具有深刻的理解。   本书以实例演示的方式介绍了很多与ASENET MVC 相关的*佳实践,同时还提供了一系列实用性的扩展 ,相信它们一定能够解决你在真实开发过程中遇到的 很多问题。本书*后一章提供的案例不仅用于演示实 践中的ASENET MVC很多架构设计方面的东西也包含其 中。除此之外,本书在很多章节还从设计的角度对 ASENET MVC的架构进行了深入分析,所以从某种意义 上讲本书可以当成一本架构设计的书来读。   虽然与市面上任何一本相关的书相比,本书走得 *远,并*加近距离地触及ASENET MVC框架的内核, 但是就其内容本身来讲却没有涉及太多“高深莫测” 的知识点,所以阅读本书不存在太高的门槛。如果你 觉得自己对ASENET MVC所知甚少,可以利用此书来系 统地学习ASENET MVC;如果你觉得自己对ASENET MVC足够精通,一定能够在此书中找到相应的“盲点 ”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值