快速业务通道

领悟Web设计模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
)
  {
    dataGrid.DataSource = SQLHelper.GetSubject( dropDownList.SelectedValue );
    dataGrid.DataBind();
  }

修改后的代码非常清晰,M-V-C各司其制,对任意模块的改写都不会引起其他模块的变更,类似于MFC中Doc/View结构。但是如果相同结构的程序很多,而我们又需要做一些统一的控制,如用户身份的判断,统一的界面风格等;或者您还希望Controller与Model分离的更彻底,在Controller中不涉及到Model层的代码。此时仅仅靠MVC模式就显得有点力不从心,那么就请看看下面的Page Controller模式。

Page Controller模式下的WebForm

MVC 模式主要关注Model与View之间的分离,而对于Controller的关注较少(在上面的MVC模式中我们仅仅只把Model和Controller分离开,并未对Controller进行更多的处理),但在基于WebForm的应用程序中,View和Controller本来就是分隔的(显示是在客户端浏览器中进行),而Controller是服务器端应用程序;同时不同用户操作可能会导致不同的Controller策略,应用程序必须根据上一页面以及用户触发的事件来执行不同的操作;还有大多数WebForm都需要统一的界面风格,如果不对此处理将可能产生重复代码,因此有必要对Controller进行更为仔细的划分。

Page Controller模式在MVC模式的基础上使用一个公共的页基类来统一处理诸如Http请求,界面风格等,如图:

领悟Web设计模式

传统的WebForm一般继承自System.Web.UI.Page类,而Page Controller的实现思想是所有的WebForm继承自定义页面基类,如图:

领悟Web设计模式

利用自定义页面基类,我们可以统一的接收页面请求、提取所有相关数据、调用对Model的所有更新以及向View转发请求,轻松实现统一的页面风格,而由它所派生的Controller的逻辑将变得更简单,更具体。

下面看一下Page Controller的具体实现:

Page Controller(BasePage.cs):
public class BasePage : System.Web.UI.Page
{
   private string _title;
   public string Title//页面标题,由子类负责指定
   {
     get
     {
       return _title;
     }
     set
     {
       _title = value;
     }
   }
   public DataSet GetPortalDataSource()
   {
     return SQLHelper.GetPortal();
   }
   public DataSet GetSubjectDataSource( string portalId )
   {
     return SQLHelper.GetSubject( portalId );
   }
   protected override void Render( HtmlTextWriter writer )
   {
     writer.Write( "<html><head><title>" + Title + "</title></head><body>" );//统一的页面头
     base.Render( writer );//子页面的输出
     writer.Write( @"<a href=""http://www.asp.net"">ASP.NET</a></body></html>" );//统一的页面尾
   }
}

现在它封装了Model的功能,实现了统一的页面标题和页尾,子类只须直接调用:

修改后的Controller(webForm.aspx.cs):

public class webForm : BasePage//继承页面基类
{
   private void Page_Load(object sender, System.EventArgs e)
   {
     Title = "Hello, World!";//指定页面标题
     if ( ! IsPostBack )
     {
       dropDownList.DataSource = GetPortalDataSource();//调用基类的方法
       dropDownList.DataTextField = "portalName";
       dropDownList.DataValueField = "portalId";
       dropDownList.DataBind();
     }
   }
   priv

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号