张洋 葛良全
摘要:针对传统架构设计的高校管理系统存在的稳定性差、安全性差、可扩展性差等问题,开发者逐渐倾向采用分层的思想来设计该类系统。实践表明,将系统分为三层来设计对于提高系统稳定性、安全性、可扩展性等较为有效,并且可以提高代码的复用率,以及增强系统的易维护性、可移植性等。这种三层架构通常把系统分为表示层、业务逻辑层、数据访问层。
关键词:三层架构;web应用;管理系统;C#
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)06-1244-02
Design and Implementation of Management System of Colleges and Universities Based on 3-tier Architecture
ZHANG Yang,GE Liang-quan
(College of Information Science & Technology, Chengdu University of Technology, Chengdu 610059, China)
Abstract: According to the problem of poor stability , poor security, and poor scalability in the design of traditional management system architecture , developers tend to use the hierarchical thinking to the design of such systems. The long-term practice shows that, the system that divided into three layers can be more effective to improve the stability, security, and scalability of the system, and can improve the reusability of code, and enhance the system maintainability, portability, etc.. The three layer architecture often divides the system into presentation layer, business logic layer, data access layer.
Key words: 3-tier application; web application; management system; C#
随着计算机技术的发展,软件的发展也是日新月异,软件的规模也在不断扩大。从初期几百行代码的小程序到现在几百万行的大型软件系统,软件的结构越来越复杂,代码越来越长,因此软件的维护也是越来越困难。开发者一直在追寻一种合理的设计,使得开发出来的软件系统功能完善、结构优良并且具有较高稳定性、安全性、可扩展性,易移植、易维护,同时代码的重用率高。在开发人员不断的实践与探索中,发现将软件分层设计可以很大程度的提高软件的稳定性、安全性、可扩展性以及可维护性。分层设计使得层与层之间的依赖性降低,使用这种弱耦合结构大大的提高了代码的复用率。
早期运用分层结构的思想开发软件时,开发者采用两层结构,两层结构主要是把界面层和代码层分开,这使得代码层既要实现逻辑判断功能,同时也要实现数据操作的功能。这种结构设计的软件在提高安全性、代码重用性以及可维护性等方面并没有得到明显的效果。因此,针对解决上述问题,三层架构应运而生。该文较详细的阐述了三层架构的基础概念,并以某高校管理系统的实现为例,逐步地描述了实现基于三层架构的web应用程序的开发过程。
1 三层架构
所谓三层架构,就是在两层结构的基础上,把代码层分为两个层,即把实现逻辑判断功能的代码与实现数据操作功能的代码分开。这样,应用程序就呈现出三个方面:数据操作、逻辑处理、界面表示,对应到三层架构,它们分别被是:数据访问层、业务逻辑层、表示层。
数据访问层(DAL):数据访问层提供操作数据库的功能,包括数据库的查询、新增、修改、删除等操作。它被业务逻辑层调用,响应业务逻辑层的请求,将抓取的数据返回给业务逻辑层。数据访问层并不对数据做任何处理,它仅仅只负责抓取业务逻辑层请求的数据。
业务逻辑层(BLL):业务逻辑层被表示层调用,同时又可以调用数据访问层,它是连接表示层和数据访问层的桥梁。业务逻辑层在表示层和数据访问层之间完成数据交互的功能。它接受表示层传来的参数,再把这些参数传递给数据访问层,数据访问层根据这些参数抓取符合条件的数据,然后将抓取得的数据交由业务逻辑层返回给表示层。业务逻辑层同时还要完成复杂的逻辑判断、数据校验等功能。
表示层(UI):表示层调用业务逻辑层去访问数据访问层从而获取数据;同时,表示层也会传递数据给业务逻辑层。通常我们也会在表示层做少量的逻辑判断,例如校验用户输入数据格式是否合法等。由此看来,表示层并不一定要将所有的逻辑处理都交由业务逻辑层来做,在表示层做轻量的逻辑处理也无可厚非,毕竟这样做可以使性能得到提高。
2 设计与实现
接下来在实践项目中体会三层架构理论。
项目背景:高校需要对新生信息进行管理,如果使用传统的管理方式不仅存在数据容易丢失的隐患,也存在数据管理无序的问题。同时,高校各部门之间的数据同步也是十分重要的。因此,需要构建web应用系统来对新生数据进行管理,以解决上述问题。
在实际开发中,为了方便整个项目的开发,往往会在项目中建立几个类库,为了与三层架构中的各层对应起来,我们将类库如下命名:OracleHelper、BusinessLogicLayer、DataAccessLayer、DataEntity。
BusinessLogicLayer表示业务逻辑层,DataAccessLayer表示数据访问层;OracleHelper是Oracle数据库的帮助类,它提供较底层的操作数据库的方法,数据访问层只需要传递符合接口要求的参数即可调用这些方法来操作数据库。DataEntity是实体类库。需要特别说明的是,DataEntity看似不属于任何一层,但是它却贯穿于整个三层架构中,它是数据传递的媒介。DataEntity中封装的每一个类都是一个实体,实体通常对应数据库中的一个表,表中的每个字段对应一个公有属性。
2.1 数据访问层
业务逻辑要获取数据必然要进行数据库的操作,通常不会让业务逻辑直接去操作数据库,而是将数据访问层作为桥梁与数据库产生联系。下面IsExist函数的参数是sql语句,这个sql语句是通过用户传来的数据生成的。函数的功能是查询出数据库中是否存在满足条件的数据行。ExecuteScalar函数是封装在OracleHelper帮助类中的静态方法。
using System.Data.OracleClient;
using System.Data;
public class DataAccessLayer
{public bool IsExist(string sqlStr)
{......
int n = Convert.ToInt32(OracleHelper.ExecuteScalar(Conn.SqlConn, CommandType.Text, sqlStr, parms));
return n > 0;
}}
2.2 业务逻辑层
业务逻辑层实现业务逻辑判断。它接收表示层传来的数据,通常会将这些数据按照该层的业务逻辑进行相应的处理,然后再将处理后的结果传递给数据访问层。当数据访问层返回数据后,再做一次业务逻辑的逆处理,将结果返回给表示层。下面代码片段首先用表示层传来的参数生成了sql语句,然后调用数据访问层,最后根据数据访问层返回的结果再次做逻辑判断。
public class BusinessLogicLayer
{public static string IsExist(string StuName)
{......
DataAccessLayer dal = new DataAccessLayer();
string sqlStr = @"SELECT COUNT(*) FROM STUTABLE WHERE STUNAME='小明'";
bool rsb = dal.IsExist(sqlStr);
if(rsb)
...... //数据已存在
else
...... //数据不存在
}}
2.3 表示层
表示层是最接近用户的一层,它感知用户的操作,并将结果返回,呈现给用户。该层不会直接操作数据库,而是通过业务逻辑层来访问。下面是表示层的部分代码,通过Request对象接收前台界面传来的数据,然后调用业务逻辑层,最后将业务逻辑层返回的结果显示在前台界面上。此外,BusinessLogicLayer类中的IsExist方法是静态的,因此不需要实例对象,可以直接通过BusinessLogicLayer类调用。
public void IsExist()
{......
string ExamCode = Request["ExamCode"].ToString().Trim();
string result = BusinessLogicLayer.IsExist(ExamCode);
...... //将结果显示在界面上}
3 结束语
从上述三层架构的具体应用中可见,当业务逻辑发生变化时,几乎可以不用修改数据访问层和表示层。这就是分层设计带来
的灵活性,它使得层与层之间的依赖性降低,使得各层的功能独立,互不干扰,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响,使用这种弱耦合结构大大的提高了代码的复用率和系统的可维护性。
参考文献:
[1] 刘仲英.管理信息系统分析与设计[M].北京:中国物资出版社,1993.
[2] 路红武,尤枫,赵恒永.基于.NET企业信息资源管理系统的设计与实现[J].计算机与现代化,2005(6):79-82.
[3] Stephen Walther.ASP. NET 技术内幕[M].马朝晖,译.北京:机械工业出版社,2002.
[4] 陈赵云,董海燕,周永福.基于.NET Framework的Web管理系统研究与开发(C#)[J].电脑知识与技术,2010,6(17):4660-4663.
[5] 常永英.ASP.NET 程序设计教程(C# 版)[M].北京:机械工业出版社,2009:116-122.
[6] Karli Watson.Christian Nagel.Beginning Visual C#2005[M].北京:清华大学出版社,2006:20-81.
[7] 王海燕.C#.NET下三层架构数据库应用系统开发[J].计算机技术与发展,2012,22(6):78-81.
[8] 郭胜.秦岸.马丽.C#.NET程序设计教程[M].北京:清华大学出版社,2002:36-39.
[9] 斯梅切尔.C# 和.NET 2.0 实战[M].施凡,译.北京:人民邮电出版社,2008:13-19.
[10] 马长青,刘中合,刘贤喜.基于Web数据库技术的系统开发[J].山东农业大学学报:自然科学版,2005,36(3):467-470.