基于WebForm的Front Controller模式框架
经过一段时间努力终于把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模式框架相关推荐
- 《大话设计模式(C#实现)》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+设计模式+GoF+UML+单例模式+观察者模式+抽象工厂+代理模式+框架编程+立钻哥哥++OK+)
<大话设计模式(C#实现)> 版本 作者 参与者 完成日期 备注 YanlzFramework_GoF_V01_1.0 严立钻 2020.02.10 ##<大话设计模式(C#实现)& ...
- 在 ASP.NET 中使用 HTTPHandler 实现 Front Controller
http://msdn.microsoft.com/zh-cn/library/ms998532.aspx 背景信息 示例有助于解释如何在 ASP.NET 中实现 Front Controller,并 ...
- php7 开发框架,Lin是一套基于php7.2的全新web框架
Lin/1.0 介绍 Lin是一套基于php7.2的全新web框架,它具有一套全组件化的开发理念,避免了以往web框架可定制性差.扩展开发繁杂.布局耦合度较高等缺点,完美实现了三重分离:应用层.框架层 ...
- Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版
2019独角兽企业重金招聘Python工程师标准>>> 摘要: Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版 没有什么不可能 之前一直用的是自 ...
- 基于Servlet+JSP+JavaBean开发模式的用户登录注册
基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复 ...
- 基于python的界面自动化测试-基于Selenium+Python的web自动化测试框架
一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...
- 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】
基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...
- 浅析基于 Serverless 的前后端一体化框架
概述 Serverless 是一种"无服务器架构"模式,它无需关心程序运行环境.资源及数量,只需要将精力聚焦到业务逻辑上的技术.基于 Serverless 开发 web 应用,架构 ...
- 【Unity3D插件】UniRx(基于Unity的响应式编程框架)插件学习
一.介绍UniRx插件 UniRx是一种基于Unity3D的响应式编程框架. UniRx就是Unity版本的Rx响应式扩展,响应式就是观察者和定时器,扩展指的是LINQ的操作符.Rx响应式扩展的特点就 ...
最新文章
- 阿里云 Ubuntu PHP7 Nginx Mysql 开发环境搭建
- 车辆贷款违约预测挑战赛
- Windows XP中安装虚拟网卡microsoft loopback adapter
- stm32 Fatfs 读写SD卡
- 进程间通信————无名管道
- H.264中的I_PCM模式
- 2021年即墨萃英中学高考成绩查询,2017即墨萃英中学青岛十九中录取分数线发布...
- VL1_四选一多路器(完整RTL、Testbench和覆盖率)
- 大数据分析-第十二章 Spark与数据分析
- Office操作技巧——利用Excel实现文件夹批量重命名
- matlab语法 axis on,matlabaxis
- 【Unity】Sprite Atlas功能讲解
- Spring的9处调用后置处理器
- android nfc扇区加密,android NFC MifareClassic 读IC卡加密扇区方法
- 镜头的焦距与视场角简介!
- 解决backtrack5连接不上ssh问题
- 正则表达式到底是什么?
- 华硕笔记本电脑怎么恢复出厂设置,华硕恢复出厂设置教程
- [软件工具][windows]pdf指定区域OCR识别重命名工具使用教程
- iPhone13首批售罄连夜补货,粉色款爆红,天猫3分钟售罄!