逗B少年搞程序11 结尾时间不够了,就不扯了

来源:互联网 发布:网络蚂蚁 知乎 编辑:程序博客网 时间:2024/04/29 02:26

        啊。。。最近机房好热啊,每天的节奏各种深似海啊,一般的步骤是这样的:一进机房,“我【哔——】,怎么这么热,又没人开空调,要报警了!”然后有人打开了空调,“我【哔——】,怎么还有窗户开着。”关上窗户。。。“我【哔——】,谁又出去不关门啊。”再去关上门,“我【哔——】,空调又被关上了。。。”

    哎,每天从外面进来就看到咱们屋开着空调又通风,真是一股淡淡的忧伤啊,不过昨天新下了规定,今天看起来还行啊,起码不会开门开空调了。

    最近状态真是鱼的不行,研究抽象工厂+反射登录的三层架构时间拖得太长了,战线一分散就会出事,然后VS2013童鞋心情不好还罢工了,一运行就出现无法启动程序,拒绝访问。



    大概就是这个样子吧,解决这玩意还用了好长时间,一直以为可能是权限啊,调试属性啊,配置啊什么的问题,结果网上好多人说这是因为某游戏设置了禁止调试的程序造成的。。。我靠,我大2002年的魔兽争霸3居然把十年后的Visual Studio给拒绝访问了?没错,我就是不相信是大魔兽禁的,果然,修复了一下之后又能开心的运行了,幸好没删掉。

    我在网上搜答案的时候看到也有咱们的人在csdn上发了帖子,不过也没看到有有用的回复,不知道解决了没有啊,有更好的方法也求各位大神告知一下,不然这遇到一次修复一次实在伤不起啊。

    好了,又是扯了一些没用的东西,这次主要是写代码来了,好不容易研究了一点玩意,凑个博客。

    上次就随便说了说三层的理论知识,都说实践是检验真理的唯一标准,我这实践了好几天,也该跟真理沾点边了,但是总有种越走越远的感觉。。。

    学抽象工厂的时候知道了一个App.config,在这里面可以定义一个字符串,然后用发射来读取字符串达到不修改内部代码就更换数据库的效果,我们虽然还用不上别的数据库,但是可以想象一下怎么改不是吗,所以我就这么写了

<?xml version="1.0" encoding="utf-8" ?><configuration>    <appSettings>    <add key="ConnStr" value ="Data Source=192.168.24.199;Initial Catalog=Student;User ID=sa;Pwd=123456"></add>    <add key ="DB" value="Sql"></add>  </appSettings>      <startup>        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />    </startup>   </configuration>

    原来我把连接语句也写到这里了啊,其实我倒是想着,写到这还不如写道代码里面安全呢,但是这里方便更改啊,换数据库什么的,简直喝汤一样。所以产生了个想法,要是真的写在这里的话,那我们是不是要搞一个加密呢?

    加密的事以后再说,今次先凑篇博客出来。

    然后呢,既然用了反射,那就要用抽象工厂模式了。整个例子好像没体现出来为什么要用工厂,因为,我们没换数据库,真的换一下的话会更明显。

    工厂代码

Imports System.ReflectionImports System.ConfigurationImports ChargeSystem.IDAL.SqlPublic Class DataAccess    Dim strDB As String = System.Configuration.ConfigurationSettings.AppSettings("DB")    Dim AssemblyName As String = "ChargeSystem.DAL."    Dim ClassName As String = "ChargeSystem.DAL." & strDB    Public Function CreateUser() As IDAL.Sql.IUser         CType(Assembly.Load(AssemblyName).CreateInstance(ClassName), IUser)    End FunctionEnd Class

    这里的工厂返回的接口是为了让D层直接继承,然后重写方法的。

    D层代码

Imports System.Data.SqlClientImports System.ConfigurationPublic Class SqlQueryUserInfo : Implements IDAL.Sql.IUser    Dim ConnStr As String = System.Configuration.ConfigurationSettings.AppSettings("ConnStr")    Dim conn As SqlConnection = New SqlConnection(ConnStr)    Public Function QueryUserInfo(user As Model.UserInfo) As Model.UserInfo Implements IDAL.Sql.IUser.QueryUserInfo        Dim strSQL As String = "select * from UserInfo where Username=@username"        Dim SQLcmd As SqlCommand = New SqlCommand(strSQL, conn)        Dim reader As SqlDataReader        Dim UserFromData As New Model.UserInfo        SQLcmd.Parameters.Add(New SqlParameter("@username", user.UserName))        Try            conn.Open()            reader = SQLcmd.ExecuteReader            reader.Read()            UserFromData.UserName = reader.Item("username")            UserFromData.PWD = reader.Item("password")            Return UserFromData        Catch ex As Exception            MsgBox(ex.Message.ToString())            Return user        End Try        conn.Close()    End FunctionEnd Class

    哇。。。看着好多啊,这里D层可以用一个SQLhelper什么的类进行读取等重复操作,目前还没有研究,下次再说吧~

    然后,D层的代码要在哪里用呢?当然是B层来调用了,B层中写好了一些逻辑判断,或是操作什么。简单来说就是B层写文档,D层编代码,恩这样的感觉吧。

    B层代码

Public Class JudgeUserInfo    Public Function IdentifyUser(ByVal user As Model.UserInfo) As Model.UserInfo        Dim Iuser As IDAL.Sql.IUser        Dim dataAccess As New DALFactory.DataAccess        Dim duser As Model.UserInfo        Iuser = dataAccess.CreateUser()        duser = Iuser.QueryUserInfo(user)        Return duser    End FunctionEnd Class

     最后就是U层了,U层是干嘛的,是把用户输入的信息传给系统的,这次是调用B层的方法,然后将返回的哪个实体的信息和用户输入的进行对比,至于验证之类的操作,可以放到外观层上去做,我这里就懒一点,不写那么多了。

    U层代码

Public Class frmLogin    Private Sub butLogin_Click(sender As Object, e As EventArgs) Handles butLogin.Click        Try            Dim user1 As New Model.UserInfo            Dim user2 As New Model.UserInfo            Dim JUI As New BLL.JudgeUserInfo            user1.UserName = txtUsername.Text.Trim()            user1.PWD = txtPWD.Text            user2 = JUI.IdentifyUser(user1)            If user2.UserName = user1.UserName And user2.PWD = user1.PWD Then                MsgBox("登陆成功!请稍后……")                Exit Sub            Else                MsgBox("该用户信息不存在,请重新输入!")                Exit Sub            End If        Catch ex As Exception            MessageBox.Show(ex.Message.ToString())        End Try    End SubEnd Class

    至于要引用的实体层我就不写了,就两个属性一个用户名,一个密码贴上来省的大家笑话。这没有注释确实是我的失误,做机房的时候一定注意。

    最后,天气炎热,大家回家注意安全,下周见。


0 0
原创粉丝点击