【学术】基于ASP.NET MVC模式的软件开发架构的研究与探讨:一种严谨精准的企业级通用开发架构
今日荐文的作者为中国电子科学研究院专家仝茵。本篇节选自论文《基于ASP.NET MVC模式的软件开发架构的研究与探讨》,发表于《中国电子科学研究院学报》第11卷第6期。
引 言
现今,企业日常工作事务的管理已经普遍信息化,应用软件的开发技术跟随大量的业务需求亦发展快速,各种WEB开发技术在原来的面向过程的简单开发思想基础上往面向对象的高级开发思想方向不断的更新发展,并分别由最初的C语言衍生出多种WEB开发应用语言,如JSP﹑PHP﹑ASP等等,各种语言在各自的开发平台支撑下各具优势。程序员在进行反复开发并分类编目的过程中总结出了代码设计的模式应用到软件工程当中,如MVC模式。
目前程序员所熟用的基于MVC模式的软件开发框架有ASP.NET MVC架构,Struts MVC架构,Spring MVC,Zend Fromwork等。由于微软公司产品在国内企业和个人用户使用方面的普及,本篇对ASP.NET MVC开发框架进行探索和研究。旨在展现ASP.NET MVC对企业应用软件开发的影响,并在原有架构的基础上改进架构,寻求一种严谨精准的企业级通用开发架构规范,提高应用软件的开发效率,并实现软件开发复用。
1 ASP.NET MVC架构介绍
企业级应用系统软件开发存在诸多问题,如何通过适当的逻辑抽象,将复杂的业务逻辑抽离分层?各层之间如何协同合作?针对不同的业务数据模块如何解决模块间的异构?ASP.NET MVC架构采用分层的模式,具有面向对象的高内聚、低耦合思想,其设计思想的多态、继承等特性,可以有效地降低系统的开发难度,能够良好解决上述问题。
1.1 整个ASP.NET MVC的工作过程
(1)首先它采用了管道设计,具有良好扩展性。在整个请求生命周期开始之前,需要URL Routing网址路由来完成路径引导,URL Routing负责比对从浏览器传来的HTTP请求,并将解析后适当的网址返回浏览器。
(2)其次通过HttpModule类的形式定义一个拦截器(Interceptor),拦截器根据请求解析出目标Controller和Action的名称,随后定位到具体位置,目标Controller被激活,相应的Action方法被执行,ASP.NET MVC结构中定义了名为MVCHandler的自定义HttpHandler类,实现对Controller的激活和Action的执行。
(3)最后,用户通过浏览器发出请求与应用进行交互,通过Http请求和响应来完成。整个流程如图1所示。
图1 ASP.NET MVC框架工作过程
整个过程从用户发出请求到响应,ASP.NET MVC清晰的分离关注点,将复杂的任务分解成若干个简单的、单一的任务,每次只关注于其中一项单一的任务。整个响应流程分层处理,将可视化界面,视图处理逻辑和业务处理逻辑分离开来,系统的不同的功能模块多层分隔,分别承载入三层类库,不同类库之间的类彼此调用、协同合作构成整个系统的功能。尤其在开发复杂的应用系统的时候,分离关注点这一特性,可以有效地减少系统的开发难度、调试难度、后期维护的难度。
1.2模型,视图,控制器之间的交互
图2 M,V,C三者交互图
参考图2,模型,视图,控制器之间的交互如下有三点。
(1)控制器实现的交互功能
控制器Controller负责业务逻辑流程的流转控制。其主要作用是用户接受请求,与视图和数据模型匹配共同完成用户请求。控制器主控分配选择什么样的模型和视图。用户发送一个请求后,经过 URL Routing解析,选择控制器,控制器并不进行业务逻辑处理,它只把用户的提交的信息传递给数据模型,然后选择指定的视图返给用户,当Controller被MvcHandler类选择,通过ActionInvoker选取适当的Action方法来执行逻辑。Action方法通常会返回给视图一个ActionResult类来决定返回给视图的信息的类型。ActionResult类型主要有以下几种:View主视图类型、PartialView部分视图类型、Content文本或XML类型、Josn传递LIST数据类型、FileContent类型、JavaScript传递JS文件类型。View视图将返回的ActionResult类型决定在客户端显示的内容。
(2)模型实现的交互功能
模型Model表示一组最终呈现在视图上的数据,它的独立性和扩展性很强,它可以作为单独存放的组件,供应多个项目重复使用。不论是Controller还是View,都会使用Model提供的数据类型,模型通常与视图和控制器分离,独立性高,当应用程序的数据层和业务规则改变,比如说,数据库从SQL Server移植到Oracle,只需要修改Model数据模型,而不影响视图的显示。Model元数据的一个重要的作用是控制Model对象在View上的呈现方式,基于定义的某种类型的Model元数据去决定最终生成的Html页面来展示对应的Model对象,Model元数据还提供数据格式的验证与业务逻辑验证等功能。
(3)视图功能的实现
ASP.NET MVC中的视图使用的引擎有两种,MVC2.0版本使用的是ASPX,MVC3.0使用的是Razor,视图的职责是向客户端提供显示页面,与数据显示有关的逻辑有HTML、CSS、JavaScript、DOM、jQuery、JSON、Ajax等。当Controller传递过来的数据转换成客户端需要的输出的格式,View的程序代码不会出现复杂的应用程序和业务逻辑,MVC架构中,为了方便客户端控件的创建以及Model数据的绑定,MVC提供了一套辅助方法,用来生成客户端控件,这些方法以Html打头,称为HTML辅助方法,该方法将HTML标签封装成辅助方法,简化视图页面的逻辑。视图使用两种绑定数据的方式传递数据,一种是非强类型,即不使用Model,仅使用参数,一种是强类型传递,绑定Model数据。
2 系统内集成IBatis框架
目前.NET平台自带的数据建模和对象持久化访问机制使用Entity FrameWork框架,它支持程序员通过对概念性的应用程序模型编程来创建数据访问应用程序,目标是降低面向数据的应用程序所需要的代码量并减轻维护工作,但是它的访问机制通过可视化开发数据模型工具来定义实体与模型的关系和数据表的关联,对使用存储过程有很多限制,并且不是直接面向关系存储架构编程,不太符合数据关系映射机制,对于面向对象的编程语言和存储数据的关系型数据库之间的映射结构还不够完善,因此需要引入其他ORM数据映射框架集成到开发环境中,实现对数据库的灵活访问。
ORM作为逻辑层和数据层中间的持久层映射机制,提供了实现持久化层的另一种模式,比较常见的ORM框架有Hibernate、iBatis、Ling to Sql等,由于iBatis属于轻量级框架,集成到程序中没有侵入性,所以使用起来非常灵活。它通过map将类对象映射成sql增删查改语句和将结果集转换成实体对象,解决了实体对象与输入参数和结果集的映射,又让用户方便的根据实际业务需求动态手写sql语句,进而实现数据映射功能。如图3所示:
图3 加入iBatis框架图示
ASP.NET MVC集成iBatis映射机制后,数据访问更有针对性,程序员编写的SQL语句更具备操作优势,语言对象与关系数据之间的交互更具便捷灵活。
3从MVC中分离BCL业务逻辑层
目前,MVC模式在.NET平台上的应用还有改进的空间,比如实现操作功能的处理逻辑绑定在控制器中,当用户的业务需求发生改变,或者设计者的处理思路发生变化,想要对原本的逻辑进行修改,就需要重新设计控制器的业务流程,如此开发系统缺乏灵活性,加重修改工作的难度,为了使软件开发框架更加成熟,在开发过程中,当出现企业的日常管理事务囊括大量的数据并且业务逻辑错综繁琐的情况下,对ASP.NET MVC架构进行改进。
在原来的MVC模式的层次下,继续精细划分层次,进一步将ASP.NET MVC控制器中的业务逻辑模块抽离出来,单独成层,形成更加独立的业务逻辑处理层。BCL业务逻辑层,B即Bussiness Logic,处理业务逻辑,C即Access Control访问控制,包括权限验证、登录验证控制、数据访问方法等功能。BCL层使得系统的整体架构更加清晰简洁。如图4所示:
图4 抽取BCL层图示
结 语
本文基于企业无纸化办公的信息需求,分析了MVC模式在开发中的主导作用,通过对ASP.NET MVC框架构建Web项目的流程、思想、应用、技术的研究,并对MVC三层结构进行完善,完成一套基于ASP.NET MVC的、完整覆盖表现层、逻辑层、数据访问层等三层架构的ASP.NET平台开发架构,在软件系统开发中有实际的应用意义。
参考文献略
声明:版权归原作者所有。文章观点不代表本机构立场。
《中国电子科学研究院学报》欢迎各位专家、学者赐稿!投稿链接
电话:010-68893411
邮箱:dkyxuebao@vip.126.com