首页 >> 大全

【个人机房重构】——三层架构,系统登录

2023-08-31 大全 83 作者:考证青年

在进行个人版机房重构的之前,系统登录的例子是每个人必敲的。在这里,就不过多的阐述关于三层的理解了。

首先:

机房架构图_机房架构重构登录个人系统_

这是三层设计:

机房架构图_机房架构重构登录个人系统_

下边是具体的代码:

机房架构图__机房架构重构登录个人系统

【U层】

Public Class frmLogin  '登录Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'判断用户名、密码是否为空If Trim(txtUname.Text) = "" Or Trim(txtPwd.Text) = "" ThenMsgBox("登录信息不能为空")End IfDim enUser As New Entity.UserInfoEntity         '实例化新的UserInfoEntity,用来传递B层的实体Dim BCheck As New BLL.LoginBLL                  '定义BCheck,用来传递参数'将输入的用户名、密码传递给实体层enUser.userName = Trim(txtUname.Text)enUser.Pwd = txtPwd.TextIf BCheck.Check(enUser) = True ThenMsgBox("登录成功!")ElseMsgBox("登录失败!")End IfEnd Sub'取消Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.ClickMe.Close()End Sub
End Class

【B层】

Public Class LoginBLLFunction Check(ByVal user As Entity.UserInfoEntity) As BooleanDim DUser As New DAL.LoginDAL                  '实例化新对象Dim BUser As New Entity.UserInfoEntity'传值BUser.userName = user.userNameBUser.Pwd = user.PwdBUser = DUser.Check(BUser)If BUser.Pwd = user.Pwd ThenReturn TrueElseReturn FalseEnd IfEnd Function
End Class

【D层】

Imports System.Data.SqlClient
Imports System.Data
Public Class LoginDAL'创建数据库连接'Dim ConnStr As String = "Data Source=localhost;Initial Catalog=ChargeSystem;User ID=sa;Pwd=123"Dim ConnStr As String = "Data Source=192.168.24.207;Initial Catalog=ChargeSystem;User ID=sa;Pwd=123"Dim conn As SqlConnection = New SqlConnection(ConnStr)Function Check(ByVal user As Entity.UserInfoEntity) As Entity.UserInfoEntity        '传递实体'其实下面的这段程序就相当于dim sql as string ="select  ID,UserName,PWD From Users Where UserName='"User.UserName"' And PWD='"User.PWD"'"  '而写成这个程序块是为了防止Sql注入,即安全性考虑。  '@UserName相当于传了一个参数,("@UserName", User.UserName)相当于给参数名字传递了参数。Dim sql As String = "select * from T_UserInfo where userName=@userName and Pwd=@Pwd;"Dim cmd As SqlCommand = New SqlCommand(sql, conn)cmd.Parameters.Add(New SqlParameter("@userName", user.userName))cmd.Parameters.Add(New SqlParameter("@Pwd", user.Pwd))Dim users As New Entity.UserInfoEntityDim read As SqlDataReaderTryconn.Open()                     '打开数据库read = cmd.ExecuteReader       '执行查询语句,并生成一个DataReadread.Read()users.userName = read.Item("userName")users.Pwd = read.Item("Pwd")Return userCatch ex As Exceptionuser.Pwd = ""Return userEnd TryEnd FunctionEnd Class

【】

Public Class UserInfoEntity'用户表实体'定义用户表中的userName、name、Pwd、level、registerDate、registerTeacherPrivate _userName As String                 '定义私有属性_UserName为string类型Public Property userName() As String        '定义共有属性userName为string类型Get                                     '只读Return _userNameEnd GetSet(ByVal value As String)               '只写_userName = value                    '为strserName赋值End SetEnd PropertyPrivate _Pwd As StringPublic Property Pwd() As StringGetReturn _PwdEnd GetSet(ByVal value As String)_Pwd = valueEnd SetEnd Property

B层主管业务逻辑,也就是说和业务有关的放在B层。U层是表现层,主管和用户的互动,用户输入,以及向用户展示都是U层的事。D层为数据访问层,主管和数据库打交道。

我个人感觉最难理解的是实体层,这一层是“跳出三界外,不在五行中”。它不属于三层中的任何一层,但是三层每一层都与他关联。最初的理解是有多少个表,就最少有多少个实体类,每个实体类的属性为表的字段。慢慢的,觉得这样划分实体类是有问题的,因为涉及到多个表的时候,那么就返回不了实体类了,因而出现了基于视图创建实体类。其实实体类并不是规定死的,他可以完全按照你的需要进行改造,怎么用更符合面向对象,就怎么用,没有那么多的条条框框。这也就是他“跳出三界外,不在五行中”的原因吧。

其实,C#版的登录例子放假之前就敲好了,开学来了,本应该早就进入个人重构的阶段。可是,却一直拖着,拖到了现在。其中,自己做事情经常拖延,老是把事情弄到最后。时间管理做得不够好。另外,对个人重构版的机房,有些恐惧,一直在躲避。不过,该来的终究会来的。出来混,迟早都是要还的。

有时候,不要害怕开始,勇敢的迈出第一步。开始,说明你已经成功了一半了;开始,说明你已经在成功的路上了。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了