逗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
至于要引用的实体层我就不写了,就两个属性一个用户名,一个密码贴上来省的大家笑话。这没有注释确实是我的失误,做机房的时候一定注意。
最后,天气炎热,大家回家注意安全,下周见。
- 逗B少年搞程序11 结尾时间不够了,就不扯了
- 逗B少年搞程序14 时间越来越不够了哦
- 逗B少年搞程序总结篇(伪) 又这么做完了
- 逗B少年搞程序12 时间都浪费在无知上了
- 逗B少年搞程序00 软工减肥计划
- 逗B少年搞程序番外篇 U My Love
- 逗B少年搞程序番外篇 人山人海,我自独白
- 逗B少年搞程序01 写个文档这么水真的大丈夫?
- 逗B少年搞程序02 你叫接口是吧
- 逗B少年搞程序04 策略模式——这次要甩什么技能呢~
- 逗B少年搞程序04 装饰模式——又是一波非常规性总结
- 逗B少年搞程序06 原型模式——手动蜡烛
- 逗B少年搞程序⑨ 我今天没吃小苹果,感觉自己萌萌哒~
- 逗B少年搞程序10 如果你愿意一层一层一层的剥开我的心~
- 逗B少年搞程序13 屌丝的鸟语- -
- 回文字符串啊~---太搞了 少年 DXH
- 逗B少年搞程序03 简单工厂模式——模式来源于生活而高于生活
- 逗B少年搞程序05 代理模式——名字都是后来补的,幸好没人看
- C/C++求两个数的平均值
- 22、操作CSS之使用JavaScript
- 第十一章 使用数据处理函数
- 加载图标LoadIcon ,SetIcon
- OCP 1Z0 053 97
- 逗B少年搞程序11 结尾时间不够了,就不扯了
- 23、使用jQuery实现动画效果(原理:改变CSS)
- 反射(reflect)--获取字节码文件对象
- hdu1005(找规律题)
- 24、管理页面中的多个库
- No module named cobbler.cli
- 25、使用jQuery操作JavaScript(字符串操作 数组操作 )
- 26、使用jQuery操作jQuery对象
- 分享12款最佳的Bootstrap设计工具