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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

七层登录实现

發(fā)布時(shí)間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 七层登录实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

七層登錄實(shí)現(xiàn)


? ? ? ? ? 機(jī)房重構(gòu)剛開始的七層登錄,剛開始其中有很多的地方都不理解,后來通過查資料,看博客,問同學(xué)慢慢的明白一點(diǎn)了。

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

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

? ? ? ? ??抽象工廠加反射:主要是為了更換數(shù)據(jù)庫的方便性,同時(shí)把DAL層中的類轉(zhuǎn)換成為IDAL層中的接口,從而使BLL層實(shí)現(xiàn)通過調(diào)用IDAL從而調(diào)用DAL層。

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

? ? ? ? ??這樣,當(dāng)需要改動系統(tǒng)的時(shí)候,非常的方便,使用七層做到了大大的解耦和,當(dāng)有新的需求出現(xiàn)的時(shí)候或者在后期的系統(tǒng)維護(hù)時(shí),僅僅需要改動某一層就可以,或者具體到某一層中的某一個(gè)類就可以,而不至于牽一發(fā)而動全身,提高了系統(tǒng)的可擴(kuò)展性,可維護(hù)性和靈活性。




? ? ? ? ??UML中一共有四大關(guān)系,即關(guān)聯(lián)、依賴、泛化和實(shí)現(xiàn),這里用到了三種,即關(guān)聯(lián)、依賴和實(shí)現(xiàn)。

? ? ? ? ??七層從UI層開始,逐層依賴于下一層,除了SqlHelper和Factory之外的所有的層,都要添加對Entity層的引用,這里是關(guān)聯(lián)關(guān)系,因?yàn)樗械膶釉谑褂脤?shí)體層的時(shí)候,首先都先要對實(shí)體進(jìn)行實(shí)例化,即New一個(gè)實(shí)體,所以暫時(shí)理解為關(guān)聯(lián)關(guān)系(最普通的關(guān)聯(lián)關(guān)系,不是聚合也不是組合關(guān)系),而DAL層實(shí)現(xiàn)的是IDAL層中的方法,同時(shí)依賴于SqlHelper實(shí)現(xiàn)它自己的功能。

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

? ? ? ? ??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'實(shí)例化實(shí)體類'把用戶名和密碼放到實(shí)體中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)'用戶名和密碼驗(yàn)證的幾種情況Select Case ResultCase "此用戶不存在"MsgBox("此用戶不存在,請重新輸入用戶名!")txtUserID.Focus()txtUserID.SelectAll()Case "密碼錯(cuò)誤"MsgBox("密碼錯(cuò)誤,請重新輸入密碼!")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'調(diào)用B層的方法驗(yàn)證用戶名和密碼是否正確If Userbll.CheckUser(User) = False ThenReturn "此用戶不存在"ElseIf Userbll.CheckPWD(User) = False ThenReturn "密碼錯(cuò)誤"ElseReturn "登陸成功"End IfEnd IfEnd FunctionEnd Class</span></span>

? ? ? ? ??BLL層

<span style="font-size:24px;"><span style="font-size:24px;">Public Class LoginBLL'驗(yàn)證用戶名是否正確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'驗(yàn)證密碼是否正確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'連接數(shù)據(jù)庫時(shí)采用了抽象工廠加反射 '抽象工廠,負(fù)責(zé)數(shù)據(jù)庫的選擇和創(chuàng)建接口 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層用來將接口實(shí)例化 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"'實(shí)例化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"'實(shí)例化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>


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

? ? ? ? ??泛型返回的是整張數(shù)據(jù)表,比如查詢正在上機(jī)的所有學(xué)生等等,需要的是一個(gè)數(shù)據(jù)表中所有的數(shù)據(jù)時(shí),才使用泛型。


總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。