对WebForm实现Front Controller模式改进的构思

本文介绍了一种改进WebForm中FrontController模式的方法,通过隔离Page和Controller、建立上下文容器以及接口成员信息自动绑定等手段,提高Controller的灵活性和职责明确性。

       当使用了MonoRail后发现自己更偏向于使用Front Controllers模式,虽然这模式下缺少了Asp.net服务控件和基于事件驱动的功能,但是功能职责划分更细致明确;于是在WebForm的基础上实现Front Controller模式;实现后发现Controller始终依赖于PageHttpContext对象才能进行功能处理,这样Controller除了职责不明确外还导致和Page偶合性太高。为了让Controller不关注Asp.Net相关特性,专注于逻辑的处理于是想出了以下改进方法。

1)  隔离PageController,Controller的处理信息依赖于接口,接口本身定义并不包含任何Asp.Net相关特别性描述。

2)  建立上下文容器进行接口实例的切入,让开发者不用关心接口信息的来源。

3)  接口成员信息自动绑定。

模式改进后的处理结构图:

mvcpic1.GIF

当使用者请求页面时,框加会通过PageContext进行相关Controller方法定位操作,当查找到相关方法后自动绑定相关接口实例并传递给相关的方法。页面最终根据接口描述的信息进行输出。

下面通过代码了解Page-IView-Controller的处理关系。

首先定义视图描述接口:

/// <summary>

/// 描述订单查询的处理规则

/// </summary>

public interface IOrderView

{

 

    [Bind]

    string CustomerID

    {

        get;

        set;

    }

    [Bind]

    string EmployeeID

    {

        get;

        set;

    }

    System.Collections.Generic.IList<Orders> Items

    {

        get;

        set;

    }

}

 

相关的Controller行为:

public class Controller

{

    [FormMapper("~/FrmOrderView.aspx")]//主要用提供Context的方法定位

    public void OrderView(IOrderView orderview)

    {

        if (orderview.CustomerID != null)

        {

            //...

        }

        if (orderview.EmployeeID != null)

        {

            //...

        }

        //orderview.Items=find Data

    }

}

 

Controller处理完成后,页面就可以根据接口信息进行输出.

<% IOrderView view = (IOrderView)this.View;

foreach(Order item in view.Items)

{

%>

<tr>

    <td><%=item...... %></td>

    <td><%=item...... %></td>

    <td><%=item...... %></td>

</tr>

<%} %>

 

从以上代码可以看到Controller具备处理IOrderView的能力,IOrderView的实例不管是Asp.Net创建还是WinFrom下创建都不会影响Controller处理功能,这样Controller的灵活性就更高。

该模式现在还是在构想阶段,有意见或想法的朋友多提一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值