日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

七层登录实现

發布時間:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 七层登录实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

七層登錄實現


? ? ? ? ? 機房重構剛開始的七層登錄,剛開始其中有很多的地方都不理解,后來通過查資料,看博客,問同學慢慢的明白一點了。

? ? ? ? ??七層就是在三層的基礎之上,添加了外觀層——設計模式的外觀模式,抽象工廠加反射,接口層。

? ? ? ? ??外觀層:主要是把UI和BLL層分離。

? ? ? ? ??抽象工廠加反射:主要是為了更換數據庫的方便性,同時把DAL層中的類轉換成為IDAL層中的接口,從而使BLL層實現通過調用IDAL從而調用DAL層。

? ? ? ? ??接口層:把BLL和DAL分離。

? ? ? ? ??這樣,當需要改動系統的時候,非常的方便,使用七層做到了大大的解耦和,當有新的需求出現的時候或者在后期的系統維護時,僅僅需要改動某一層就可以,或者具體到某一層中的某一個類就可以,而不至于牽一發而動全身,提高了系統的可擴展性,可維護性和靈活性。




? ? ? ? ??UML中一共有四大關系,即關聯、依賴、泛化和實現,這里用到了三種,即關聯、依賴和實現。

? ? ? ? ??七層從UI層開始,逐層依賴于下一層,除了SqlHelper和Factory之外的所有的層,都要添加對Entity層的引用,這里是關聯關系,因為所有的層在使用實體層的時候,首先都先要對實體進行實例化,即New一個實體,所以暫時理解為關聯關系(最普通的關聯關系,不是聚合也不是組合關系),而DAL層實現的是IDAL層中的方法,同時依賴于SqlHelper實現它自己的功能。

? ? ? ? ??各層的具體代碼:

? ? ? ? ??UI層

<span style="font-size:24px;"><span style="font-size:24px;">Public Class FrmLoginPrivate Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click'判斷文本框是否為空If txtUserID.Text = "" ThenMessageBox.Show("請您輸入用戶名!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)txtUserID.Focus()Exit SubElseIf txtPWD.Text = "" ThenMessageBox.Show("請您輸入密碼!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)txtPWD.Focus()Exit SubEnd If'實例化實體類'把用戶名和密碼放到實體中Dim User As New Entity.T_UserEntityUser.UserID = txtUserID.Text.Trim()User.PWD = txtPWD.Text.Trim()Dim Result As StringDim facade As New Facade.LoginFacadeResult = facade.Login(User)'用戶名和密碼驗證的幾種情況Select Case ResultCase "此用戶不存在"MsgBox("此用戶不存在,請重新輸入用戶名!")txtUserID.Focus()txtUserID.SelectAll()Case "密碼錯誤"MsgBox("密碼錯誤,請重新輸入密碼!")txtPWD.Focus()txtPWD.SelectAll()Case "登陸成功"MsgBox("恭喜您,登錄成功!")NowUser = txtUserID.Text.Trim()FrmMain.Show()Me.Hide()End SelectEnd SubPrivate Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.ClickEndEnd SubEnd Class</span></span>

? ? ? ? ??Fa?ade層

<span style="font-size:24px;"><span style="font-size:24px;">Public Class LoginFacadePublic Function Login(ByVal User As Entity.T_UserEntity) As StringDim Userbll As New BLL.LoginBLL'調用B層的方法驗證用戶名和密碼是否正確If Userbll.CheckUser(User) = False ThenReturn "此用戶不存在"ElseIf Userbll.CheckPWD(User) = False ThenReturn "密碼錯誤"ElseReturn "登陸成功"End IfEnd IfEnd FunctionEnd Class</span></span>

? ? ? ? ??BLL層

<span style="font-size:24px;"><span style="font-size:24px;">Public Class LoginBLL'驗證用戶名是否正確Public Function CheckUser(ByVal user As Entity.T_UserEntity) As BooleanDim Iuser As IDAL.LoginIDALDim factory As New Factory.LoginFactoryIuser = factory.CreateUserDAO()Dim mylist As New List(Of Entity.T_UserEntity)mylist = Iuser.SelectUserID(user)If mylist.Count = 0 ThenReturn FalseElseReturn TrueEnd IfEnd Function'驗證密碼是否正確Public Function CheckPWD(ByVal password As Entity.T_UserEntity) As BooleanDim Iuser As IDAL.LoginIDALDim factory As New Factory.LoginFactoryIuser = factory.CreateUserDAODim mylist As New List(Of Entity.T_UserEntity)mylist = Iuser.SelectPWD(password)If mylist.Count = 0 ThenReturn FalseElseReturn TrueEnd IfEnd FunctionEnd Class</span></span>

? ? ? ? ??Factory層

<span style="font-size:24px;"><span style="font-size:24px;">Imports System.Reflection Imports System.Configuration'連接數據庫時采用了抽象工廠加反射 '抽象工廠,負責數據庫的選擇和創建接口 Public Class LoginFactoryDim DB As String = System.Configuration.ConfigurationSettings.AppSettings("DBss")Private Shared ReadOnly assemblyName = "DAL"Public Function CreateUserDAO() As IDAL.LoginIDAL'返回接口Dim className As String = assemblyName + "." + DB + "LoginDAL"Return CType(Assembly.Load(assemblyName).CreateInstance(className), IDAL.LoginIDAL)End Function End Class</span></span>

? ? ? ? ??IDAL層

<span style="font-size:24px;"><span style="font-size:24px;">'接口IDAL Public Interface LoginIDALFunction SelectUserID(ByVal User As Entity.T_UserEntity) As List(Of Entity.T_UserEntity)Function SelectPWD(ByVal User As Entity.T_UserEntity) As List(Of Entity.T_UserEntity) End Interface</span></span>

? ? ? ? ??DAL層

<span style="font-size:24px;"><span style="font-size:24px;">Imports System.Data Imports System.Data.SqlClient Imports Entity'D層用來將接口實例化 Public Class SqlServerLoginDAL : Implements IDAL.LoginIDALPublic Function SelectUserID(User As Entity.T_UserEntity) As List(Of Entity.T_UserEntity) Implements IDAL.LoginIDAL.SelectUserIDDim sqlParams As SqlParameter() = {New SqlParameter("@UserID", User.UserID)}Dim strSql As String = "select*from T_User where UserID=@UserID"'實例化SqlHelperDim helper As New SqlHelperDim table As New DataTableDim mylist As New List(Of Entity.T_UserEntity)table = helper.GetDataTable(strSql, CommandType.Text, sqlParams)mylist = ConvertHelper.ConvertList(Of Entity.T_UserEntity)(table)'返回泛型Return mylistEnd FunctionPublic Function SelectPWD(User As Entity.T_UserEntity) As List(Of Entity.T_UserEntity) Implements IDAL.LoginIDAL.SelectPWDDim sqlParams As SqlParameter() = {New SqlParameter("@UserID", User.UserID), New SqlParameter("@PWD", User.PWD)}Dim strSql As String = "select*from T_User where UserID=@UserID and PWD=@PWD"'實例化SqlHelperDim helper As New SqlHelperDim table As New DataTableDim mylist As New List(Of Entity.T_UserEntity)table = helper.GetDataTable(strSql, CommandType.Text, sqlParams)mylist = ConvertHelper.ConvertList(Of Entity.T_UserEntity)(table)'返回泛型Return mylistEnd Function End Class</span></span>

? ? ? ? ??Entity層

<span style="font-size:24px;"><span style="font-size:24px;">Public Class T_UserEntity'定義變量Private _UserID As StringPrivate _PWD As StringPrivate _Level As StringPrivate _UserName As StringPrivate _Head As StringPublic Property UserID As StringGetReturn _UserIDEnd GetSet(value As String)_UserID = valueEnd SetEnd PropertyPublic Property PWD As StringGetReturn _PWDEnd GetSet(value As String)_PWD = valueEnd SetEnd PropertyPublic Property Level As StringGetReturn _LevelEnd GetSet(value As String)_Level = valueEnd SetEnd PropertyPublic Property UserName As StringGetReturn _UserNameEnd GetSet(value As String)_UserName = valueEnd SetEnd PropertyPublic Property Head As StringGetReturn _HeadEnd GetSet(value As String)_Head = valueEnd SetEnd Property End Class</span></span>


? ? ? ? ??這里雖然使用了泛型,但是,并沒有任何的好的作用,就是完全沒有必要,直接定義一個Datatable返回一個table即可,使用并返回一個Boolean值也可以解決問題,因為用戶登錄僅僅需要判斷和驗證輸入的用戶名和密碼是否正確就行。

? ? ? ? ??泛型返回的是整張數據表,比如查詢正在上機的所有學生等等,需要的是一個數據表中所有的數據時,才使用泛型。


總結

以上是生活随笔為你收集整理的七层登录实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。