一个扩展的MVC框架,完整诠释MVC概念

   本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>

运行效果截图如下:

MVC运行效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值