关于MVC架构的扩展实现与实际应用

问题描述

我有着五六年的软件开发经验。曾经在专业软件公司和集团公司从事软件开发与维护工作。自2008年5月开始在群英负责网络硬盘项目。我们团队由我和两个刚毕业的本科生,一个负责javascript,一个负责Asp.Net编程。面对这样一个开发经验相对缺少的开发团队,如何使团队每个成员都能够快速上手,可以完成自己的工作任务。于是我在参照了微软的MVC开源架构和结合自己多年的开发经验的基础上,再加上软件有关开发理论,与团队成员自行编写了我们开发体系。这套开发体系,我们充分地应用面向对象理论。用事实证明了面向对象开发的好处。现在我们团队开发完成javascript、数据库操作、.net开发框架,给我们的开发和维护工作带来了极大的方便,节约不少代码量。框架图[/B][/B][img=http://b9.photo.store.qq.com/http_imgload.cgi?/rurl4_b=b60aa678d990ccd98c56251ac937053a2e52e8cbc37041ef89df2a74f8d4a1859074c3ffc9ceeef9fa7c5b4f4494449ffcf1e271990cb40d61f29b3d662919c34b0d70983ff91fae895bf47f3dad0c806c7fa069][/img]一、[/B]javascript[/B]部分。[/B][/B]1、javascript组织方式改进。以前的javascript方法都是简单的一个方法名。方法写在页面或一个脚本文件中!这样做的问题就是大量的方法都是杂乱无章,以后在维护和调用的时候,查找起来非常麻烦。现在应用面向对象的开发理论,将javascript脚本按用途、功能模块以命名空间的形式来组织起来,这样通过查看引用前缀可以快速定位javascript方法的位置,容易扩展功能。如QY.Ajax.SendData。这样调用的时候一目了然。2、多浏览器支持作为b/s项目,我们开发出来的页面,还必须考虑是否支持众多的浏览器IE,Firefox等各个版本。我们javascript框架每个方法都是通过测试。保证了各个浏览器的浏览效果。3、方便、功能强大Ajax的请求类。我们后台的每个方法都是一个独立的编号,前端通过编号,加上请求参数便可以请求后台的方法,执行相关的操作或返回页面输出内容。4、方便、功能强大的XML操作类。XML操作类支持各类浏览器,支持众多的XML操作类型。5、功能强大的弹式框。IE、FireFox浏览器自带的对话框,界面粗造,更不好的是,FireFox浏览器无法通过脚本弹出新窗口。针对这些问题,我们开发一个功能强大的对话框javascript.。它可以1、提示框2、输入框3、在对话框中打开一个网页4、指定对话框的关闭事件5、指定对话的OK/Cancel按钮事件。6、指定标题二、[/B]数据库操作类[/B][/B]对于应用类型的程序,核心部分还是数据的操作部分。针对以前大家都把数据库脚本直接放在代码中,这样做的结果,就要修改就必须直接修改代码。那我们现在的数据操作语句是保存在一个数据库语句XML配置文件中。这样程序开发人员只需要通过语句编号就可以调用语句。要修改语句的时候,直接修改配置文件,而不必修改代码和编译程序。丰富的数据操作类。各种常见的数据操作,分页,数据与模型的转换。特点:1、通过方法中的参数传入模型变量,代码自动去匹配命令中的相应参数,相应的参数值从模型变量中的相应属性赋值。2、方法执行查询后,根据传入的需要返回的模型类型,自动将查询结果中的字段填充到模型中,然后一个相应模型类型的结果或结果集。1、执行一条语句2、执行一条语句返回一个值3、执行一条语句返回一个数据表4、执行一条语句返回一个泛型列表5、执行一条语句返回一个值6、执行一条语句返回一个分页的据数表(数据库端、代码端处理分页)7、执行一条语句返回一个分页的泛型列表(数据库端、代码端处理分页)开发人员只需要传入语句的编号,调入相应的方法,即可执行语句和获得执行结果关于数据库操作的接口。IDictionaryCmdParameters{get;set;}stringConfigXmlFile{get;set;}stringConnectionString{get;set;}boolneedTransaction{get;set;}boolExecQuery(stringCmdText);boolExecQueryBySqlId(stringSqlId);objectExecScalar(stringCmdText);objectExecScalarBySqlId(stringSqlId);IList<T>GetData<T>(stringcmdText);DataTableGetData(stringSelectCommand);IList<T>GetDataBySqlId<T>(stringSqlId);DataTableGetDataBySqlId(stringSqlId);TGetModel<T>(stringcmdText);TGetModelBySqlId<T>(stringSqlId);IList<T>GetPage<T>(stringcmdText,refPageObjPageObj)DataTableGetPage(stringSelectCommand,refPageObjPageObj)DataTableGetPageBySqlId(stringSqlId,refPageObjPageObj)IList<T>GetPageBySqlId<T>(stringSqlId,refPageObjPageObj)DataTableGetPageServer(stringcmdText,refPageObjPageObj)IList<T>GetPageServer<T>(stringcmdText,refPageObjPageObj)IList<T>GetPageServerBySqlId<T>(stringSqlId,refPageObjPageObj)DataTableGetPageServerBySqlId(stringSqlId,refPageObjPageObj)[/B]三、[/B]接口层与业务层、控件层、表现层的实现与通信。[/B][/B]每个模块定义一个接口,负责业务层的程序员根据接口功能实现接口,然后控件层的程序员用参数传递给业务层控制器,装载指定的业务模块,创建接口的实例。执行与数据库层的相关操作。控件层承接业务和表现层交互的地方,控件层不仅把页面上的输入和请求,经过业务逻辑处理提交业务层保存至数据库。还是负责把业务层返回来结果,传递给前端用户。控件层上在的每个方法都可以看成是一个组件,他们不仅可以自由的组合的起来,根据实际的应用需要由页面或Ajax重复调用。Ajax调用统一通过IHttpHandler接口类,传入一个方法编号和相应的方法编号,即可以执行相应的控件方法。表现层与控件层的通信实现。表现层上的程序层通过调用控件层控制器,直接创建一个控件层对象,指定调用的方法。表现层通过反射原理,执行指定控件层上的方法。完整的示例代码如下控件层publicclassDisk:QY.Comm.Controller{通过创建一个业务接口的实例publicJia.JiaInterface.Disk.IDiskMyDisk=Jia.BllFactory.Activator.Func<Jia.JiaInterface.Disk.IDisk>(Jia.BllFactory.JiaGetClassConst.Jia_Bll_Disk_Disk);publicMember.LoginLogin=newJia.ControlerHome.Member.Login();///<summary>///输出专辑的XML///</summary>[ParamerterMap("SpecialUserXML","001")]publicvoidSpecialUserXML(intMemberId){stringXML=DataTools.DataTableToXML(SpecialUserGet(MemberId));BaseClass.ResponseXML(XML);}publicDataTableSpecialUserGet(intMemerId){returnMyDisk.FileSpecialAllSubGetTable("1",MemerId);}}表现层的页面调用方法CallMethodSet("MemberLevelAppGetPage,GetAll");--指定控件的执行方法列表QY.Comm.IControllercontroller=Jia.ControllerFactory.Activator.Func<Jia.ControlerHome.Admin.Admim_P2>(Jia.ControllerFactory.Admin.ClassConst.Jia_ControlerHome_Admin_Admim_P2);Execute(controller);BindControl(this.dgLevelApp,ViewData["rptAppList"]);Ajax调用方法functionMemberDelete(Id,MemberName){if(confirm('你确定要删除所选的会员吗?删除后该会员所有的内容都无法恢复!')){varpostData=[];postData.push(["MemberId",Id]);postData.push(["MemberName",MemberName]);postData.push(["AjaxMethod","010002"]);SendAjaxDataX(null,"GetService.axd","正在提交服务器处理",postData,"",function(xhr){CheckLogin(xhr.getResponseHeader("login"));if(PageNum==0)PageNum=1;getDataPage(PageNum,0);},false)}}加载页面内容functiongetDataPage(page){varKeyWord1=$("SearchText").value;/*varKeyWord2=$("SearchLeaveler").value;varKeyWord3=$("SearchIP").value;varKeyWord4=$("HurryLevel").value;varKeyWord5=$("LeaveType").value;varKeyWord6=$("Checked").value;*/BeginDate=$("txtMoreBeginDate").value;EndDate=$("txtMoreEndDate").value;varfunc=function(xhr){CheckLogin(xhr.getResponseHeader("login"));if($("SearchText").value!=""||(BeginDate!=""&&EndDate!="")){$("searchResult").className="ShowsearchText";varDateShow="";if(BeginDate!=""&&EndDate!="")DateShow="("+BeginDate+"至"+EndDate+")";$("searchResult").innerHTML="搜索""+KeyWord1+DateShow+""的结果有"+LeaveList_JsPager.TotalRecoard+"条记录:";}else$("searchResult").className="HidesearchText";$("content").innerHTML=xhr.responseText;varsHTML="<center>"+LeaveList_JsPager.Create(page,"getDataPage($Page$);",1)+"</center>";$("ListpagerDown").innerHTML=sHTML;if(LeaveList_JsPager.TotalRecoard==0)$("content").innerHTML="<centerstyle='margin:50px50px50px50px;font-size:large;color:Gray'>当前没有用户留言</center>";};LeaveList_JsPager.CurrentPage=page;LeaveList_GetPage(null,"AjaxHTML.axd",func,"GetAjaxHtml=/Admin/Control/LeaveWordManage.ascx&Search="+KeyWord1+"&BeginDate="+BeginDate+"&EndDate="+EndDate,"正在载入,请稍候...","");

解决方案

解决方案二:
不错,学习了,对于以后很有用处

时间: 2024-11-20 16:43:01

关于MVC架构的扩展实现与实际应用的相关文章

MVC架构

在iOS系统上运行的应用程序遵守MVC的软件架构模式,将自己分为三个基本部分:模型(Model).视图(View)和控制器(Controller). MVC,维基百科是这样定义的. MVC模式最早由Trygve Reenskaug在1974年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能.除此之外,此模式通过对复杂

MVC架构探究及其源码实现(6)-简单示例

博学,切问,近思--詹子知 (https://jameszhan.github.io) 在前一系列的文章中,我们已经完成了MVC架构模式的简单实现,尽管有些粗糙,有些功能还不完善,但是,麻雀虽小,五脏俱全.我们现在就用这个小小的框架,来实现我们的几个简单的应用. 限于篇幅,我们不可能把应用的所有代码都贴上来,我们先来演示一个Hello World的简单应用. 实现控制器HelloController.javapackage com.google.mvc.web.sample; import ja

MVC架构探究及其源码实现(3)-WebApplicationContext

博学,切问,近思--詹子知 (https://jameszhan.github.io) 直接利用web.xml去配置和定义我们的对象组件显然是不灵活和不方便扩展的,由于我们系统中将会需要配置很多个不同的对象资源,比如控制器,View对象,HandlerMapping对象等等,如何对它们进行管理,如何能让我们的前端控制器访问和利用到到它们便是我们不得不面对的问题.还好,现在有了Spring,现在很多流行的MVC框架都支持使用Spring对自己容器里的对象资源进行管理.尽管Spring千好万好,我们

刚刚做了个文件上传功能,拿来分享一下!(MVC架构及传统架构通用)

文件上传无论在软件还是在网站上都十分常见,我今天再把它拿出来,讲一下,主要讲一下它的设计思想和实现技术,为了它的通用性,我把它做在了WEB.Service项目里,即它是针对服务器的,它的结构是关联UI(WEB)层与Service层(BLL)的桥梁. 结构 上传基类: 上传文件的接口规范:     接口的实现: UI层调用WEB.Service层的上传功能:(附代码) public class FileUploadController : Controller { WEB.Services.IFi

Struts开发指南之MVC架构

模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用. 1.模型(Model) 模型是应用程序的主体部分.模型表示业务数据,或者业务逻辑. 2.视图(View) 视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面. 3.控制器(controller) 控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态. 开发指南之MVC架构-springmvc开发指南pdf"> MVC 式的出现不仅实现了功能模块和显

浅谈MVC架构模式

   MVC英文即Model-View-Controller,就是把一个应用分为三个层:视图层.模型层.控制层.    模型层(M)用于封装业务逻辑.    视图层(V)也叫表示层,就是与用户实现交互的界面,通常实现数据的输入和输出功能.    控制层(C)起到控制整个业务流程的作用.简单的说就是调用业务逻辑,然后把得到的数据转发给视图显示给用户. 为了熟悉MVC架构模式,特意将学生查询改成了MVC模式的. 1.首先建立客户端页面(student.jsp): 1 <%@ page languag

MVC架构各层责任图

只是翻译一小部分,如有错误,请告诉我. MVC架构各层责任图     View -          展示数据 -          接收事件(如按钮按下事件,选择改变事件)及传递事件 -          基础验证(如email合法性,空文本检验等) -          可能直接接收model的对象 Controller -          处理界面的复杂逻辑 -          改变界面布局 -          与Model层通信 -          复杂验证(如涉及到数据库查询)

AngularJS入门教程之MVC架构实例分析_AngularJS

本文实例讲述了AngularJS的MVC架构.分享给大家供大家参考,具体如下: MVC应用程序架构最早于1970年起源于Smalltalk语言,后来在桌面应用程序开发中使用较为广泛,如今在WEB开发中也非常流行.MVC的核心思想是將数据的管理(Model).业务逻辑控制(Controller)和数据的展示(View)分离开来,使程序的逻辑性和可维护性更强. 对于AngularJS应用来说,视图(View)是DOM(文档对象模型),你可以理解为就是HTML页面.控制器(Controller)是一个

aspnet-.net mvc架构的model(不是用code first那种)是不是把数据缓存在model中的?

问题描述 .net mvc架构的model(不是用code first那种)是不是把数据缓存在model中的? 我发现用page模式修改了数据,但是数据库中数据并没有改变,如果是的话是不是创建网站时所选择的数据库空间可以小一点? 解决方案 如果你不用任何一种方法将model写回的话,那么是不会自动存入数据库的. 解决方案二: 而且我取了数据之后建立了实体模型后是不是可以抛弃了数据库了 解决方案三: 第一个问题:你在page上修改了数据,必须要调用相应的action把你的修改保存到数据库中.否则,