VB.NET 三层登录系统实战:从设计到部署全流程详解

简介: VB.NET 三层登录系统实战:从设计到部署全流程详解

前言:

什么是三层

三层就是把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。

简单的点来说:就是高内聚,底耦合的思想,不会牵一发而动全身。

为什么要用到三层:

生活中饭店的例子来举例,大家可能会更理解一些。

:服务员只管接待客人

:厨师只管烹炒客人要的菜系

:采购员只管按照客人的需求来采购食材

 各司其职,共同协作为客人提供美食

问题:

为什么要需要这三种角色,为什么不合在一起,每个角色的功能的是分离的

举例:

服务员离职、请假→其他服务员代替

厨师离职→其他厨师代替

采购员离职→其他采购员代替

为什么能够替代,每个人的功能是一致,角色不行了替代就可以,如果合在一起就不好找人了。

饭店→软件

理解:

  三层从生活到软件,不会因为谁的不在或离职,从而工作停掉,三层在软件中易是如此,每个层都有特定的职责和功能,不会因为需求改动从而需要修改整个系统,只需改其中一层的的代码,通过这种方式实现代码的模块化和维护性这就是所谓的三层


过程:

1.三层包图:

 包图用于描述逻辑架构—层、子系统、包等,所以拿包图在合适不过了。


2.数据库


3.三层项目


4.用户界面


5.添加引用


代码实现:

Entity层

Public Class eUserLogin
    Private strUserNo As String '定义一个私有字段,该字段的类型为String
    Private strPassword As String '
    Public Property Password() As String
        Get '获取属性值
            Return strPassword '返回strPassword的字符串变量的值
        End Get '结束方法
        Set(value As String) '接收一个名为"value"的字符串类型的参数
            strPassword = value '传递给StrPasswrod的字符串变量
        End Set '结束方法
    End Property
    Public Property UserNo() As String
        Get
            Return strUserNo
        End Get
        Set(value As String)
            strUserNo = value
        End Set
    End Property
End Class


BLL层

Imports System.Xml
Imports Login.DAL
Public Class LoginBLL
    'UserInfo用来承载登录时输入的用户名和密码,全局实体
    Public Function login(ByVal UserInfo As Entity.eUserLogin) As Entity.eUserLogin
        '实例化D层
        Dim dLogin As New Login.DAL.UserInfoDAL
        '定义B层的返回实体
        Dim bUserInfo As New Entity.eUserLogin
        '调用D层SelectUser方法
        bUserInfo = dLogin.SelectUser(UserInfo) '执行一个名为SelectUser的方法,并将其返回值赋给"bUserInfo"的布尔型变量
        If (bUserInfo.UserNo Is Nothing Or bUserInfo.Password Is Nothing) Then '判断bUserInfo.UserNo和bUserInfo.Password是否为空
            Throw New Exception("用户名或密码错误,请查看") 'True返回消息
        Else
            MsgBox("登录成功,请稍后", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "提示")
            Return bUserInfo 'False 返回消息  
        End If
    End Function
End Class


DAL层

'单建了一类来放数据库连接
Imports System.Data.SqlClient
Public Class LinkeDAL
    Public Shared Function connstring() As String
        '连接数据库字符串
        connstring = "Server= 192.168.96.71;Database=cybercafe;User ID=sa;Password=123456;"
    End Function
End Class
Imports System.Data.SqlClient
Imports Login
Public Class UserInfoDAL
    Public Function SelectUser(UserInfo As Entity.eUserLogin) As Entity.eUserLogin
        Dim conn As New SqlConnection(LinkeDAL.connstring)
        '打开数据库
        conn.Open()
        '创建一个名为"reader"的SqlDataReader对象
        '(SqlDataReader)是一种.NET Framework中的数据读取器,用于从Microsoft SQL Server数据库中读取数据 
        Dim reader As SqlDataReader
        'D层实例化执行查询后返回实体
        Dim duserInfo As New Entity.eUserLogin
        '查询语句
        Dim sql As String = "Select * from User_Info where UserNo=@UserNo and Password=@Password"
        '创建一个名为"cmd"的SqlCommand对象,并将其初始化指定的SQL语句和数据库连接对象。 
        'SqlCommand是一个.NET Framework中的类,用于执行SQL语句并返回查询结果
        Dim cmd As New SqlCommand(sql, conn)
        '向SQL语句添加一个命名参数,就将"@UserNo"的参数添加一个值,这个值来自一个名为UserInfo的对象 
        '@符作为参数的前缀,可以让SQL语句更容易区分参数和普通参数的文本。同时,@符号可以让SQL语句更易于阅读和理解
        cmd.Parameters.Add(New SqlParameter("@UserNo", UserInfo.UserNo))
        cmd.Parameters.Add(New SqlParameter("@Password", UserInfo.Password))
        '执行查询语句并将结果以DataReader对象的形式返回,以供后续的数据处理和操作
        reader = cmd.ExecuteReader()
        '循环语句它会在SqlDataReader对象中有下一行数据时执行,在每次循环中,我们将使用SqlDataReader对象的一些方法(如GetString、GetInt32等)来获取当前行的数据,并将其存储在相应的变量中。
        While (reader.Read())
            '循环来逐行查询结果。每次循环中,我们使用read.GetString()来获取查询结果中第一列的字符串,并赋值给duseInfo对象的UserNo属性
            duserInfo.UserNo = reader.GetString(0)
            duserInfo.Password = reader.GetString(1)
        End While
        Return duserInfo
        conn.Close() '关闭数据库 
    End Function
End Class


UI层

Imports System.Xml
Public Class Form1
    Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click '单击事件
        Try
            '实例化传实体的对象
            Dim UserInfo As New Entity.eUserLogin
            '将用户名和密码放入实体,文本框中的字符串去除空格并赋给实体对象UserInfo,使实体对象能够带上参数
            UserInfo.UserNo = txtUserName.Text.Trim()
            UserInfo.Password = txtPassWord.Text.Trim()
            '判断账号否为空
            If txtUserName.Text = "" Then
                MsgBox("用户名不能为空!", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "提示")
                Return
            End If
            '判断密码是否为空
            If txtPassWord.Text = "" Then
                MsgBox("密码不能为空!", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "提示")
                Return
            End If
            '定义一个最终的返回体,returnUserInfo,承接经过D层查询,B层判断的登录信息
            '实例化BLL层的对象
            Dim bLogin As New LoginBLL.LoginBLL
            '调用B层的方法login
            bLogin.login(UserInfo)
        Catch ex As Exception '处理异常的代码
            MessageBox.Show(ex.Message.ToString) '返回一个字符串,表示异常的详细信息
        End Try '方法结束
    End Sub
    Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
        End
    End Sub
End Class


总结:

对于三层的理解还不是很透彻,还是需要多实践,理论明白了并不代表真正意义上的明白。


目录
相关文章
|
1月前
|
消息中间件 前端开发 小程序
一个基于.NET Core构建的简单、跨平台、模块化的商城系统
今天大姚给大家分享一个基于.NET Core构建的简单、跨平台、模块化、完全开源免费(MIT License)的商城系统:Module Shop。
|
1月前
|
小程序 C# 数据库
3个.NET开源、免费、强大的商城系统
今天大姚给大家分享3个.NET开源、免费、强大的商城系统,希望可以帮助到有商城系统开发需求的同学。
|
1月前
|
开发框架 Oracle 关系型数据库
ASP.NET实验室LIS系统源码 Oracle数据库
LIS是HIS的一个组成部分,通过与HIS的无缝连接可以共享HIS中的信息资源,使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。 
50 4
|
1月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
七天.NET 8操作SQLite入门到实战 - (1)第七天BootstrapBlazor UI组件库引入
|
1月前
|
开发框架 JSON JavaScript
ASP.NET Core3.1实战教程---基于Jquery单文件上传
ASP.NET Core3.1实战教程---基于Jquery单文件上传
47 0
|
1月前
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
|
13天前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
24 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
7天前
|
开发框架 前端开发 调度
C#基于Quartz.NET实现任务调度并部署Windows服务
C#基于Quartz.NET实现任务调度并部署Windows服务
|
24天前
|
SQL 设计模式 开发框架
.NET异步有多少种实现方式?(异步编程提高系统性能、改善用户体验)
想要知道.NET异步有多少种实现方式,首先我们要知道.NET提供的执行异步操作的三种模式,然后再去了解.NET异步实现的四种方式。
|
1月前
|
安全 API C#
C#.Net筑基-类型系统②常见类型--枚举Enum
枚举(enum)是C#中的一种值类型,用于创建一组命名的整数常量。它们基于整数类型(如int、byte等),默认为int。枚举成员可指定值,未指定则从0开始自动递增。默认值为0。枚举可以与整数类型互相转换,并可通过`[Flags]`特性表示位域,支持位操作,用于多选场景。`System.Enum`类提供了如`HasFlag`、`GetName`等方法进行枚举操作。