三层架构
来源:互联网 发布:中南大学教务网络平台 编辑:程序博客网 时间:2024/05/18 00:03
一、两层架构
我们之前敲写的机房收费系统,均采用的两层架构,两层架构有如下特点:
1)数据库访问和用户类型判断逻辑放在一起实现。
2)用户界面层直接调用数据访问实现。
3)整个系统功能放在同一项目中实现。
传统的两层结构的特点是用户界面层直接与数据库进行交互,还要进行业务规则、合法性校验等工作。两层结构软件模型如图
这种结构存在着很多局限性,比如:一旦用户的需求发生变化,应用程序都需要进行大量修改,甚至需要重新开发,给系统的维护和升级带来了极大的不便;用户界面层直接访问数据库,会带来很多安全隐患。为了克服两层结构的局限性提出了三层结构
二、三层架构
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。
三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。
其结构如图所示
(1)表现层(UI)
通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
如在机房收费系统中,登陆界面就属于UI层
登陆界面代码
<span style="white-space:pre"></span>private void btnLogin_Click(object sender, EventArgs e) <span style="white-space:pre"></span>{ <span style="white-space:pre"></span> string userName = txtUsername.Text.Trim(); <span style="white-space:pre"></span> string password = txtPassword.Text; <span style="white-space:pre"></span> Login.BLL.LoginManager mgr = new Login.BLL.LoginManager(); <span style="white-space:pre"></span> Login.Model.UserInfo user=mgr.UserLogin(userName, password); <span style="white-space:pre"></span> MessageBox.Show("登陆用户:"+user.UserName ); <span style="white-space:pre"></span>}UI作用:如以上代码所示,登陆端不承担访问数据源和处理任何数据的任务,只采集用户输入的信息,将信息传递给业务逻辑层,由业务逻辑层进行处理。
UI设计的原则:用户至上,兼顾简洁。
(2)业务逻辑层(BLL)
针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
BLL作用:主要承担了承上启下的作用:
1)从DAL中获取数据,以供UI使用
2)从UI中获取用户指令和数据,执行业务逻辑。
3)从UI中获取用户指令和数据,通过DAL写入数据源。
如从登陆界面(UI层)获取登陆用户名和密码后交给BLL层处理数据。
其代码如下
<span style="white-space:pre"></span>public class LoginManager <span style="white-space:pre"></span>{ <span style="white-space:pre"></span>public Login.Model.UserInfo UserLogin(string username,string password) <span style="white-space:pre"></span>{ <span style="white-space:pre"></span>throw new NotImplementedException(); <span style="white-space:pre"></span>Login.DAL.UserDao uDao = new Login.DAL.UserDao(); <span style="white-space:pre"></span>Login.Model.UserInfo user= uDao.SelectUser(username, password); <span style="white-space:pre"></span>if(user !=null) <span style="white-space:pre"></span>{ <span style="white-space:pre"></span> Login.DAL.ScoreDao sDao = new Login.DAL.ScoreDao(); <span style="white-space:pre"></span> sDao.UpdateScore(username, 10); <span style="white-space:pre"></span> return user; <span style="white-space:pre"></span>} <span style="white-space:pre"></span>else <span style="white-space:pre"></span>{ <span style="white-space:pre"></span>throw new Exception("登陆失败"); <span style="white-space:pre"></span>} <span style="white-space:pre"></span>} <span style="white-space:pre"></span> }BLL职责机制:
UI→BLL→UI
UI→BLL→DAL→BLL→UI
(3)数据访问层(DAL)
该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
DAL作用:
从数据源加载、写入、删除数据。
在登陆界面中其代码如下
<span style="white-space:pre"></span>public class UserDao <span style="white-space:pre"></span>{ <span style="white-space:pre"></span>public Login.Model.UserInfo SelectUser(string userName,string password) <span style="white-space:pre"></span>{ <span style="white-space:pre"></span>using (SqlConnection conn = new SqlConnection(DbUntil.ConnString)) <span style="white-space:pre"></span>{ <span style="white-space:pre"></span>SqlCommand cmd = conn.CreateCommand(); <span style="white-space:pre"></span>cmd.CommandText = @"SELECT ID,UserName,Password,Emai FROM USERS WHERE UserName=@UserName AND Password=@Password"; <span style="white-space:pre"></span>cmd.CommandType = CommandType.Text; <span style="white-space:pre"></span>cmd.Parameters.Add(new SqlParameter("@UserName", userName)); <span style="white-space:pre"></span>cmd.Parameters.Add(new SqlParameter("@Password", password)); <span style="white-space:pre"></span>conn.Open(); <span style="white-space:pre"></span>SqlDataReader reader = cmd.ExecuteReader(); <span style="white-space:pre"></span>Login.Model.UserInfo user = null; <span style="white-space:pre"></span>while (reader.Read()) <span style="white-space:pre"></span>{ <span style="white-space:pre"></span>if(user ==null) <span style="white-space:pre"></span>{ <span style="white-space:pre"></span>user = new Login.Model.UserInfo(); <span style="white-space:pre"></span>} <span style="white-space:pre"></span>user.ID= reader.GetInt32(0); <span style="white-space:pre"></span>user.UserName = reader.GetString(1); <span style="white-space:pre"></span>user.Password = reader.GetString(2); <span style="white-space:pre"></span>if(!reader.IsDBNull(3)) <span style="white-space:pre"></span>{ <span style="white-space:pre"></span>user.Email = reader.GetString(3); <span style="white-space:pre"></span>} <span style="white-space:pre"></span>return user; <span style="white-space:pre"></span>} <span style="white-space:pre"></span>} <span style="white-space:pre"></span>} <span style="white-space:pre"></span>}三层优缺点:
优缺点
优点
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
缺点
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。- 【三层】三层架构初识
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- 三层架构
- ios 清理缓存
- Remove Duplicates from Sorted List
- Myeclipse链接sql server 2005是出现Error while performing database login with the sql2005 driver:
- 九度1156:谁是你的潜在朋友
- javamail发送邮件
- 三层架构
- 重拾Java回忆录(三):Java03类的特性
- 《高级Bash脚本编程指南》学习笔记(9)——基础:文件测试操作符
- “宠伴”APP使用及功能简介
- 入库盘点机销邦Supoin X3084数据采集器
- comboBox
- Triangle
- ORA-01460的重现与解决
- 详谈 oracle 索引