三层,你真的理解了吗?

  这篇博客,在草稿箱存了很久,直至今日才准备发表。为什么呢?刚开始写这个博客的时候是三层登录刚刚实现。代码是借鉴的网上大神的,只是实现了简单的登录功能。知道它有三个层,每层是干吗的,理解也仅仅局限于官方的解释。也就是下面的这些东东:

  UI(view):显示层,只负责显示和采集用户操作,不包含任何的业务相关的逻辑处理。

  BLL(Business Logic Layer):业务逻辑层,通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据源的时候直接交给DAL处理。处理完成后,返回必要数据给UI.

  DAL(Data Access Layer):数据访问层,只是提供基本的数据访问,不包含任何业务相关的逻辑处理。

  看见了之后,头都大了,说的不错,但是反应到代码里面到底是怎么个样子吗?不懂啊~~~所以这篇文章,直到今天,才得以重见天日。

  现在对它的理解稍稍好了那么一点,下面让大家看看他们之间的对话,看看哪个人说错了,拉出去枪毙!

  UI层说:要想登录就必须要验证用户,要么成功,要么失败!

UI层代码:

<span style="font-size:18px;">Public Class frmLogin

    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        Dim LUser As New Entity.User  '实例化LUser为实体层用户
        Dim BCheck As New BLL.BllLogin '定义BCheck为B层的登陆方法

        LUser.ID = txtUserID.Text
        LUser.Password = txtPwd.Text

        If BCheck.Check(LUser) = True Then
            MsgBox("登录成功!")
        Else
            MsgBox("登录失败!")

        End If

    End Sub

    Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
        End
    End Sub
End Class
</span>

    BLL层说:好的,我告诉你验证用户的方法,就是比较界面输入的用户名和密码跟数据库中提取出来的数据是否一致。

B层代码:

<span style="font-size:18px;">Public Class BllLogin
    Function Check(ByVal User As Entity.User) As Boolean
        Dim DaUser As New DAL.DalUserInfo '定义DaUser为D层的用户信息
        Dim BlUser As New Entity.User

        BlUser.ID = User.ID 'B层引用的D层的User.ID
        BlUser = DaUser.Check(BlUser) 'bll层对Dal层的判断方法
        '判断密码是否跟实体层的密码是否一致
        If BlUser.Password = User.Password Then
            Return True
        Else
            Return False
        End If
    End Function
End Class</span>

  DAL层说:你们跟我说,想要什么数据,我拿钥匙去数据库里面取。

DAL层代码:

<span style="font-size:18px;">Imports System.Data.SqlClient '命名空间

Public Class DalUserInfo
    '联接数据库,ConnStr用来初始化Connection对象 initial Catalog是要联接的数据库的名字
    Dim ConnStr As String = "Data Source=192.168.24.175;Initial Catalog=Login ;User ID=sa;Pwd=123456"
    Dim conn As SqlConnection = New SqlConnection(ConnStr) '创建联接对象

    Function Check(ByVal User As Entity.User) As Entity.User
        '数据库查询语句

        Dim sql As String = "select * from UserInfo where ID='" & User.ID & "'"
        Dim cmd As SqlCommand = New SqlCommand(Sql, conn)
        Dim read As SqlDataReader
        Try '先执行try里面的语句,如果出现错误,就马上跳入Catch中

            conn.Open() '打开联接
            read = cmd.ExecuteReader '返回类型为SqlDataReader,此方法用于查询操作
            read.Read()

            User.ID = read.Item("ID")
            User.Password = read.Item("Password")
            Return User
        Catch ex As Exception

            User.Password = ""
            Return User
        End Try
    End Function

End Class</span>

  Entity层说:UI层、DAL层、BLL层,没有我这传声筒,你们去哪找个具体的对象来练手~

Entity层代码:

<span style="font-size:18px;">
Public Class User
    Private userID As String '定义一个私有变量userID为字符串类型
    Private userPwd As String '定义一个私有变量userPwd为字符串类型

    Public Property ID() As String
        Get’读
            Return userID
        End Get
        Set(value As String)’写
            userID = value
        End Set
    End Property

    Public Property Password() As String
        Get
            Return userPwd
        End Get
        Set(value As String)
            userPwd = value
        End Set
    End Property

End Class
</span>

  总之我们的UI层主外,就像老板,负责揽活和交活。BLL层就是比较专业一些了,就像设计师,UI层从外面揽的活,他来做逻辑上的处理,进行出谋划策,提供建造图纸。DAL层就比较辛苦了,就像工人,听从组织安排,整天跟砖头水泥打交道,干活就行,啥操心的活都让BLL层处理去吧。

  这次的理解到不了炉火纯青的地步,但是似乎比刚开始的生搬硬套好了那么一些。现在发现自己还是一个胆小鬼,当初只要踏踏实实的把注释写好,把各个层的代码,代码和功能放到一起进行对比理解,搞懂代码和功能之间的对应关系,绝对是so easy!当初大部分时间还是花在不愿意动脑,纠结犹豫上面了。还有做事之前一定要考虑,执行一个番茄的目的,目标不明确,就不要怪自己在别的地方留恋太久了。

三层,你真的理解了吗?

时间: 2024-10-05 22:24:59

三层,你真的理解了吗?的相关文章

对于C#中的一些点滴你真的理解了吗?

废话不多说看题目,看看我们自己真的理解了吗? 1.如下代码输出的结果是什么? public class A{ public virtual void Func(int  number=10) { Console.WriteLine("Class A Func:"+number); } } public class B{ public virtual void Func(int  number=10) { Console.WriteLine("Class B Func:&quo

你真的理解大数据吗?

(大讲台——国内首个it在线自适应学习平台,轻量级的高薪就业和技能提升解决方案) 大数据很火,已然是一种大势所趋,是雷军口中的下一个吹起猪的风口,是刘强东哥伦比亚大学深造回来的第一个发展对象.大数据牵动着全国精英的心.然而,你真的理解什么是大数据吗? 就目前来看,对大数据进行解释的声音总体分为两种,一种是大数据数据量级要大,一般可达到pb级别,有了足量的数据之后,根据数据搭建起一个全方位多角度立体化的识别体系,比如说谣言这件事,以前数据量虽大,但处理技术欠佳,不能对谣言这类信息作出全方位立体化多

你真的理解函数式编程吗?

你真的理解函数式编程吗? 大数据以及人工智能越来越流程,你是否可以轻松适应大数据编程,函数式编程在其中起着重要作用,如何从面向对象编程跳槽到函数式编程?你是否觉得函数式各种概念难于理解?本场 Chat 将为你解答.我将为你分享亲身学习和理解关于函数式编程的经验: 高阶函数.闭包.匿名函数等 高阶函数和闭包是啥关系? 柯里化 函数式编程思维 适合人群: 如果你想转人工智能领域,请关注此 Chat 如果你想了解机器学习,请关注此 Chat 如果你正在学习一下机器学习,请购关注 Chat 实录提要:

领域模型,你真的理解的了吗?

领域模型,你真的理解的了吗? 背景 UML比较难学,主要是其本身很复杂并且涉及到大量的概念名词.领域模型就是其中之一,网络上搜索到关于领域模型的知识应该是有两种,一种是来源于最初的传统软件开发过程,一种来源于领域驱动设计(DDD),这两者很容易混淆.以下是我对领域模型这个概念的一些理解. 1. 领域模型是什么? 理论派观点: Domain Model是一个商业建模范畴概念,即使一个企业不开发软件,也具备其业务模型: 所有同行企业,其业务模型必定有非常大的共性和内在的规律性. 由行业内的各个企业的

三层架构的理解

三层架构的理解 表现层: v:html/css/jsp/struts2 c:servlet/struts2action m:javabean/bean(例如:UserService) 业务层: 持久层:jdbc/dbutils/hibernate/springdao/springorm 分层架构是逻辑上的,在物理部署上,三层结构部署在同一个物理机器上,但是随着网站业务的发展,必然需要对已经分层的模块分离部署,即三层结构分别部署在不同的服务器上,使网站拥有更多的计算资源以应对越来越多的用户访问.

我想这次我真的理解了 JavaScript 的单线程机制

今天面试的时候被问到一个问题,是关于 JS 异步的.当时我脑海中闪过了一个单线程的概念,但却没有把真正的原理阐述清楚.所以回来特意重新回顾了前面单线程和异步相关的一些知识点. 虽然之前学习的时候也接触了单线程模型相关的东西,但当时理解得并不是很清楚和明白.所以这道面试题也没有给出一语中的的答案.重新阅读阮一峰的 <JavaScript 运行机制详解>和我之前写的<setTimeout 异步与回调>之后.我决定重新写一篇博客来更加白话的总结 JS 的单线程机制和异步. 重演历史 -

【java基础】程序员你真的理解反射机制吗?

目录 前言 1.反射的概述 2.正式使用反射之前很有必要了解的Class类 3.反射的使用 前言 很多讲解反射的博客文章并没有详细讲解Class类,~当然包括之前的我也一样~,这样的文章只会让反射徒有其表,并不能让大多数初学者真正理解反射,而恰恰反射的原理就在于Class对象!可见他的重要性,这篇文章我将总结一下关于Class类的知识,可能还不是很全面,各位担待点哈QnQ,我之前也写过几篇关于反射的文章,主要是反射真的太重要了,现在重新总结一篇~主要是前面总结的太潦草了~,对反射重新认识顺道再结

你真的理解__block修饰符的原理么?

开篇自测 在本文的开头,提出两个简单的问题,如果你不能从根本上弄懂这两个问题,那么希望你阅读完本文后能有所收获. 为什么block中不能修改普通变量的值? __block的作用就是让变量的值在block中可以修改么? 如果有的读者认为,问题太简单了,而且你的答案是: 因为编译器会有警告,各种教程也都说了不能修改. 应该是的吧. 那么我也建议你,抽出宝贵的几分钟时间阅读完本文吧.在开始揭开__block的神秘面纱之前,很不幸的是我们需要重新思考一下block的本质和它的实现. block是什么?

你真的理解Java的按引用传递吗?

首先我们来看下面这段代码: public class Test1 { String a = "123"; public static void change(Test1 test) { test.a="abc"; } public static void main(String[] args) { Test1 test1=new Test1(); System.out.println(test1.a); change(test1); System.out.print