基于ASP.NET的三层架构信息传递策略解析与实现
2020-05-21欧阳元东
欧阳元东
摘要:三层架构开发模式不易理解,为解决学生掌握困难问题,笔者通过类比法讲授三层架构相关知识,把三层架构的用户界面层、业务逻辑层、数据访问层三层类比成饭店的用户点菜,服务员处理菜单,厨师煮饭菜来讲授三层架构理论知识,通过在VisuaIStudi02013平台下创建实例实现基于三层架构间信息传递完成用户登录功能来讲授三层软件开发技能技术。
关键词:三层架构;信息传递;ASP.NET
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2020)09-0079-02
1 问题
目前,MVC是软件开发使用的一种时髦框架,是web应用程序的一种时尚开发方式,它将Web应用程序大致分割成3个主要单元,用户界面层,业务逻辑层,数据访问层。但是,笔者在讲授ASP.NET课程的MVC开发模式时,学生问我,老师能讲解一下,在MVC模式中,信息是如何从数据库被传送到网页,而网页信息(如学生注册信息)如何传递并写人数据库中的?为了解决学生的提问,我决定抛开MVC深奥理论知识的讲解方式,而是从教学角度,采用类比方式,立足中职生的基础,通过手动编程实现三层架构间的信息传递,尽量让学生比较轻易理解三层架构的设计思想,从而让学生更好地掌握MVC的程序开发模式。
2 三层架构思想的理解
三层架构就是在系统开发过程中根据代码的不同功能,分别对进行数据信息存储与类对象调用,对于开发复杂软件系统具有分工明确,条理清晰,易于调试,可扩展性强的优点。它通常分为用户界面层、业务逻辑层、数据访问层,有时还包括实体层和公共通用层。
数据访问层,一般在该层实现基本的数据库增删改查的方法,不会出现在业务逻辑代码。也就是说不面向业务处理。它主要实现soL及SQL组合的类封装。
业务逻辑层,编写业务逻辑代码,根据用户的需求决定如何调用数据访问层的方法,不能出现任何soL语句及数据访问代码。它功能是处理业务逻辑,传递数据信息。它可以调用数据访问层中类的方法,也可以调用用户界面层类的方法。它是沟通数据访问层与用户界面层之间的桥梁。
用户界面层,编写获取用户操作信息、数据验证、数据展示代码。只能调用业务逻辑层的类方法,不能调用数据访问层类的方法。该层封装的对象向业务逻辑层传递,解析对象后展示数据信息。
根据系统的需求,往往需要开发公共通用层,该层一般是系统通用的辅助类和工具方法,如数据库访问工具方法,数据校验方法,缓存处理、加密处理方法。
实体层是面向每个数据库的每个表编写的类,类中往往只有对应数据表中的字段的类属性。一般是多少个数据表就对应多少个实体类。
三层架构类似于饭店工作流程,顾客跟前台服务员进行点菜(即表现层与业务逻辑层的交互),服务员把菜单提交给厨师(即业务逻辑层与数据访问层的交互)。厨师根据菜单去取食材并做菜(类似于数据访问层读写数据库),这中间顾客不与厨师直接发生关系。实体层类似于厨房做好的饭菜,会跟顾客、服务员、厨师和食物原材料发生关系。
3 用户登录功能的ASP.NET三层架构手动编程实现
笔者手动编程实现用户登录功能来体验ASP.NET三层架构优越和魅力。
3.1 数据库创建
在sql server中创建userLoginDB。数据表userLoginTb有三个字段,分别是id,int类型,自动增长,主键。userName,nchar(20)类型,存放用户姓名。Pwd,nchar(20)类型,存放用户密码。此操作类似于饭店准备食物原材料。
3.2 创建项目ModuleDemo.搭建三层基本结构
打开Visual Studi0 2010开发平台,新建解决方案Modul-eDemo,同时添加数据访问层类库(存放类的文件夹)ModuleDe-moDAL。右击解决方案ModuleDemo,添加业务逻辑层类库ModuleDemoBLL。右击解决方案ModuleDemo,添加用户界面层ASP.NET空web应用程序ModuleDemoUI。右击解决方案ModuleDemo.添加实体层Moduel。右击解决方案ModuleDemo,添加公共通用层Common。
3.3 在Common层中添加公共数据访问工具类
把工具类SqlHelper复制到Common层中,并添加引用Sys-tem.Configuration和添加命名空间using System.Configuration,SqlHelper所在命名空间。最后在解决方案里找到Web.Config文件,增加连接数据库字符串。
3.4 在Model层中添加表实体类
Model用于存放实体类的文件夹。在实际开发中有大量数据表,每个数据表需要进行增删改查操作,每个实体类对接着一个数据表,因此需要创建多个实体类,这些实体类放在数据库实体模型层里。
在Model层里添加“userLogin.cs”類文件,该类对接数据库表userLoginTb,叫表实体类。实体类往往作为数据容器,在层间传递。实体类需要加public修饰符。
3.5 实现数据访问层功能
添加ModuleDemoDAL层的引用,点击添加引用,右侧选择解决方案,再选择到Model。还要在ModuleDemoDAL层的类文件中添加相应类所在的命名空间( Modle)。
在ModuleDemoDAL中创建userLoginDal.cs类文件,为该类添加方法SelectUserLogin()方法。方法的关键代码如下。
string sql=”select*from UserLogin where serName=@userName";
SqIParameter para= new SqlParameter(“@userName”, User-Name);
SqlDataReader reader= SqlHelper.ExecuteReader(sql, pa-ra》
如果reader.Read0结果为TRUE,则把结果取出来放在user对象中。既把ID号保存在user. ID中,用户账号保存在user.UserName中。
SelectUserLogin()方法实现根据从用户界面层的用户姓名数据查询对应的数据,把查询到的数据保存在实体类对象中,返回值是实体对象类。
3.5 实现业务逻辑层功能
调用ModuleDemoDAL层中SelectUserLogin()方法获取到数据库中的数据后,接下来就可以在ModuleDemoBLL业务逻辑层来调用数据访问层返回的数据,并返回给用户界面层。业务逻辑层要对数据访问层进行访问,因此要在业务逻辑层添加对数据访问层的引用,还要添加对Model层的引用。在逻辑业务层中添加类userLoginBIl。
创建业务逻辑类:public class UserLoginBIl
实例化数据访问类:private UserLoginDal dal= new User-LoginDal0;
创建方法:public UserLogin GetUserLogin(string UserName)返回值为
return daI.SelectUserLogin(UserName).
3.6 实现用户界面层功能
在用户界面层ModuleDemoUI层中添加web窗体userLogin.aspx,设置好基本布局,css样式。用户界面层调用业务逻辑层,因此要先添加对业务层和实体模型层的引用及引入相应的命名空间。
在登录按钮中添加Client事件。事件关键代码主要是完成界面用户数据与业务逻辑层传过来的数据比较,比较结果为TRUE这进入下一个Web界面。否则重新刷新userLogin.aspx。实例化业务逻辑层的类,用来传递数据访问层读取的用户姓名和用户密码的信息。在登录点击事件中,先接收用户姓名,用户密码接着判断用户姓名和用户密码是否为空。若为空,则提示用户名密码不为空。然后判断用户名和密码是否与业务逻辑层传过来的用户名密码是否一致。是则保存用户名保存在客户端的Session中同时跳转到下一个Web页面。
public UserLoginBlI bll= new UserLoginBIIO;
string userName= txtUserName.Text.Trim0;
string pwd= txtP,^rd.Text.Trim0;
if (String.IsNullOrEmpty(userName)ll String.IsNullOrEmpty(pwd))
Response.Write(”alert('用户名密码不为空1 ')”);
elsef userLogin user= blI.GetUserLogin(userName);
if (user!= null)( if (user.Pwd==pwd){
Session[”UserName”]=user.UserName;
Re-sponse. Redirect(”登录成果后的web页?UserName=”+user-Name);}
把用户界面层UI设置为启动项,并设置相关页为起始页,最后右击userLogin.aspx页面,选择在浏览器中查看。
4 结束语
通过上述实例可以让我们知道,三层架构中,层与层之间是层层调用的关系,用户界面层调用业务逻辑层,通过业务逻辑层调用数据访问层的方法返回数据,在数据访问层中从数据源获取数据并封装到实体类的对象中,依次将对象返回到用户表现层。本实例具有普遍性,只需要在三层中任意增加类就能实现不同的功能,比如用户信息修改,用户信息删除,用户信息增加,用户信息查询等功能。當然,笔者通过类比的方法,学生比较容易地理解了三层架构理论知识,也为教师提供了一种可参考的讲授课程思路。
参考文献:
[1]郭宏锦.基于B/S架构的教师信息管理系统设计与实现[Jl-电脑编程技巧与维护,2016(14):74-76.
[2]陈焕彬.浅谈.NET三层架构在系统开发中的应用[J].电脑与信息技术,2016,24(5):45-47.
[3]徐照兴.ASP.NET就业实例教程[EB/OL].https://edu.csdn.net/combo/detail/721.
【通联编辑:光文玲】