理解分层真的花费了很长的时间,不过现在看来,对分层还是有了一些初步的理解,暂时贴出来见见光光,里面可能有很多不足到之处,希望大家能及时指出来,感激不尽,在此谢过了,小菜虫迫切需要您的指教。
一、首先说说为什么要分层?
背景:2011年,廊坊师范学院,信息技术作品展。
事件:我们七个同学一起合作用VB做了一个小程序名叫《宝宝乐园》,其中,有人做英语部分,有人做算术部分,有人做电子琴,有人做涂鸦,还有人做动画界面,还有人收集材料,总之,最后通过加载窗体的方式攒出来了一个程序。我们美名曰这个过程叫做团队合作开发~
初步学习了三层之后才晓得这只是把一个人的工作分给了多个人来干,团队合作效率非常差,而且程序运行非常不和谐,就好像一件上衣,两个人做袖子,一个人做领子,还有一个人做中间部分,最后缝到一起。当袖子出了问题,就得把线拆掉,然后重新做袖子,做袖子的人还要一段段的找袖子的哪部分出了问题,做好之后,还要继续缝到上衣中。至于最后上衣的样子就不用说了。而且程序部分都是各做各的,没有任何规范可言。
那么,我们初步认识一下三层: 如果把项目暂且分成三层,UI层、DAL层、BLL层,如下图的三者的联系:
1、表示层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
当然下图中也有一个Entity实体类,他在三层中并不是作为一层而存在的,而是作为一个类库,起到封装的作用,带着参数像血液一样流走与三层之间,谁需要就给谁,这是我的理解。
到底为什么要分层呢?因为分层具备的优点:
1、分工就明确多了,各人只需要关注自己的那一层,这样就可以根据工作人员各自的优势来分工,有助于提高效率。
2、代码就规范多了,各人根据UML图或者文档提供的资料,进行统一的规范。
3、层次清晰,利于维护。
4、高内聚,低耦合。
........
二、那么下面我贴出一个简单的登录系统的代码,通过三层和Vb.net实现
-
-
-
-
Private strUserName As String
-
Private strPassword As String
-
-
-
-
-
-
-
-
''' <remarks>2012年1月10日 08:57 by JYH</remarks>
-
Public Property userName() As String
-
-
-
-
Set(ByVal value As String)
-
-
-
-
-
-
-
-
-
''' <remarks>2012年1月10日 09:01 by JYH</remarks>
-
Public Property password() As String
-
-
-
-
Set(ByVal value As String)
-
-
-
-
-
-
-
Imports System.Data.SqlClient
-
-
-
-
-
Private connStr As String = "server=192.168.24.222;database=charge3_sys;uid = sa;pwd=123456"
-
-
-
Public Function GetDataRow(ByVal EntityUserInfo As Entity.UserInfo) As Entity.UserInfo
-
Dim sql As String = "select * from UserInfo where UserName='" & EntityUserInfo.userName & "'"
-
Dim conn As SqlConnection = New SqlConnection(connStr)
-
Dim cmd As SqlCommand = New SqlCommand(sql, conn)
-
Dim sdr As SqlDataReader = Nothing
-
Dim UserDataTable As DataTable = New DataTable()
-
-
Dim dap As SqlDataAdapter = New SqlDataAdapter(cmd)
-
Dim EntityUserInfo1 As New Entity.UserInfo
-
-
-
-
Dim dr As DataRow = ds.Tables(0).Rows(0)
-
EntityUserInfo1.userName = dr("UserName")
-
EntityUserInfo1.password = dr("Password")
-
-
-
EntityUserInfo1.password = ""
-
-
-
If Not IsNothing(conn) Then
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Public Function Check(ByVal EntityUserInfo As Entity.UserInfo) As Boolean
-
Dim DALUserInfo As New DAL.da_UserInfo
-
Dim EntityUserInfo2 As New Entity.UserInfo
-
EntityUserInfo2.userName = EntityUserInfo.userName
-
EntityUserInfo2 = DALUserInfo.GetDataRow(EntityUserInfo2)
-
If Trim(EntityUserInfo2.password) = Trim(EntityUserInfo.password) Then
-
-
-
-
-
-
-
-
'UI层,窗体代码
-
-
-
-
-
-
Public LoginOk As Boolean = False
-
-
Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
-
-
-
-
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
-
If Trim(txtUserName.Text) = "" Or Trim(txtPassword.Text) = "" Then
-
-
-
-
Dim EntityUserInfo As New Entity.UserInfo
-
Dim BLLUserInfo As New BLL.b_userInfo
-
EntityUserInfo.userName = txtUserName.Text
-
EntityUserInfo.password = txtPassword.Text
-
-
If BLLUserInfo.Check(EntityUserInfo) Then
-
-
-
-
-
-
-
-
-
-
-
Private Sub frmTest_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
-
-
If LoginOk = False Then End
-
-
-
-
-
-
-