快速业务通道

领悟Web设计模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
HttpContext context )
   {
     Command command = CommandFactory.Make( context.Request.Params );
     command.Execute( context );
   }
   public bool IsReusable
   {
     get
     {
       return true;
     }
   }
}

而它又会调用类CommandFactory的Make方法来处理接收到的参数并返回一个Command对象,紧接着它又会调用该Command对象的Execute方法把处理后参数提交到具体处理的页面。

public class CommandFactory
{
   public static Command Make( NameValueCollection parms )
   {
     string requestParm = parms["requestParm"];
     Command command = null;
     //根据输入参数得到不同的Command对象
     switch ( requestParm )
     {
       case "1" :
         command = new FirstPortal();
         break;
       case "2" :
         command = new SecondPortal();
         break;
       default :
         command = new FirstPortal();
         break;
     }
     return command;
   }
}
public interface Command
{
   void Execute( HttpContext context );
}
public abstract class RedirectCommand : Command
{
   //获得Web.Config中定义的key和url键值对,UrlMap类详见下载包中的代码
   private UrlMap map = UrlMap.SoleInstance;
   protected abstract void OnExecute( HttpContext context );
   public void Execute( HttpContext context )
   {
     OnExecute( context );
     //根据key和url键值对提交到具体处理的页面
     string url = String.Format( "{0}?{1}", map.Map[ context.Request.Url.AbsolutePath ], context.Request.Url.Query );
     context.Server.Transfer( url );
   }
}
public class FirstPortal : RedirectCommand
{
   protected override void OnExecute( HttpContext context )
   {
     //在输入参数中加入项portalId以便页面处理
     context.Items["portalId"] = "1";
   }
}
public class SecondPortal : RedirectCommand
{
   protected override void OnExecute(HttpContext context)
   {
     context.Items["portalId"] = "2";
   }
}
最后在ActWebForm.aspx.cs中:
dataGrid.DataSource = GetSubjectDataSource( HttpContext.Current.Items["portalId"].ToString() );
dataGrid.DataBind();

上面的例子展示了如何通过Front Controller集中和处理所有的请求,它使用CommandFactory来确定要执行的具体操作,无论执行什么方法和对象,Handler只调用Command对象的Execute方法,您可以在不修改 Handler的情况下添加额外的命令。它允许让用户看不到实际的页面,当用户输入一个URL时,然后系统将根据web.config文件将它映射到特定的URL,这可以让程序员有更大的灵活性,还可以获得Page Controller实现中所没有的一个间接操作层。

对于相当复杂的Web应用我们才会采用Front Controller模式,它通常需要将页面内置的Controller替换为自定义的Handler,在Front Controllrer模式下我们甚至可以不需要页面,不过由于它本身实现比较复杂,可能会给业务逻辑的实现带来一些困扰。

以上两个Controller模式都是处理比较复杂的WebForm应用,相对于直接处理用户输入的应用来讲复杂度大大提高,性能也必然有所降低,为此我们最后来看一个可

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号