个人重构之一般用户实现
生活随笔
收集整理的这篇文章主要介绍了
个人重构之一般用户实现
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
开始个人重构的时间不短了,登录一条线就花了好长时间。七层现在可算是理清了。下面我先说一下一般用户功能的实现。 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 的新特性
- 下一篇: 大话日志分析与管理,答题赠书活动