本MVC框架基于C#语法实现,在传统的MVC框架中增加了一个Entity(数据实体)元素,V(视图)部分仅包含其对应的C(控制器)和E(实体,用于界面绑定)信息,M(模型)部分仅包含E(实体,用于数据传输)信息,C(控制器)包含了M(模型),V(视图)和E(实体,用于数据传输)信息,M(模型)和V(视图)之间通过C(控制器)进行耦合.
扩展框架的抽象层定义如下:
public interface MVCEntity<E>
{
}
public interface MVCController<V,E>
{
void PerformViewLoadEvent(MVCView<E> view);
void PerformViewAddEvent(MVCView<E> view);
E PerformViewSaveNewEvent(MVCView<E> view);
E PerformViewSaveModifyEvent(MVCView<E> view);
E PerformViewEditEvent(MVCView<E> view);
void PerformViewDeleteEvent(MVCView<E> view);
void PerformViewQueryEvent(MVCView<E> view);
void PerformViewCloseEvent(MVCView<E> view);
}
public interface MVCModel<E>
{
E Get(MVCEntity<E> entity);
void Delete(MVCEntity<E> entity);
E Save(MVCEntity<E> entity);
E Update(MVCEntity<E> entity);
List<E> Query(MVCEntity<E> entity);
}
public interface MVCView<E>
{
void ShowQuery(List<E> entities);
void ShowLoad();
void ShowMsg(string msg);
void ShowEntity(E entity);
void ShowAdd();
E PrepareSaveNewEntity();
E PrepareSaveModifyEntity();
E PrepareDeleteEntity();
E PrepareEditEntity();
E PrepareQueryEntity();
}
典型的MVC实现,Model部分:
public partial class StudentModel:MVCModel<StudentEntity>
{
public StudentEntity Get(MVCEntity<StudentEntity> entity)
{
StudentEntity e = new StudentEntity();
e.Code = "从存储获取";
e.Name = "从存储获取";
return e;
}
public void Delete(MVCEntity<StudentEntity> entity)
{
//删除操作,省略编码
}
public StudentEntity Save(MVCEntity<StudentEntity> entity)
{
//存储操作,省略编码
return new StudentEntity();
}
public StudentEntity Update(MVCEntity<StudentEntity> entity)
{
//更新操作,省略编码
return new StudentEntity();
}
public List<StudentEntity> Query(MVCEntity<StudentEntity> entity)
{
List<StudentEntity> resut = new List<StudentEntity>();
StudentEntity e = new StudentEntity();
e.Code = "SN001";
e.Name = "yeyang01";
resut.Add(e);
e = new StudentEntity();
e.Code = "SN002";
e.Name = "yeyang02";
resut.Add(e);
return resut;
}
}
典型的MVC实现,Entity部分:
[Serializable]
public class StudentEntity : MVCEntity<StudentEntity>
{
protected string name;
protected string code;
public string Name { get { return name; } set { name = value; } }
public string Code { get { return code; } set { code = value; } }
}
典型的MVC实现,Controller部分:
public partial class StudentController :MVCController<StudentView,StudentEntity>
{
protected MVCModel<StudentEntity> myModule;
public StudentController()
{
myModule = new StudentModel();
}
public void PerformViewLoadEvent(MVCView<StudentEntity> view)
{
//throw new NotImplementedException();
}
public void PerformViewAddEvent(MVCView<StudentEntity> view)
{
view.ShowAdd();
view.ShowMsg("准备就绪");
}
public StudentEntity PerformViewSaveNewEvent(MVCView<StudentEntity> view)
{
//从视图获取填充好的实体对象
StudentEntity e = view.PrepareSaveNewEntity();
//向模型更新
e = myModule.Save(e);
//要求视图展现
view.ShowEntity(e);
view.ShowMsg("保存成功");
return e;
}
public StudentEntity PerformViewSaveModifyEvent(MVCView<StudentEntity> view)
{
//从视图获取填充好的实体对象
StudentEntity e = view.PrepareSaveModifyEntity();
//向模型更新
e = myModule.Update(e);
//要求视图展现
view.ShowEntity(e);
view.ShowMsg("更新成功");
return e;
}
public StudentEntity PerformViewEditEvent(MVCView<StudentEntity> view)
{
//从视图获取仅填充关键字的实体对象
StudentEntity partEntity = view.PrepareEditEntity();
//从模型获取
StudentEntity fullEntity = myModule.Get(partEntity);
//要求视图展现
view.ShowEntity(fullEntity);
view.ShowMsg("准备就绪");
return fullEntity;
}
public void PerformViewDeleteEvent(MVCView<StudentEntity> view)
{
StudentEntity q = view.PrepareDeleteEntity();
myModule.Delete(q);
view.ShowMsg("删除成功");
}
public void PerformViewQueryEvent(MVCView<StudentEntity> view)
{
StudentEntity q = view.PrepareQueryEntity();
List<StudentEntity> results = myModule.Query(q);
view.ShowQuery(results);
}
public void PerformViewCloseEvent(MVCView<StudentEntity> view)
{
//throw new NotImplementedException();
}
}
典型的MVC实现,View部分(1):
public partial class StudentView:MVCView<StudentEntity>
{
protected MVCController<StudentView,StudentEntity> myController;
public StudentView()
{
myController = new StudentController();
}
public void ShowQuery(List<StudentEntity> entities)
{
this.gvList.DataKeyNames = new string[] { "CODE" };
this.gvList.DataSource = entities;
this.gvList.DataBind();
}
public void ShowLoad()
{
}
public void ShowMsg(string msg)
{
this.lblMsg.Text = msg;
}
public void ShowEntity(StudentEntity entity)
{
this.txtInputStudentCode.Text = entity.Code;
this.txtInputStudentName.Text = entity.Name;
}
public void ShowAdd()
{
this.txtInputStudentCode.Text = string.Empty;
this.txtInputStudentName.Text = string.Empty;
this.txtQueryStudentCode.Text = string.Empty;
this.txtQueryStudentName.Text = string.Empty;
}
public StudentEntity PrepareSaveNewEntity()
{
StudentEntity result = new StudentEntity();
result.Name = this.txtInputStudentName.Text;
result.Code = this.txtInputStudentCode.Text;
return result;
}
public StudentEntity PrepareSaveModifyEntity()
{
StudentEntity result = new StudentEntity();
result.Name = this.txtInputStudentName.Text;
result.Code = this.txtInputStudentCode.Text;
return result;
}
public StudentEntity PrepareDeleteEntity()
{
if (ViewState["ROW_INDEX"] == null) throw new ArgumentException("ViewState[/"ROW_INDEX/"]");
StudentEntity result = new StudentEntity();
int rowIndex = int.Parse(ViewState["ROW_INDEX"].ToString());
GridViewRow curRow = gvList.Rows[rowIndex];
result.Code = gvList.DataKeys[curRow.RowIndex].Value.ToString();
return result;
}
public StudentEntity PrepareEditEntity()
{
if (ViewState["ROW_INDEX"] == null) throw new ArgumentException("ViewState[/"ROW_INDEX/"]");
StudentEntity result = new StudentEntity();
int rowIndex = int.Parse(ViewState["ROW_INDEX"].ToString());
GridViewRow curRow = gvList.Rows[rowIndex];
result.Code = gvList.DataKeys[curRow.RowIndex].Value.ToString();
return result;
}
public StudentEntity PrepareQueryEntity()
{
StudentEntity result = new StudentEntity();
result.Name = this.txtQueryStudentName.Text;
result.Code = this.txtQueryStudentCode.Text;
return result;
}
}
典型的MVC实现,View部分(2):
public partial class StudentView : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
myController.PerformViewLoadEvent(this);
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
if (ViewState["CUR_OBJECT"] == null)
{
ViewState["CUR_OBJECT"] = myController.PerformViewSaveNewEvent(this);
}
else
{
myController.PerformViewSaveModifyEvent(this);
}
}
protected void btnAdd_Click(object sender, EventArgs e)
{
ViewState["CUR_OBJECT"] = null;
myController.PerformViewAddEvent(this);
}
protected void btnClose_Click(object sender, EventArgs e)
{
myController.PerformViewCloseEvent(this);
}
protected void btnQuery_Click(object sender, EventArgs e)
{
myController.PerformViewQueryEvent(this);
}
protected void gvList_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Cmd_Edit")
{
ViewState["ROW_INDEX"] = Convert.ToInt32(e.CommandArgument);
StudentEntity curObj = myController.PerformViewEditEvent(this);
ViewState["CUR_OBJECT"] = curObj;
}
else if (e.CommandName == "Cmd_Delete")
{
myController.PerformViewDeleteEvent(this);
}
}
}
典型的MVC实现,View部分(3):
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="StudentView.aspx.cs" Inherits="MVC.StudentView" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table border="1">
<tr>
<td align="right">
<asp:Button ID="btnQuery" runat="server" Text="查询" OnClick="btnQuery_Click" />
<asp:Button ID="btnAdd" runat="server" Text="新增" OnClick="btnAdd_Click"/>
<asp:Button ID="btnSave" runat="server" Text="保存" OnClick="btnSave_Click"/>
<asp:Button ID="btnClose" runat="server" Text="关闭" OnClick="btnClose_Click"/>
</td>
</tr>
<tr>
<td bgcolor="#3399FF">
查询区域
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>学号:</td>
<td>
<asp:TextBox ID="txtQueryStudentCode" runat="server"></asp:TextBox>
</td>
<td>姓名:</td>
<td>
<asp:TextBox ID="txtQueryStudentName" runat="server"></asp:TextBox>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td bgcolor="#3399FF">
列表区域
</td>
</tr>
<tr>
<td>
<asp:GridView ID="gvList" runat="server" AutoGenerateColumns="false" Width="366px"
onrowcommand="gvList_RowCommand">
<Columns>
<asp:BoundField DataField="CODE" HeaderText="学号" />
<asp:BoundField DataField="NAME" HeaderText="姓名" />
<asp:ButtonField CommandName="Cmd_Edit" Text="编辑" />
<asp:ButtonField CommandName="Cmd_Delete" Text="删除" />
</Columns>
</asp:GridView>
</td>
</tr>
<tr>
<td bgcolor="#3399FF">
编辑区域
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>学号:</td>
<td>
<asp:TextBox ID="txtInputStudentCode" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>姓名:</td>
<td>
<asp:TextBox ID="txtInputStudentName" runat="server"></asp:TextBox>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td bgcolor="#3399FF">
状态区域
</td>
</tr>
<tr>
<td>
<asp:Label ID="lblMsg" runat="server" Text="欢迎"></asp:Label>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
运行效果截图如下: