通常意义上的三层架构就是将整个业务应用划分为:表现层(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、能够非常easy的用新的实现来替换原有层次的实现;
3、能够减少层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
6、结构更加的明白
7、在后期维护的时候,极大地减少了维护成本和维护时间
缺点
1、减少了系统的性能。
这是不言而喻的。
假设不採用分层式结构,非常多业务能够直接造訪数据库,以此获取对应的数据,如今却必须通过中间层来完毕。
2、有时会导致级联的改动。这样的改动尤其体如今自上而下的方向。假设在表示层中须要添加一个功能。为保证其设计符合分层式结构,可能须要在对应的业务逻辑层和数据訪问层中都添加对应的代码。
3、添加了开发成本。