个人重构之一般用户实现
生活随笔
收集整理的這篇文章主要介紹了
个人重构之一般用户实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
開始個人重構的時間不短了,登錄一條線就花了好長時間。七層現在可算是理清了。下面我先說一下一般用戶功能的實現。? ??? ?1、功能分析:
@登錄驗證
@查詢信息
@修改密碼
2、具體實現
我用到的是七層。一條線敲成了,才真正的明白七層的真正含義。
除了UI、BLL、DAL這三層之外又加上了Entity、Facade、IDAL、Factory+反射+配置文件。
Entity是實體層。可以說它是關系數據庫和對象之間架的一座橋梁。
Facade是外觀層。作為解耦UI層與BLL層,避免了它們之間的直接關聯。
IDAL是DAL的接口。BLL層直接與IDAL聯系,此時,如果DAL層有變動則不需要再改動BLL層。
Factory+反射+配置文件:作數據連接。把東西寫活了,在換數據庫的時候就省事多了。
其實加設計模式就是為了更好地解耦,提高工作效率。
3、代碼展示
【登錄】
先看D層:根據條件設置訪問數據庫。
<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">Public Class SqlserverLoginDAL : Implements IDAL.ILogin</span></strong><div style="text-align: left;"><strong style="background-color: rgb(255, 255, 255); text-align: center;"><span style="line-height: 26px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="line-height: 21px;"></span></span></span></strong></div><strong><span style="font-family:KaiTi_GB2312;font-size:18px;"> Public Function LoginDAL(user As LoginEntity) As List(Of LoginEntity) Implements IDAL.ILogin.LoginDAL'傳遞參數,將自己需要查詢的內容傳入Dim sqlparams As SqlParameter() = {New SqlParameter("@UserID", user.UserID),New SqlParameter("@Password", user.Password)}'查詢數據庫,找到需要的信息Dim cmdText As String = "select * from T_User where UserID=@UserID and Password=@Password"'定義并實例化sqlHelperDim helper As New SqlHelper'定義并實例化類型' Dim cmdType As CommandType = New CommandType()'定義一個臨時表Dim table As DataTable'調用sqlHelper中的查詢方法,將查詢的信息存入到臨時表中table = helper.ExecSelect(cmdText, CommandType.Text, sqlparams)'定義一個泛型集合Dim myList As New List(Of LoginEntity)'將查詢到的結果轉換為泛型集合myList = sqlDataTable.DataToList.converToList(Of LoginEntity)(table)Return myListEnd FunctionEnd Class</span></strong> 2、IDAL:提供D層接口。直接與BLL聯系。 <strong><span style="font-family:KaiTi_GB2312;">Imports Entity Public Interface ILoginFunction LoginDAL(ByVal euser As LoginEntity) As List(Of LoginEntity) '用戶登錄 End Interface</span></strong>3、BLL:進行業務的處理 <span style="font-family:KaiTi_GB2312;">'判斷用戶是否存在Public Function IsExit(ByVal euser As Entity.LoginEntity) As List(Of Entity.LoginEntity)'實例化()Dim factory As New DataAccessDim iLogin As ILoginDim myList As New List(Of Entity.LoginEntity)'工廠創建接口, DAL實現接口, BLL調用工廠iLogin = factory.CreatUserInfo()myList = iLogin.LoginDAL(euser)Return myListEnd Function</span>4、Facade層:解耦UI層和BLL層 '用戶登錄獲取記錄Public Function FLogin(ByVal user As Entity.LoginEntity) As Entity.LoginEntityDim UserBLL As New BLL.LoginBLLDim mylist As New List(Of Entity.LoginEntity)mylist = UserBLL.IsExit(user)user.Level = mylist(0).LevelReturn userEnd Function5、UI層:具體的窗體設置等。 Public Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click'判斷用戶名是否為空If Trim(txtUserName.Text) = "" Then '如果為空MessageBox.Show("請輸入用戶名!")Exit SubEnd If'判斷密碼是否為空If Trim(txtPassword.Text) = "" ThenMessageBox.Show("請輸入密碼!")Exit SubEnd IfDim login As New Entity.LoginEntityDim falogin As New Facade.FA_Loginlogin.UserID = txtUserName.Textlogin.Password = txtPassword.TextDim strResult = falogin.CheckUser(login)Select Case strResultCase "密碼錯誤"MsgBox("輸入有誤,請重新輸入")txtPassword.Text = ""Case "用戶不存在"MsgBox("用戶名或密碼錯誤,請重新輸入")txtPassword.Text = ""txtUserName.Text = ""Case "密碼正確"MsgBox("登錄成功")Dim worklog As New Entity.WorkLogEntityworklog.LoginDateTime = Date.Now.ToString("yyyy-mm-dd hh:mm:ss")worklog.Status = "正在值班"worklog.UserID = txtUserName.Text'worklog.Computer = System.Net.Dns.GetHashCode().ToString()worklog.Computer = "FKG-PC"Entity.WorkLogEntity.Login_DateTime = worklog.LoginDateTimefrmmain.Show()Me.Hide() <span style="white-space:pre"> </span>End Select End SubPrivate Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click <span style="white-space:pre"> </span>End End Sub End Class
6、Entity層:定義字段屬性及其返回值等。 Public Class LoginEntityPrivate _userID As StringPrivate _Password As StringPrivate _Level As StringPrivate _userName As StringPublic Shared Property UserLevel As StringPublic Property UserID() As StringGetReturn _userIDEnd GetSet(value As String)_userID = valueEnd SetEnd PropertyPublic Property Password() As StringGetReturn _PasswordEnd GetSet(value As String)_Password = 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 PropertyEnd Class 7、最后就是對工廠加反射加配置文件的設置了。這個其實很簡單,在APP.config里面設置一下就OK啦。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
? ? <startup>
? ? ? ? <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
? ? </startup>
? ? <appSettings >
<add key ="DB" value ="Sqlserver"/>
<add key ="ConnString" value ="Server=.;Database=recharge_sys;UID=sa;PWD=***"/>
</appSettings>
</configuration>
其實登錄并不難,一條線敲通了,后面的就好了。還有一個功能就是對于信息的查詢,這個比較簡單,我就不詳細說了。下面總結一下在這個過程中自己遇到的一些問題。
問題一:
解決方法:這個是在我剛開始建項目的時候,因為不小心建錯了解決方案,剛一開始的時候就是把它放那里不管了,后來覺得沒有用的就刪了得了,結果這一刪壞事了。自從刪了之后就開始報上面的錯了,于是我就各種方法各種試,先是重新添加了一遍引用,之后又是重新生成解決方案,保存。。。這樣,之后就不報錯了。
問題二:未將對象引用至對象實例
這個問題,幾乎在我敲每一個窗體的時候都會遇到它,我很是無語。總結一下出現這種狀況的一些原因。 1.D層連接數據庫的地方寫錯了。 2.數據類型不一致時 3.重復定義造成未將對象引用設置到對象的實例錯誤. ...未完待續...
總結:機房重構遲遲不想開始,其實就是害怕自己敲不出來了,但是不敲就永遠都不明白,既然身在其中,你就要做你該做的事,付出總是會有回報的。fighting
轉載于:https://www.cnblogs.com/fengkungui/p/6040203.html
總結
以上是生活随笔為你收集整理的个人重构之一般用户实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Laravel 5.0 的新特性
- 下一篇: Android 动态刷新listview