Coin163

首页 > 【个人机房重构】——三层架构,系统登录 - 博客频道 - CSDN.NET

【个人机房重构】——三层架构,系统登录 - 博客频道 - CSDN.NET

相关标签: 架构

2020腾讯云双十一活动,全年最低!!!(领取3500元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1073

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
入口地址https://www.aliyun.com/minisite/goods

相关推荐:Emacs 使用graphviz-dot-mode创建架构图 - 博客频道 - CSDN.NET

安装 首先要安装graphviz-dot-mode模块,如果list-packages的站点国内无法访问,改为手动下载graphviz-dot-model.el,放到~/.emacs.d/目录下。 然后修改init.el文件: ;; graphviz-dot-model(load-file "~/.emacs.d/graphviz-dot-model.el") ubutnu系统下要安

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


首先:



这是三层设计:




下边是具体的代码:

【U层】

相关推荐:编译器架构的王者LLVM——(3)用代码生成代码 - 博客频道 - CSDN.NET

LLVM平台,短短几年间,改变了众多编程语言的走向,也催生了一大批具有特色的编程语言的出现,不愧为编译器架构的王者,也荣获2012年ACM软件系统奖 —— 题记 用代码生成代码 LLVM的开发思路很简单,就是用C++代码去不断生成llvm字节码。 RedApple语言示例 这

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>Public Class frmLogin  
    '登录
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '判断用户名、密码是否为空
        If Trim(txtUname.Text) = "" Or Trim(txtPwd.Text) = "" Then
            MsgBox("登录信息不能为空")
        End If

        Dim enUser As New Entity.UserInfoEntity         '实例化新的UserInfoEntity,用来传递B层的实体
        Dim BCheck As New BLL.LoginBLL                  '定义BCheck,用来传递参数

        '将输入的用户名、密码传递给实体层
        enUser.userName = Trim(txtUname.Text)
        enUser.Pwd = txtPwd.Text

        If BCheck.Check(enUser) = True Then
            MsgBox("登录成功!")
        Else
            MsgBox("登录失败!")
        End If
    End Sub
    '取消
    Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
        Me.Close()
    End Sub
End Class</strong></span>

【B层】

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>Public Class LoginBLL
    Function Check(ByVal user As Entity.UserInfoEntity) As Boolean
        Dim DUser As New DAL.LoginDAL                  '实例化新对象
        Dim BUser As New Entity.UserInfoEntity

        '传值
        BUser.userName = user.userName
        BUser.Pwd = user.Pwd
        BUser = DUser.Check(BUser)

        If BUser.Pwd = user.Pwd Then
            Return True
        Else
            Return False
        End If

    End Function
End Class</strong></span>

【D层】

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>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.UserInfoEntity
        Dim read As SqlDataReader
        Try
            conn.Open()                     '打开数据库
            read = cmd.ExecuteReader       '执行查询语句,并生成一个DataRead
            read.Read()
            users.userName = read.Item("userName")
            users.Pwd = read.Item("Pwd")
            Return user
        Catch ex As Exception
            user.Pwd = ""
            Return user
        End Try
    End Function

End Class</strong></span>

【Entity】

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>Public Class UserInfoEntity
    '用户表实体
    '定义用户表中的userName、name、Pwd、level、registerDate、registerTeacher
    Private _userName As String                 '定义私有属性_UserName为string类型
    Public Property userName() As String        '定义共有属性userName为string类型
        Get                                     '只读
            Return _userName
        End Get
        Set(ByVal value As String)               '只写
            _userName = value                    '为strserName赋值
        End Set
    End Property
    Private _Pwd As String
    Public Property Pwd() As String
        Get
            Return _Pwd
        End Get
        Set(ByVal value As String)
            _Pwd = value
        End Set
    End Property</strong></span>

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

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

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

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



原文

    在进行个人版机房重构的之前,系统登录的例子是每个人必敲的。在这里,就不过多的阐述关于三层的理解了。 首先: 这是三层设计: 下边是具体的代码: 【U层】 <span style="font-family:Kai

------分隔线----------------------------