经过一段时间努力终于把WebForm下的Front Contoller模式初型完成;虽然框架和MonoRail是基于同一种模式,但有最大的区别就是该框架的Controller是依赖于接口完全脱离Asp.net相关的特性;使用者可以在Controller中专注于业务逻辑的处理,对于页面的输出和控制由接口的实现者去完成,这样Controller就可以得到更好灵活性。框架的另一特点就是接口成员数据自动绑定和自动切入Controller功能的透明性,使用者并不用理会这些只要简单的配置一下Controler和View程序集即可。由于组件提供以上方便功能,即使在使用时没有传统WebForm的事件区动和视图状态管理的同时也能达到方便快速的开发效果。

框架还是初型阶段,但在简单的使用上已经相当好的效果。下面通过简单的例子来看下这个框架在开发中有多方便。

登陆例程:

制定登陆相关接口和处理的Controller

public interface ILogin

{

string UserName

{

get;

set;

}

string PassWord

{

get;

set;

}

}

[HFSoft.MVC.FormMapper("~/FrmLogin.aspx")]

public void Login(Views.ILogin login)

{

//..

}

根据接口描述创建相关的Aspx页面:

<form method="post" action="FrmLogin.aspx" >

<div>

<table>

<tr>

<td style="width: 100px">

用户名</td>

<td style="width: 100px">

<input id="Text1" name="username" type="text" value="<% context.ToValue(login.UserName); %>" /></td>

</tr>

<tr>

<td style="width: 100px">

登陆</td>

<td style="width: 100px">

<input id="Text2" name="password" type="text" value="<% context.ToValue(login.PassWord); %>" /></td>

</tr>

<tr>

<td style="width: 100px">

</td>

<td style="width: 100px">

<input id="Submit1" type="submit" value="登陆" /></td>

</tr>

</table>

</div>

</form>

在新建Aspx文件时和传统的Aspx文件有所不同:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MVC_Sample1.WebForm1" %>

<%@ Page Language="C#" AutoEventWireup="true" Inherits="HFSoft.MVC.FormContext" %>

对于页面在接收请求后是如果创建相关接口实例、绑定数据成员和切入到相关Controller中都是对使用者透明的(使用者唯一要做的就是配置实现接口对象的程序集)。

数据查询例程:

这个例程的接口描述相对复杂一点,因为接口某一成员是对象类型。即使是这样框架也能够进行数据绑定和对象创建。

public interface ICustomerView

{

IList<NorthWind.Entities.Customers> Customers

{

get;

set;

}

CustomerFilter Filter

{

get;

set;

}

}

public class CustomerFilter

{

private string mCompanyName;

public string CompanyName

{

get

{

return mCompanyName;

}

set

{

mCompanyName = value;

}

}

}

[HFSoft.MVC.FormMapper("~/FrmCustomerView.aspx")]

public void CustomerView(Views.ICustomerView view)

{

view.Customers = view.Filter.GetExpression().List<NorthWind.Entities.Customers>();

}

框架提供以属性标记的方式合保证成员对象的创建和绑定,因此接口实现者必通过属性的方式来标记成员。标记过程也是非常方便和简单:

private CustomerFilter mFilter;

[HFSoft.MVC.Bind("filter")]

public CustomerFilter Filter

{

get

{

return mFilter;

}

set

{

mFilter = value;

}

}

 

页面代码

<form id="form1" action="FrmCustomerView.aspx" method ="post" >

<div>

<table>

<tr>

<td>

<table>

<tr>

<td style="width: 100px">

公司名称</td>

<td style="width: 100px">

<input id="Text1" name="filter.companyName" value="<% context.ToValue(view.Filter.CompanyName); %>" type="text" /></td>

<td style="width: 100px">

地区</td>

<td style="width: 100px">

<input id="Text2" name="filter.region" value="<% context.ToValue(view.Filter.Region); %>" type="text" /></td>

</tr>

<tr>

<td style="width: 100px">

城市</td>

<td style="width: 100px">

<input id="Text3" name="filter.city" value="<% context.ToValue(view.Filter.City); %>" type="text" /></td>

<td style="width: 100px">

</td>

<td style="width: 100px">

<input id="Submit1" type="submit" value="查询" /></td>

</tr>

</table>

</td>

</tr>

<tr><td>公司名称</td><td>地区</td><td>城市</td></tr>

<%

foreach (NorthWind.Entities.Customers item in view.Customers)

{

%>

<tr><td><%context.ToValue(item.CompanyName); %></td><td><%context.ToValue(item.Region); %></td><td><%context.ToValue(item.City); %></td></tr>

<% }%>

</table>

</div>

</form>

以上例程中输入控件虽然不是服务控件,但都可以在提效后得到保存;这归功于框架的绑定功能,由于接口成员和页面元素值的自动绑定,使得在提交后可以通过当前接口重新得到信息。

框架还在不断完善中,正在构想加入Controller执行拦载功能接口,错误处理拦载接口等功能;有兴趣或有意见的朋友多提一下意见。

下载例程代码

基于WebForm的Front Controller模式框架相关推荐

  1. 《大话设计模式(C#实现)》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+设计模式+GoF+UML+单例模式+观察者模式+抽象工厂+代理模式+框架编程+立钻哥哥++OK+)

    <大话设计模式(C#实现)> 版本 作者 参与者 完成日期 备注 YanlzFramework_GoF_V01_1.0 严立钻 2020.02.10 ##<大话设计模式(C#实现)& ...

  2. 在 ASP.NET 中使用 HTTPHandler 实现 Front Controller

    http://msdn.microsoft.com/zh-cn/library/ms998532.aspx 背景信息 示例有助于解释如何在 ASP.NET 中实现 Front Controller,并 ...

  3. php7 开发框架,Lin是一套基于php7.2的全新web框架

    Lin/1.0 介绍 Lin是一套基于php7.2的全新web框架,它具有一套全组件化的开发理念,避免了以往web框架可定制性差.扩展开发繁杂.布局耦合度较高等缺点,完美实现了三重分离:应用层.框架层 ...

  4. Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版 没有什么不可能  之前一直用的是自 ...

  5. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

    基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复 ...

  6. 基于python的界面自动化测试-基于Selenium+Python的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  7. 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】

    基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...

  8. 浅析基于 Serverless 的前后端一体化框架

    概述 Serverless 是一种"无服务器架构"模式,它无需关心程序运行环境.资源及数量,只需要将精力聚焦到业务逻辑上的技术.基于 Serverless 开发 web 应用,架构 ...

  9. 【Unity3D插件】UniRx(基于Unity的响应式编程框架)插件学习

    一.介绍UniRx插件 UniRx是一种基于Unity3D的响应式编程框架. UniRx就是Unity版本的Rx响应式扩展,响应式就是观察者和定时器,扩展指的是LINQ的操作符.Rx响应式扩展的特点就 ...

最新文章

  1. 阿里云 Ubuntu PHP7 Nginx Mysql 开发环境搭建
  2. 车辆贷款违约预测挑战赛
  3. Windows XP中安装虚拟网卡microsoft loopback adapter
  4. stm32 Fatfs 读写SD卡
  5. 进程间通信————无名管道
  6. H.264中的I_PCM模式
  7. 2021年即墨萃英中学高考成绩查询,2017即墨萃英中学青岛十九中录取分数线发布...
  8. VL1_四选一多路器(完整RTL、Testbench和覆盖率)
  9. 大数据分析-第十二章 Spark与数据分析
  10. Office操作技巧——利用Excel实现文件夹批量重命名
  11. matlab语法 axis on,matlabaxis
  12. 【Unity】Sprite Atlas功能讲解
  13. Spring的9处调用后置处理器
  14. android nfc扇区加密,android NFC MifareClassic 读IC卡加密扇区方法
  15. 镜头的焦距与视场角简介!
  16. 解决backtrack5连接不上ssh问题
  17. 正则表达式到底是什么?
  18. 华硕笔记本电脑怎么恢复出厂设置,华硕恢复出厂设置教程
  19. [软件工具][windows]pdf指定区域OCR识别重命名工具使用教程
  20. iPhone13首批售罄连夜补货,粉色款爆红,天猫3分钟售罄!

热门文章

  1. 免息月供137元,新iPhone SE有7大理由值得买!但反对只需这1个就够了
  2. 发表论文不用愁,十大技巧治秃头
  3. 大S变汪太!与汪小菲注册结婚
  4. Token 防盗链详解
  5. Git分支合并:Merge、Rebase的选择
  6. 阿里云工业互联网平台开发样例
  7. windows下命令行终端使用rz上传文件参数详解
  8. Teradata join 优化
  9. 不同交换机不通过trunk在vlan间通信
  10. proftpd登陆速度慢的解决[转]