首页 > 亮剑.NET的系列文章之.NET实现三层架构(三)

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

    最近一直在学习三层架构,前些天同样也写了一篇同样的博客,今天主要是通过一个登录的实例给大家讲解每部分的作用和相应代码的实现。
    先将实现三层架构的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

更多相关:

  •  经常看见MOP上有人贴那种动态的图片,就是把一个字符串作为参数传给一个动态网页,就会生成一个带有这个字符串的图片,这个叫做文字水印。像什么原来的熊猫系列,还有后来的大树和金条,都挺有意思。这东西看着挺好玩的,想做个玩玩。查了查资料,发现用.net来做这个是很容易的,就用Asp.net写了一个非常简单的。全部的代码如下: <%@...

  • 那天去了达内,试听了2个小时的课,刚好讲的他们的当当网项目,讲hibernate表关系映射这段来了,不过也够呛,投影仪看的眼睛点都不舒服,当时讲的也没认真听,听了个大概,就记住那个老师一句话了,说是有经验的人用的,一般人不告诉,就是说这个join fetch 用法,回来查了一下,用起来比较爽,今晚突然来了兴致,小记一下。 join f...

  •           这两天在和斌做后台中的报表,暂定使用水晶报表,目前还只是处于对水晶报表的初级应用阶段,也就是知道如何 汇个总、写个函数、传个参数。           问题总是层出不穷,在最后整合报表,进行报表显示测试的时候,发现每次更新数据显示(除第一次)时都会蹦出一个“登录数据库的信息提示界面”很是苦闷,并且这肯�...

  •  1 2 3   4    Y 5    c:adFile 6    

  • 本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...

  • 我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...

  • 作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...

  • 这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...

  • 这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...

  • 一、mybatis  环境搭建步骤  第一步:创建 maven 工程第二步:导入坐标第三步:编写必要代码(实体类和持久层接口)第四步:编写 SqlMapConfig.xml第五步:编写映射配置文件第六步:编写测试类 二、编写sqlMapConfig.xml

  • struts 2 结合json 在struts 2中,要结合json的话,其实是不错的选择,最近做一个登陆系统时,可以考虑选择用 struts 2结合json,下面是要点 register页面    

    Drupal6中的表单如果不让修改

    2019独角兽企业重金招聘Python工程师标准>>> 做好的表单,怎么不让用户进行修改。 $form['user'] = array(    '#type'=> 'textfield',    '#title' => '姓名(*)',      '#default_value' => $feedbacks["u...

  • 在asp.net中的数据绑定中,我们经常会用到Eval,不过大家都知道Eval绑定是通过反射来实现的, 而反射势必会对性能造成一定的影响。不过有两种替代的方式来实现绑定数据,对性能略有提高。 1 当数据源为DataTable时,用下面的方式: 后台代码 protected void Page_Load(object sender,...