最近一直在学习三层架构,前些天同样也写了一篇同样的博客,今天主要是通过一个登录的实例给大家讲解每部分的作用和相应代码的实现。
    先将实现三层架构的UML图给大家,帮助大家更好的理解三层。
             
1. UI作用
(1) 向用户展示特定业务数据
(2) 采集用户的输入信息和操作
Public Class frmLoginPrivate Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click'定义实例Dim en_User As New Entity.en_UserInfoDim bl_User As New BLL.bl_Login'赋值en_User.UserID = txtUserName.Text.Trimen_User.Password = txtPassword.Text.Trim'采集用户信息,展示登录结果If bl_User.LoginManager(en_User) ThenMsgBox("登陆成功")ElseMsgBox("登录失败")End IfEnd SubPrivate Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.ClickMe.Close()End Sub
End Class

2. BLL作用
(1) 从DAL获取数据,以供UI显示
(2) 从UI获取用户指令和数据,执行业务逻辑
(3) 从UI获取用户指令和数据,通过DAL写入数据
Imports Entity
Imports DAL.dal_LoginPublic Class bl_LoginPublic Function LoginManager(ByVal User As Entity.en_UserInfo) As BooleanDim dal_User As New DAL.dal_LoginDim en_User As New Entity.en_UserInfoen_User.UserID = User.UserID'调用D层的方法'en_User = dal_User.selectUser(en_User)en_User = dal_User.selectUser(User)'判断操作If en_User.UserID.Trim = User.UserID And en_User.Password.Trim = User.Password ThenReturn TrueElseReturn FalseEnd IfEnd Function
End Class

3. 实体(Entity)层
(1) 属于哪一层很难界定,比较倾向于业务逻辑层,也可以是数据访问层
(2) 目的:为了封装数据的,数据为了在三个层次之间流畅的流转
(3) 独立于其他三个层次的,不会引用任何的层次,其他三层都需要引用实体层
Imports EntityPublic Class en_UserInfo'声明UserID属性Private e_UserID As StringPublic Property UserID As StringGetReturn e_UserIDEnd GetSet(ByVal value As String)e_UserID = valueEnd SetEnd Property'声明Password属性Private e_Password As StringPublic Property Password As StringGetReturn e_PasswordEnd GetSet(ByVal value As String)e_Password = valueEnd SetEnd Property
End Class

4. DAL层
作用主要是与操作数据库
(1) 从数据源加载数据(select)
(2) 向数据源写入数据(insert/update)
(3) 从数据源删除数据(delete)

Imports Entity
Imports System.Data.SqlClient
Imports System.DataPublic Class dal_Login'连接数据库Dim strConn As String = "server =192.168.24.59;database=Login;uid=sa;pwd=123456"Dim sqlConnect As SqlConnection = New SqlConnection(strConn)'自定义检查参数Function selectUser(ByVal User As Entity.en_UserInfo) As Entity.en_UserInfoDim read As SqlDataReaderDim en_User As New Entity.en_UserInfo'其实下面的这段程序就相当于dim sql as string ="select  ID,UserName,PWD From Users Where UserName='"User.UserName"' And PWD='"User.PWD"'"'而写成这个程序块是为了防止Sql注入,即安全性考虑。'@UserName相当于传了一个参数,("@UserName", User.UserName)相当于给参数名字传递了参数。Dim sql As String = "Select UserID,Password From UserInfo Where UserID=@UserID And Password=@Password"Dim sqlCmd As SqlCommand = New SqlCommand(sql, sqlConnect) '创建sqlCommand对象    'Dim UserDataTable As New DataTable  '定义一个DataTable对象sqlCmd.CommandText = sql  '获取SQL语句的具体内容sqlCmd.CommandType = CommandType.Text  '获取上述SQL语句的具体类型,在此为SelectsqlCmd.Parameters.Add(New SqlParameter("@UserID", User.UserID))  '若用成eUser.UserName则会出现参数未传递的错误提示sqlCmd.Parameters.Add(New SqlParameter("@Password", User.Password))sqlConnect.Open()read = sqlCmd.ExecuteReader()       '执行查询语句,并生成一个DataReaderread.Read()'读取查询到的数据,并返回给相应的属性While read.Read() '获取数据库中相应字段的数据'数组必须从零开始读取,否则会超出其界限User.UserID = read.GetString(0)User.Password = read.GetString(1)End While'如果用户存在的话,将数据库表中检索的记录对应赋值给参数'User.UserID = read.Item("UserID")'User.Password = read.Item("Password")Return User '返回查询到的实体sqlConnect.Close()End FunctionEnd Class

转载于:https://www.cnblogs.com/snake-hand/archive/2013/06/15/3137687.html

亮剑.NET的系列文章之.NET实现三层架构(三)相关推荐

  1. 系列文章|OKR与敏捷(三):赋予团队自主权

    OKR与敏捷开发的原理有着相似之处,但已经使用敏捷的团队再用OKR感觉会显得多余.这种误解的根源就在于对这两种模式不够了解,运用得当的情况下,OKR和敏捷可以形成强强联合的效果,他们可以创造出以价值为 ...

  2. DM 源码阅读系列文章(二)整体架构介绍

    2019独角兽企业重金招聘Python工程师标准>>> 作者:张学程 本文为 DM 源码阅读系列文章的第二篇,第一篇文章 简单介绍了 DM 源码阅读的目的和规划,以及 DM 的源码结 ...

  3. 高可用系列文章之三 - NGINX 高可用实施方案

    前文链接 高可用系列文章之一 - 概述 - 东风微鸣技术博客 (ewhisper.cn) 高可用系列文章之二 - 传统分层架构技术方案 - 东风微鸣技术博客 (ewhisper.cn) 四 NGINX ...

  4. 数据结构学习系列文章合集

    数据结构学习系列文章目录 前言 1.稀疏数组和队列 稀疏数组和二位数组的转换 数组队列的实现 环形队列的介绍与实现 2.链表 单链表的增.删.改.查 总结 前言 学习数据结构记录,作为自己的笔记,同时 ...

  5. 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引

    [源码下载] 积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcd Flash 之 ActionScript 3.0  1.积少成 ...

  6. Scott的ASP.net MVC框架系列文章之四:处理表单数据(2)

    前几周我发表了一系列文章介绍我们正在研究的ASP.NET MVC框架.ASP.NET MVC框架为你提供了一种新的开发Web应用程序的途径,这种途径可以让应用程序变得更加层次清晰,而且更加有利于对代码 ...

  7. Enterprise Library系列文章回顾与总结

    Enterprise Library系列文章回顾与总结 自Enterprise Library 1.1 推出以来,Terry写了一系列的关于Enterprise Library的文章,其中得到了很多朋 ...

  8. 系列文章|OKR与敏捷(二):实现全栈敏捷

    OKR与敏捷开发的原理有着相似之处,但已经使用敏捷的团队再用OKR感觉会显得多余.这种误解的根源就在于对这两种模式不够了解,运用得当的情况下,OKR和敏捷可以形成强强联合的效果,他们可以创造出以价值为 ...

  9. C#网络编程系列文章索引

    1. 网络协议简介 介绍了网络分层: 网络层 数据链路层 网络层 传输层 应用层 2. HTTP协议详解 介绍应用层的HTTP协议,是Asp.net开发人员必须掌握的协议 HTTP请求 HTTP响应 ...

最新文章

  1. VS2015 MFC属性页孙鑫笔记
  2. JQuery中的基本筛选选择器
  3. [摘]全文检索引擎Solr系列—–全文检索基本原理
  4. vscode 编辑器快捷键
  5. python 角点检测_opencv python Shi-Tomasi角点检测
  6. IIS6.0 + openssl执行版 + Windows2003--配置篇
  7. 查询oracle 表记录数,Oracle 查询所有表的记录数
  8. ubuntu上matlab2014a修改成windows方式快捷键
  9. c++fabs函数_支持向量机(SVM)模型python复现 - SMO算法;核技巧;高斯核函数
  10. 忘记linux密码怎么办?
  11. JMeter使用教程(一)
  12. 我的Unity工具类---对象池
  13. mysql mysql.sock连接_【MySQL】mysql.sock文件作用
  14. Pyspark获取hdfs上多个文件
  15. vs2017 项目开发 解决方案下的多个项目
  16. 03 ,n 维向量,向量运算,向量组,向量组的线性组合,基,张成空间,向量组的线性相关性 :
  17. MCAL PWM Module详解
  18. wps提示系统缺失字体
  19. TransReID学习记录
  20. netty结合java_在SpringBoot中整合使用Netty框架的详细教程

热门文章

  1. php 长连接心跳_支持gRPC长链接,深度解读Nacos2.0架构设计及新模型
  2. android studio网上订餐软件_直播软件OBS的使用
  3. mysql5.0镜像_Mysql5.0学习笔记(一)
  4. 力扣(LeetCode)刷题,简单题(第21期)
  5. 深入理解 wpa_supplicant(二)
  6. html脚本语言居中,web前端:CSS--几种常用的水平垂直居中对齐方法
  7. python 爬取svg数据_python处理svg数据
  8. Open3d学习计划—高级篇 3(点云全局配准)
  9. segMatch:基于3D点云分割的回环检测
  10. 设置显示VSCode的修改历史Local History,方便多人开发的时候快速查看谁修改了代码(也可以防止误删代码文件)