2024年4月19日发(作者:)

第9卷第12期 

软件导刊 

Vo1.9 NO.12 

2010年12月 

Software Guide 

TWe.2010 

基于ASP.NET MVC 2的三层结构 

应用系统开发研究与实现 

江义火 

(泉州信息职业技术学院,福建泉州362000) 

摘 要:介绍了MVC设计模式与三层结构及ASP.NET环境下二者之间的关系,同时采用三层结构思想对教学支持 

系统进行设计,并以添加课程子功能为例对基于ASP.NET MVC 2进行.NET三层结构Web应用程序开发进行了论 

述。 

关键词:ASP.NET;MVC;设计模式:三层结构 

中图分类号:TP311.131 文献标识码:A 文章编号:1672—7800(2010)12—0018—03 

0 引言 

濯Mvc^pd on1 

:曲Prope e5 

} j}用 

App

Dat ̄ 

》 c。 t 

ASP.NET MVC 2是微软最新的Web应用程序开发模式。 

# l Controllers 

n::aModels 

它是MVC设计模式在.NET环境下的应用,具有支持丰富的 

p: Scripts 

、,ie t 

路由机制、测试驱动开发(TDD)和团队应用程序开发等优点。 

》 Global ̄x 

{ 盏web on 9 

在MVC 2基础上,采用三层结构思想进行开发,使得系统层 

 l

次划分更加清晰、功能更易扩展与维护、更有利于团队分工协 

图2 ASP.NET MVC 2 Web应用程序项目结构 

作。 

1.2三层结构 

三层结构是指在软件开发过程中,将整个业务应用划分为 

1 MVC设计模式与三层结构 

表示层、业务逻辑层和数据访问层。表示层提供应用程序的用 

户界面,负责与用户交互,根据用户操作,调用业务逻辑层进行 

1.1 MVC设计模式 

处理:业务逻辑层是应用系统的核心部分,负责处理用户请求, 

MVC(Model—View—Controller)模式是Trygve Reenskaug在 

实现应用程序逻辑,完成所需要的数据处理,并将处理的结果 

上世纪70年代末为开发Smalhalk平台提出的,它包括模型 

返回给表示层;数据访问层主要为业务逻辑层提供数据支持, 

(Mode1)、视图(View)、控制器(Controller)3个部分。图1所示, 

专门与数据库进行交互。三层结构这种分层设计方式,将应用 

在MVC模式中。视图是用户看得到,并与之交互的界面.它从 

程序功能封装在不同的层上,每一层都可以独立修改,使得系 

模型处获得数据.更新由控制器控制。视图不包含任何业务逻 

统层次划分清晰。 

辑的处理,它只是作为一种输出数据的方式。模型封装了系统 

1.3 ASP.NET环境下的MVC 2与三层结构 

的核心数据、逻辑关系和业务规则,提供了业务逻辑的处理过 

图2所示,在ASP.NET MVC 2 Web应用程序项目时,MVC 

程 

组件分别存放在不同的目录中,Controllers、Models和Views目 

蒿选择菁曩视宝图i霜显 盎示模用户型处请求理 后的结 果ll响 应请求 

录分别于存放控制器类、模型类和视图文件。MVC框架要求所 

有的控制器类以Controller结尾;模型通常包含有定义业务对 

视图 I 状态查询 I 模型 

象的类和数据库交互的逻辑;视图主要由ViewPage(.aspx)2 ̄ 

篓祟塞望会鬈数据传给控制器J

响应模型状态更新 r……

 通知更新 ]荔蓄襄星 嵩状态

……~1处理业务流程 

 

其他和呈现视图相关的文件构成。一般情况下,Views目录下 

 ll通知视图更新状态 

一方法调用 ……+事件 

子目录用于存放一组相关的视图文件.每一个子目录对应一个 

图1 MVC组件的关系和功能 

控制器类,且要求子目录名称以控制类名称的前缀命名。 

作者简介:江义火(1980一),男,江西上饶人,泉州信息职业技术学院助教,研究方向为.NET软件开发、设计模式。 

第12期 江义火:基于ASP.NET MVC 2的三层结构应用系统开发研究与实现 

BEGl 

・19・ 

将MVC与三层结构进行对比的话,ASP.NET MVC 2的视 

图和控制器.对应于三层结构的表示层,而模型则与三层结构 

中业务逻辑层和数据访问层相对应。在ASP.NET MVC 2的基 

础上,采用三层结构思想进行Web应用程序设计时,要求对 

MVC的模型(Mode1)进行进一步分离,将业务逻辑层、数据访 

问层移植到解决方案的其它项目当中。 

SELECT@result=C0UNT(-k)FROM tb_Cour¥e 

WHERE Name=@courseName AND deleteState=,0 : 

IF@resuh>=l一同名课程存在。lfag设为-1,否则设为1 

BEGIN 

ELSE 

SET@fLag=一1;END 

BEGIN SET@fLag=1; 

_

2三层结构应用系统的设计 

图3所示,系统采用三层构架思想对教学支持系统进行设 

计,将MVC的模型(Mode1)进行分离,分别移植到其他项目当 

中。在创建ASP.NET MVC 2 Web应用程序解决方案(TSS)的基 

INSERT INTO tb

Course(Name,…)VALUES(@course・ 

Name,…); 

SELECT@courselD=courselD FROM tbCourse 

_

WHERE name=@courseName AND deleteState='0 ; 

END 

END 

础上,添加新建实体层(Mode1)、业务逻辑层(BLL)和数据访问 

层(DAL)项目。 

3.2创建实体层 

在解决方案中添加新建项目作为实体层(TSS.Models),用 

于存放与数据库表对应实体类,其中与课程信息表(tb_Course) 

所对应的实体类(CourseMode1),主要代码如下: 

namespace TSS.Models//部分引用代码省略 

{public class CourseModel 

图3系统架构示意图 

{private int courselD; //课程编号 

public int CourselD{get{return courselD;}set{courselD 

=value;}} 

private stirng name; //课程名称,其他字段省略 

public stirng Name{get{return name;}set{name=value;}} 

}} 

图4添加课程时序图 

、 

3.3创建数据访问层 

图4所示,系统子功能添加课程的时序图:①控制器(Con. 

troler)接收用户请求,将视图跳转到课程信息录人视图;再调 

添加新建项目作为数据访问层(TSS.DAL),该层采用ADO. 

NET技术与数据库服务器进行交互操作。课程访问类 

(CourseDAL)对课程信息进行访问和处理,其中ExecAddCourse 

()方法用数据库服务器存储过程ProAddCourse,来完成业务逻 

用业务逻辑层AddCourse()方法处理用户填写好课程信息:② 

业务逻辑层,调用数据访问层的ExecAddCouse()方法,同时进 

行异常处理;③数据访问层,调用数据库服务器存储过程 

ProAddCourse来执行课程添加操作;④数据库服务器,对课程 

信息进行冲突判断和存储处理,处理结果被逐层返回给数据访 

问层、业务逻辑层和表示层.最后由控制器控制视图显示处理 

情况。 

辑层所委托的添加课程操作。CourseDAL类文件的主要代码如 

下: 

using TSS.Model; //引用实体层,其他引用省略 

namespace TSS.DAL 

{public class CourseDal{private static stirng cons=DA.connec— 

3三层结构应用系统的实现 

3.1创建数据库表和存储过程 

tionString;//获取连接字符串 

public int ExceAddCourse(CourseModel course) 

{SqlParameter[]sp=new SqlParameter[10]//新建参数 

{new.qlParameter(”@courseName”,SqlDbType.VarChar,20),… 

在SQL Server 2008中创建数据库TSSData,添加数据库表 

和存储过程。其中,课程信息表tb

Course包括courselD(int,非 

new SqlParameter(”C ̄lat”,SqlDbType.Int,4,nul1)};//其他参数 

省略 

空,自增)等12个字段;存储过程ProAddCourse实现添加课程 

的功能,选进行冲突判断,再存储数据。存储过程的语句如下: 

Create PROCEDURE[dbo].[ProAddCourse] 

@courseName NVARCHAR(50), ……一其他参数声明省略 

@fLag INT OUTPUT, -- ̄lJ断标示 

sp[O].Value=course.Name:… 

sp[9].Direction=ParameterDirection.Output;//部分参数赋 

值省略 

SqlConnection conn=new SqlConnection(cons);//创建连接 

SqlCommand cmd=new SqlCommand();//创建command 

AS DECLARE@result INT,@courselD VARCHAR(20); 

20・ 软件导刊 2010矩 

cmd.Connection=conn://指定连接 

cmd.CommandText=”ProAddCourse”;//存储过程名 

cmd.CommandType=CommandType.StoredProcedure; 

cmd.Parameters.Clear()://参数清空 

if(sp!=nul1){foreach(SqlParameter param in sp) 

cmd.Parameters.Add(param);}//设置参数 

cmd.ExecuteNonQuery();//执行命令 

int result=Convert.Tolnt32(cmd.Parameters[index].Value); 

cmd.Parameters.Clear(); return result; 

}}} 

3.4创建业务逻辑层 

添加新建项目作为业务逻辑层(TSS.BLL),该层实现对业 

务逻辑的封装。课程管理类(CourseManage)处理课程信息,其 

中AddCourse()方法通过调用数据访问层的ExceAddCourse() 

方法,来完成控制委托的添加课程信息操作,同时对可能产生 

的异常进行处理。CourseManage类文件的主要代码如下: 

using TSS.DAL; //引用数据访问层,部分引用代码省略 

using TSS.Model: //引用实体层 

namespace TSS.BLL 

{public class CourseManage 

{public static int AddCourse(CourseModel course)//静态方法 

{int resuh=0;try{CourseDal courseDal=new CourseDal(); 

result:courseDa1.ExceAddCourse(course);}//调用访问层 

catch(Exception ex){_・・//异常处理代码省略} 

ifnally{return result;} 

} 

}f 

3.5创建表示层 

表示层由MVC设计模式中视图和控制器组成.其中教学 

支系统添加课程信息的视图和控制器的实现如下: 

(1)创建视图。在Views目录下创建子目录Course,添加课 

程信息视图(AddCourse.aspx)。如图5所示,添加控件,进行属 

性设置和页面布局。注意规范设置控件ID,因为执行当Post回 

送时,控件ID会被传给控制器。 

■ ^■ ■t‘● …2 w & 

蠊月 一p  ̄bgt,q H^■  :

■■■H %, I埘。 

挂 醒精 晨 

±7llitfl ̄月…々一… ……9 … ………P一 

… 月 ・ t ■ t目 口-目 # t t■ 

■l●■…一2 0 ~……jo45■ t ■ 

r 

Ⅻ 。 

图5添加课程信息视图 

(2)创建控制器。在Controllers目录下创建与Course目录 

相对应控制器类(CourseController.cs)。在添加课程信息视图 

中,点击添加按钮,控制器会捕获,并指定”[AcceptVerbs 

(HttpVerbs.Post)]tt代码段后的AddCourse()方法进行处理,页 

面中控件的ID一一对应传给方法的参数。AddCourse()方法先 

对课程信息实例化,再调业务逻辑层处理,并根据处理结果控 

制页面跳转。该控制器类主要代码如下: 

//部分引用代码省略 

using TSS.BLL: //引用业务逻辑项目 

using TSS.Model://引用实体类项目 . 

namespace rITI1S.Web.Controllers 

{public class CourseController:Controller//控制器 

{[AcceptVerbs(HttpVerbs.Post)]//响应Post的方法 

public ActionResuh AddCourse(string txtCourseNalne,…) 

//其他参数省略,注意与视图的控件ID对应 {CourseModel 

course=new CourseModel();//课程实例 

course.Name=txtCourseName://设置课程名称,其他属性设 

置代码省略 

ViewData[t.result”]=CourseManage.AddCourse(courselnfo); 

//调用业务逻辑层方法 

retum View(); //根据ViewData[..result”]值,返回视图 

} 

4结束语 

本文给出了在ASP.NET环境下,一种将MVC 2与三层结 

构结合设计方案.此方案可行且具有实际意义。运用此方案构 

建的Web三层结构的应用模型,进行大型B/S应用系统设计 

和开发,具有结构清晰、易于扩展、便于测试和易于维护和移植 

等优点。 

参考文献: 

f1]徐朝辉,樊银亭.MVC设计模式在ASP.NET应用开发中的研究 

和实现[J].微型电脑应用,20o7(10). 

[2] ERICH GAMA.设计模式:可复用面向对象软件基础[M].北京: 

机械工业出版社.2O00. 

【3]CRAIG A BERRY.实用J2EE设计模式编程指南[M].北京:电子 

工业出版社.2003. 

[4] 涂永忠,邵晨曦,蔡维德,等.影子模式:一种新的用于测试的设 

计模式[J].计算机研究与发展,2004(1). 

(责任编辑:杜能钢)