首页 > 代码库 > 三层小结
三层小结
通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
UI的作用
(1)向用户展现特定业务数据。
(2)采集用户的输入信息和操作。
UI的设计原则
用户至上,兼顾简洁。
UI中常用的技术
WindowsForm:Form、Control
ASP.NET:aspx、ascx、master、html
表示层(UI)主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。位于最外层(最上层),最接近用户。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。
业务逻辑层(BLL):
BLL的作用
(1)从DAL中获取数据,以供UI显示用;
(2)从UI中获取用户指令和数据,执行业务逻辑;
(3)从UI众获取用户指令和数据,通过DAL写入数据源。
BLL的职责机制
(1)UI->BLL->UI(当业务逻辑层可以独自处理时)
(2)UI->BLL->DAL->BLL->UI(当需要数据访问的时候)
业务逻辑层(BLL)主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
数据访问层(DAL):
数据访问层(DAL)主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。简单的说就是实现对数据表的Select,Insert,Update,Delete的操作。
下面以图示的方法表示三层架构:
那么,我们为什么要使用三层呢?
区分层次的目的即为了“高内聚低耦合”的思想。高内聚,低耦合的系统有什么好处呢?事实上,短期来看,并没有很明显的好处,甚至短期内会影响系统的开发进度,因为高内聚,低耦合的系统对开发设计人员提出了更高的要求。但是,要记住,不谋万世者,不足谋一时。高内聚,低耦合的好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维护开发,持续的支持业务的发展,而不会成为业务发展的障碍。世间万物,兴一利,必生一弊。要在利弊之间进行取舍。
下面是一个三层的DEMO举例:
表现层(UI):
Public Class frmLogin Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click Try '获得表层数据 Dim UserName As String Dim Password As String UserName = txtUserName.Text.Trim() Password = txtPassword.Text '调用B层,做判断 Dim mgr = New Login.BLL.LoginManager() Dim user = mgr.UserLogin(UserName, Password) '捕获异常 Catch ex As Exception MsgBox(ex.Message.ToString()) End Try End Sub Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click Me.Close() End Sub End Class业务逻辑层(BLL):
Public Class LoginManager Public Function UserLogin(ByVal userName As String, ByVal password As String) Dim uDao = New Login.DAL.UserDAO '实例化D层中新的UserDAO对象 Dim user = uDao.SelectUser(userName, password) '判断是否查询到记录 If user Is Nothing Then Throw New Exception("登录失败") '如果没有,抛出异常,显示“登陆失败” Else MsgBox("登录成功") '如果有,显示“登陆成功” End If Return user End Function End Class数据访问层(DAL):
Imports System.Data.SqlClient Public Class UserDAO Public Function SelectUser(ByVal userName As String, ByVal userPassword As String) Dim db As New Login.DAL.DbUtil Using conn As New SqlConnection(db.sqlConnect) Dim cmd As New SqlCommand cmd = conn.CreateCommand() cmd.CommandText = "select*from T_UserInfo where userName=@userName and userPassword=@userPassword" '参数化查询 cmd.CommandType = CommandType.Text cmd.Parameters.Add(New SqlParameter("@userName", userName)) '将实体给@userName cmd.Parameters.Add(New SqlParameter("@userPassword", userPassword)) '将实体给@userPassword conn.Open() '打开数据库 Dim reader As SqlDataReader '定义读取数据表 reader = cmd.ExecuteReader() '执行SQL查询并得到结果,返回一个SqlDataReader对象 Dim user As Login.Model.UserInfo '实例化一个LoginModel.UserInfo user = Nothing While (reader.Read()) '读取值 If (user Is Nothing) Then user = New Login.Model.UserInfo() End If user.UserName = reader.GetString(4) user.Password = reader.GetString(2) End While conn.Close() '关闭连接 Return user End Using End Function End Class
Public Class DbUtil Public sqlConnect As String = "Server=.;Database=Charge;User ID=sa;Password=123456;" '连接数据库 End Class实体层(Entity):
我的代码自己生成了。
Public Class UserInfo Property Password As String Property UserName As String End Class
三层结构的优缺点:
优点1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
6、结构更加的明确
7、在后期维护的时候,极大地降低了维护成本和维护时间
缺点
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
3、增加了开发成本。
三层小结