机房重构是对曾经的VB的机房收费系统推翻后运用VB.NET和设计模式以及分层进行构建的系统。
刚开始时只看着别人都用七层开始敲,但是自己确实不知道七层是如何出来的,更是不知从何下手,所以一拖就这么长时间过去了。才发现最可怕的不是问题的存在而是自己不去面对问题。当意识到的时候,自己已经被拉下了。所以一着急就直接上七层,不懂就只能看博客照葫芦画瓢,结果一想可知,逻辑上的项目根本行不通,自己也理解不通。后来师傅让我从最简单的三层开始敲,每到一个阶段,当自己发现问题时,自己就会想着办法去解决,这时在通过博客来寻找自己的需求。不然你直接按着别人的思路敲,那么你就不会知道一些方法、模式的真正需求。所以我就从七层重新回到了基础的三层。下面是我对三层机房的简单构建。
刚开始时只看着别人都用七层开始敲,但是自己确实不知道七层是如何出来的,更是不知从何下手,所以一拖就这么长时间过去了。才发现最可怕的不是问题的存在而是自己不去面对问题。当意识到的时候,自己已经被拉下了。所以一着急就直接上七层,不懂就只能看博客照葫芦画瓢,结果一想可知,逻辑上的项目根本行不通,自己也理解不通。后来师傅让我从最简单的三层开始敲,每到一个阶段,当自己发现问题时,自己就会想着办法去解决,这时在通过博客来寻找自己的需求。不然你直接按着别人的思路敲,那么你就不会知道一些方法、模式的真正需求。所以我就从七层重新回到了基础的三层。下面是我对三层机房的简单构建。
首先是实体层,它里面的实体对应的则是数据库表里需要登录用到的用户表的字段。
<span style="font-size:18px;">Public Class LoginEntity
'定义实体类LoginEntity
Private _userName As String
Private _userPwd As String
Private _userLevel As String
'声明数据库中的字段信息
Public Property userName As String
Get
Return _userName
End Get
Set(value As String)
_userName = value
End Set
End Property
Public Property userPwd As String
Get
Return _userPwd
End Get
Set(value As String)
_userPwd = value
End Set
End Property
Public Property userLevel() As String
Get
Return _userLevel
End Get
Set(value As String)
_userLevel = value
End Set
End Property
End Class
</span>
下面是显示层,即窗体的上的显示。它所需要的功能是将用户名和密码输入对应的文本框,通过确认从而进入系统内部。当然他的验证过程看似短暂,一眨眼的功夫,可是后方的验证过程可是比想象的复杂
Imports Charge.Bll.LoginBll
Imports Charge.Entity.LoginEntity
Public Class frmLogin
Private Sub btnQuit_Click(sender As Object, e As EventArgs) Handles btnQuit.Click
'退出按钮
Me.Close()
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
'确认按钮
'判断用户名和密码是否为空
If txtName.Text = "" Then
MsgBox("请输入用户名")
End If
If txtPwd.Text = "" Then
MsgBox("请输入密码")
End If
'定义用户实体user,实例化Entity层的参数
Dim user As New Charge.Entity.LoginEntity
'将文本框内容赋予实体
user.userName = Trim(txtName.Text)
user.userPwd = Trim(txtPwd.Text)
Dim Buser As New Bll.LoginBll
If Buser.CheckUser(user) = True Then
MsgBox("登陆成功")
Else
MsgBox("登陆失败")
End If
End Sub
Private Sub frmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
txtName.Select() '用户名文本框在窗体载入时获得活动焦点
txtName.Focus()
End Sub
End Class
接下来是D层。简单的说D层就是与数据库打交道的层级。在这层里对数据库的数据进行增删改查。并把结果返回给B层。
Public Class DBString
Public Shared ConnStr As String = "Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=mecharge;Data Source=YZX\SA;Password=123"
End Class
Imports System.Data.SqlClient
Imports Charge.DAL.DBString
Imports Charge.Entity.LoginEntity
Public Class LoginDAL
'连接数据库字符串
Dim conn As SqlConnection = New SqlConnection(DBString.ConnStr)
Function CheckUser(ByVal user As Entity.LoginEntity) As Boolean
'这段代码的主要作用就是防止SQL的注入
Dim sql As String = "select * from user_Info where user_ID=@user_ID and user_PWD=@user_PWD"
Dim cmd As SqlCommand = New SqlCommand(sql, conn)
cmd.Parameters.Add(New SqlParameter("@user_ID", user.userName)) '将参数值赋予参数集
cmd.Parameters.Add(New SqlParameter("@user_PWD", user.userPwd))
Dim reader As SqlDataReader '定义一个reader来读取数据
conn.Open() '打开数据库
reader = cmd.ExecuteReader() '运行查询,结果放到reader
If reader.Read() Then '判断是否查到此条数据,并以Boolean值返回。
Return True
Else
Return False
End If
End Function
End Class
最后是B层,逻辑判断层。对层的返回结果进行逻辑判断,随后返会给U层
Public Class LoginBll
Function CheckUser(ByVal user As Entity.LoginEntity) As Boolean
Dim Duser As DAL.LoginDAL = New DAL.LoginDAL
'检查用户是否存在,添加CheckUser的方法
Dim flag As Boolean
flag = Duser.CheckUser(user)
Return flag
End Function
End Class
其实代码自己弄出来以后觉得还是挺简单的,可是当自己走出的第一步时,真心没有觉得它简单,走了好多弯路,写了好多没有用的语句或者是逻辑错误的语句。一个简单的三层都把自己绕的最后都差点绕进去了。更何况以后的扩建的七层。不过既然迈出第一步,(自己也知道自己的代码存在错误,在接下来的实践中需要不断完善)就坚定的迈出第二步吧,要相信车到山前必有路,当然最重要的要走而不是在原地等待路的出现。