三层——vb.net版

2024-08-26 23:18
文章标签 net 三层 vb

本文主要是介绍三层——vb.net版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

         经过不懈的努力,我的vb.net 版的三层登陆终于实现了。下面将我的成果向大家展示一下。

         原则

         vb.net的三层登陆跟C#的三层登陆的思想是一样的都是将系统分层——U层只负责与用户打交道,属于系统中的外交官;而D层只负责与数据库打交道,数据系统中的仓库管理员;而B层只负责进行逻辑运算,属于系统中的决策者。它们通过一个实体层来进行数据的传输。

         实体层

         首先我们说一下实体层,实体层就是定义一些个共有的变量,以便于各个层在传输数据时使用。
         
'定义一个共有的类,用于传递用户的基本信息
Public Class User'这里分别定义user的三个属性,Id、Name和PasswordPrivate User_ID As StringPrivate User_Name As StringPrivate User_Password As String'传入和传出用户的属性值Public Property Userid() As StringGetReturn User_IDEnd GetSet(ByVal value As String)User_ID = valueEnd SetEnd PropertyPublic Property UserName() As StringGetReturn User_NameEnd GetSet(ByVal value As String)User_Name = valueEnd SetEnd PropertyPublic Property UserPassword() As StringGetReturn User_PasswordEnd GetSet(value As String)User_Password = valueEnd SetEnd Property
End Class


          DAL层

         首先还是说D层,D层是被B层引用的,它主要负责与数据库打交道,系统想要实现的与数据库的交互都有D层来实现。没有D层的话,我们的整个系统就找不到我们的仓库所在,就像打仗没有了粮草一样。失去D层我们的系统就失去了与数据库的所有交互。
         下面我们来展示下我们D层的代码
         首先,是一个链接数据库的类,负责存储链接的字符串,其作用是记录数据库这个仓库的位置,有了它,系统才可以定位到相应的数据库
    '用于存放链接数据库的字符串Public Shared Function connstring() As Stringconnstring = "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 SqlCommandcomd = 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.SqlDataReadermrc = comd.ExecuteReaderDim SelectUser As Entity.UserSelectUser = 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 Whilecnn.Close()Return SelectUserEnd 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 LoginBLLPublic Function Usertest(ByVal user As Entity.User) As Entity.User'定义一个usertest,接受从U层和D层传过来的数据Dim TestUser As Entity.User'将D层的类实例化Dim Usedal As DAL.UserLoginDALUsedal = New DAL.UserLoginDALTestUser = New Entity.User'将从U层传来的数据传入D层,然后通过D层从数据库中取得相应的数据TestUser.Userid = user.UseridTestUser.UserName = user.UserNameTestUser.UserPassword = user.UserPasswordTestUser = Usedal.UserSelect(TestUser)'对从D层取出来的数据进行判断并将判断结果反馈给U层If TestUser Is Nothing ThenMsgBox("登陆失败")TestUser = NothingEnd IfReturn TestUserEnd 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.TextLoginUser.UserPassword = txtPassword.Text'进行逻辑判断LoginUser = useBll.Usertest(LoginUser)'根据判断的结果来给用户一个反馈,是否验证成功,本来应该传回一个true 或者是fals的值的,考虑到理解的困难程度,这里就不写成那样了If LoginUser Is Nothing ThenEndElseMsgBox("登陆成功!")End IfEnd Sub

         这里是我的vb.net 版的登陆三层的实现,下一个目标,向着七层进军、、、、


这篇关于三层——vb.net版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109963

相关文章

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

用VB创建开始菜单快捷方式(无需其他DLL)

Option Explicit   Private Sub Command1_Click()   CreateProgManGroup Me, "测试", "test.grp"   CreateProgManItem Me, "d:\ghost.exe", "Ghost"   CreateProgManItem Me, "d:\setupQQ.exe", "QQ"   End

.NET 自定义过滤器 - ActionFilterAttribute

这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误,并返回一个 BadRequest 响应。 代码片段: /// <summary>/// 验证 ModelState 是否有效/// </

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

VB项目中必需的几点技巧

1.    点击右上角的关闭按钮,要弹出“提示”,是否关闭,但用右键关闭时,不能重复提示 在vb中找到这个事件Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)If MsgBox("是否要退出", vbYesNo + vbDefaultButton2, "提示") = vbNo ThenCancel

.Net Mvc-导出PDF-思路方案

效果图: 导语:     在我们做项目的过程中,经常会遇到一些服务性的需求,感到特别困扰,明明实用的价值不高,但是还是得实现;     因此小客在这里整理一下自己导出PDF的一些思路,供大家参考。     网上有很多导出PDF运用到的插件,大家也可以看看其他插件的使用,学习学习; 提要:     这里我使用的是-iTextSharp,供大家参考参考,借鉴方案,完善思路,补充自己,一起学习

.net MVC 导出Word--思路详解

序言:          一般在项目的开发过程中,总会接收到一个个需求,其中将数据转换成Work来下载,是一个很常见的需求;          那么,我们改如何处理这种需求,并输出实现呢?          在做的过程中,去思考 1、第一步:首先确认,Work的存在位置,并创建字符输出路:             //在的项目中创建一个存储work的文件夹             string

asp.net 中GridView的使用方法

可以看看,学习学习 https://blog.csdn.net/zou15093087438/article/details/79637042