三层——vb.net版
程序员文章站
2022-10-25 15:02:39
经过不懈的努力,我的vb.net 版的三层登陆终于实现了。下面将我的成果向大家展示一下。
原则
vb.net的三层登陆跟c#的三层登陆的思想是一样的都是将分层—&m...
经过不懈的努力,我的vb.net 版的三层登陆终于实现了。下面将我的成果向大家展示一下。
原则
vb.net的三层登陆跟c#的三层登陆的思想是一样的都是将分层——u层只负责与用户打交道,属于系统中的外交官;而d层只负责与打交道,数据系统中的仓库管理员;而b层只负责进行逻辑运算,属于系统中的决策者。它们通过一个实体层来进行数据的传输。实体层
首先我们说一下实体层,实体层就是定义一些个共有的变量,以便于各个层在传输数据时使用。'定义一个共有的类,用于传递用户的基本信息 public class user '这里分别定义user的三个属性,id、name和password private user_id as string private user_name as string private user_password as string '传入和传出用户的属性值 public property userid() as string get return user_id end get set(byval value as string) user_id = value end set end property public property username() as string get return user_name end get set(byval value as string) user_name = value end set end property public property userpassword() as string get return user_password end get set(value as string) user_password = value end set end property end class
dal层
首先还是说d层,d层是被b层引用的,它主要负责与数据库打交道,系统想要实现的与数据库的交互都有d层来实现。没有d层的话,我们的整个系统就找不到我们的仓库所在,就像打仗没有了粮草一样。失去d层我们的系统就失去了与数据库的所有交互。下面我们来展示下我们d层的代码: 首先,是一个链接数据库的类,负责存储链接的字符串,其作用是记录数据库这个仓库的位置,有了它,系统才可以定位到相应的数据库
'用于存放链接数据库的字符串 public shared function connstring() as string connstring = server=你数据库的名称;database=login;uid=sa;pwd=你数据库的密码 end function在知道了数据库这个大仓库的位置后,我们对仓库要进行什么操作呢?比如说,我们可能是要看看仓库中都有什么,进行一下查询,也有可能是把仓库中的某条数据复制出来,还有可能是将仓库中的某条数据删除掉。这些都是有可能的。那么我们怎么样才能明确的把我们的命令传到仓库,并且得到我们想要的东西呢? 下面的 userlogin将告诉我们答案:
'引用有关于数据库连接的dll imports system.data.sqlclient imports system.data public class userlogindal '用一个函数调用user将得到的数据传入数据库中,通过数据取出相应的数据 function userselect(byval user as entity.user) as entity.user '定义一个链接数据库的对象 dim cnn as sqlconnection '定义一个输入命令的对象 dim comd as sqlcommand comd = new sqlcommand '将数据库的链接路径赋值给数据链接对象 cnn = new sqlconnection(dal.dbconnstring.connstring()) '为comd绑定链接数据库的路径 comd.connection = cnn '将实体中的数据传入命令对象,用于取得相应的数据 comd.commandtext = select * from users where password= 'a' comd.parameters.add(new sqlparameter(@username, user.username)) comd.parameters.add(new sqlparameter(@userpassword, user.userpassword)) '选择命令输入类型,这里选择的是输入文本格式的数据 comd.commandtype = commandtype.text '打开数据库 cnn.open() dim mrc as sqlclient.sqldatareader mrc = comd.executereader dim selectuser as entity.user selectuser = new entity.user '将取出的临时表中的数据赋值给selectuser对象,这个赋值本来应该由b层来完成,这里为了便于理解就放在这里了 while (mrc.read()) selectuser.userid = mrc.getstring(mrc.getordinal(id)) selectuser.username = mrc.getstring(mrc.getordinal(username)) selectuser.userpassword = mrc.getstring(mrc.getordinal(password)) end while cnn.close() return selectuser end function end class
bll层
说完了我们的仓库管理员以后,我们来说下我们的逻辑中枢——b层吧。b层负责的事情其实很少,就是逻辑判断。类似于裁判员。这个数据对不对,合不合法都由b层来进行判断。比如说,用户输入一个数据:我是老王,我要从数据库中删除一条数据。这时,u层将数据传给b层,那么,我们的b层就要开始判断了: 首先,老王是谁?他是我们的合法用户么?他拥有删除该条数据的权限吗?b层的判断肯定不能是没理由的胡乱判断的,它要先跟d层说;“把老王的数据给我拿过来,他的用户名是老王,密码是*******”然后d曾通过查询将老王的数据反馈给d层(这里的反馈就是通过实体层定义的类来进行的)。d层的反馈可能是这样的:老王,男,25岁,有删除数据库记录的权限、、、、那么,b层就会对d层传输一个删除老王想要删除的数据的命令,然后d层得到命令后执行相应的操作。于是用户的操作就实现了。然后,b层在给u层一个反馈:删除已成功,请告诉老王该操作以执行。 也有可能是d层告诉b层:老王,查无此人!那么b曾就要告诉u层:通知该用户,操作失败,因为数据库里没有老王这个人。 我们这里的b层得判断比较少,所以比较容易实现。下面为大家展示一下:public class loginbll public function usertest(byval user as entity.user) as entity.user '定义一个usertest,接受从u层和d层传过来的数据 dim testuser as entity.user '将d层的类实例化 dim usedal as dal.userlogindal usedal = new dal.userlogindal testuser = new entity.user '将从u层传来的数据传入d层,然后通过d层从数据库中取得相应的数据 testuser.userid = user.userid testuser.username = user.username testuser.userpassword = user.userpassword testuser = usedal.userselect(testuser) '对从d层取出来的数据进行判断并将判断结果反馈给u层 if testuser is nothing then msgbox(登陆失败) testuser = nothing end if return testuser end function end class
u层
u层是直接给用户打交道的,它是系统中的外交官,如果它不能正确的表达系统的意思,那么用户就不会使用我们的系统,或者说在使用的时候就会感觉很累。下面通过一张图来向大家展示:上图是一个登陆界面,在鼠标放在退出和登陆按钮上的时候,会弹出一些改操作的功能介绍。整体看起来简洁明了。这就是一个不错的ui设计。 上图虽然也能实现登陆的功能,可是,界面混乱,没有相应的提示,用户就不知道你这个系统是干什么的。这是一个有待提高的ui界面。 下面展示下我们的登陆的ui界面的部分代码:
private sub btnlogin_click(sender as object, e as eventargs) handles btnlogin.click '定义一个loginuser用于存储用户输入的信息 dim loginuser as new entity.user '调用bll层的类进行逻辑判断,这里将b层的类先实例化一下,不然没法应用 dim usebll as new bll.loginbll '将用户输入的数据存入loginuser中 loginuser.username = txtusername.text loginuser.userpassword = txtpassword.text '进行逻辑判断 loginuser = usebll.usertest(loginuser) '根据判断的结果来给用户一个反馈,是否验证成功,本来应该传回一个true 或者是fals的值的,考虑到理解的困难程度,这里就不写成那样了 if loginuser is nothing then end else msgbox(登陆成功!) end if end sub
这里是我的vb.net 版的登陆三层的实现,下一个目标,向着七层进军、、、、
上一篇: 分销商城推广难?都来这里看看
推荐阅读
-
Autodesk Navisworks Simulate 2019中文破解版安装注册激活详细图文教程
-
国内双非大学排名出炉2021:中国双非大学实力榜名单(校友会版)
-
iPhone6可以使用小米手环啦 小米手环iOS版下载
-
Marvelous Designer 7.5 Enterprise中文破解版安装激活图文详细教程(附下载)
-
2021双非大学200强排行榜名单(校友会版)-2021全国双非大学名单排名汇总
-
iPhone终于能用小米手环了 小米手环ios版下载地址
-
FME Desktop/Server 2017 AMPED破解版安装教程(附破解文件)
-
菠萝视频电脑版怎么用 菠萝视频PC端使用教程
-
teamviewer试用版到期后怎么还原回免费版?
-
大转盘抽奖小程序版 转盘抽奖网页版