菜鸟眼中的三层架构[通俗易懂]

菜鸟眼中的三层架构[通俗易懂]菜鸟眼中的三层架构

大家好,又见面了,我是你们的朋友全栈君。

    最近在学三层,刚看到这个名字,就在想,三层是什么?它是用来干什么的?于是先上网查了一下,发现在信管中就接触过这块的东西,当时是客户服务器(C/S模式)中遇到的,我们现在所学的三层是从原来的两层演进而来的,传统的是两层结构:第一层是在客户机系统上结合了表现层与业务逻辑,第二层是通过网络结合了数据库服务器。后来经过演化,表现层与业务逻辑分离,于是就有了今天的表现层、业务层、数据层。

    这只是在学习之前的了解,个人认为三层架构和当时信管中的C/S模式有联系。那么专业的三层架构又是怎么一回事呢?首先来看导图:

菜鸟眼中的三层架构[通俗易懂]

什么是三层架构?

    为了达到“高内聚,低耦合”的程序设计思想,引入了三层架构,在表现层和业务层分离开来,再加上数据访问层,便形成了今天的三层架构。

为什么要使用三层?

    如果是一些业务逻辑简单,或者没有真正的数据存储曾的业务,可以不使用三层架构,但是对于业务复杂,数据要求有独立的存储介质的时候,就需要用到三层架构。

三层架构的好处?

    使用三层架构后,每一层都可以更改少量代码后就放在物理上不同的服务器上使用,结构灵活而且性能更好。此外,每层做些什么其它层是完全看不到的,因此更改、更新某层,都不需要重新编译或者改变全部的层。体现了程序设计时低耦合的思想,是一个非常强大的功能。

    例如:数据逻辑代码与业务逻辑层分离后,当数据库服务器更改时,只需要更改数据访问的代码,而与业务逻辑层无关,所以不需要改变或重新变异哦业务逻辑层。

三层具体划分

    在信管中我们所学的是物理上的三层,包括显示层、业务层、数据层,而我们今天看到的是逻辑上划分的三层,与物理的三层相对应的有UI、BLL+DAL、DB。下面我们就具体了解一下UI、BLL、DAL。

显示层(User Interface Layer):

    显示层就是用来采集用户输入的信息和操作,并向用户展现特定业务数据。在UI层中常用的技术有:Windows Form:Form、Control,ASP.NET:aspx、master、html等。

业务逻辑层(Business Logic Layer):

    该层负责从UI中获取用户指令和数据,执行业务逻辑,并通过DAL写入数据源,还可以从DAL中获取数据,将结果返回给UI。

如果不涉及到数据访问层时,消息是这样传递的:

                      菜鸟眼中的三层架构[通俗易懂]

如果三层协调工作,消息又是这样传递的:

                     菜鸟眼中的三层架构[通俗易懂]

数据访问层(Data Access Layer):

    用来从数据源加载数据,也就是查找数据,数据源包括数据库、XML文件、文本文件等;向数据源写入数据或删除数据。简单的总结一下就是数据库中的增删改查。

三层之间的引用关系

菜鸟眼中的三层架构[通俗易懂]

简单描述一下,

1.UI直接引用BLL,BLL直接引用DAL,DAL所在程序集不引用BLL和UI。

2.如果需要,UI间接引用DAL

3.如果需要增加实体类Model时,UI、BLL、DAL都需要引用Model。

物理层VS逻辑层

    在文章开始,我们先介绍了物理层,又讲到了逻辑层,它们之间有什么联系,又有什么区别呢?

    逻辑层是把层按类的集合来划分,而这些层都在同一台服务器上,我们现在将要重构的机房中的三层就都在自己的电脑上。而物理层是指类的集合在不同的服务器上,用附加的代码来处理层间的通信。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105770.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月24日 下午9:40
下一篇 2022年4月24日 下午10:00


相关推荐

  • vue组件注册可以是以下哪种方式_自定义vue组件分三个步骤

    vue组件注册可以是以下哪种方式_自定义vue组件分三个步骤组件的组织通常一个应用会以一棵嵌套的组件树的形式来组织:例如,你可能会有页头、侧边栏、内容区等组件,每个组件又包含了其它的像导航链接、博文之类的组件。为了能在模板中使用,这些组件必须先注册以便

    2022年7月29日
    11
  • 开源项目renren-fast解读(二)

    开源项目renren-fast解读(二)续上集 开源项目 renren fast 解读 让 java 不再难懂 一 3 安全防范模块 预防 xss 攻击和 sql 注入 XSS1 百度百科的解释 XSS 又叫 CSS CrossSiteScr 跨站脚本攻击 它指的是恶意攻击者往 Web 页面里插入恶意 html 代码 当用户浏览该页之时 嵌入其中 Web 里面的 html 代码会被执行 从而达到恶意用户的特殊目的 2 它与 SQL 注入攻

    2026年3月18日
    2
  • Java中的随机数「建议收藏」

    Java中的随机数「建议收藏」Java产生可以随机数的有两个类,一个是Random类,另一个是Math类中的random()方法。1.Random类在java.util包中有一个Random类,该对象的几个方法可以生成不同数据类型的随机数。如nextInt(),nextFloat(),nextLong(),nextBoolean()分别生成的是int整形,float浮点型,double浮点型,boolean布尔类型的随机数,也必须要用制定的数据类型的变量接收。例如:输出五个随机…

    2022年7月9日
    27
  • jmeter发送kafka数据key错误且无法生成时间戳解决方案「建议收藏」

    jmeter发送kafka数据key错误且无法生成时间戳解决方案「建议收藏」前言:最近在做kafka、mq、redis、fink、kudu等在中间件性能压测,压测kafka的时候遇到了一个问题,我用jmeter往kafka发消息没有时间戳,同样的数据我用python发送就有时间戳,且jmeter会自动生成错误的变量key,那我是怎么解决的呢,容我一一道来!一、jmeter怎么往kafka发送数据jmeter往kafka发送数据我之前有写过博客,大家可以参考下,遇到我前言说的问题就可以参考本篇文章二、jmeter生成错误key解决方案我们用了kafka插件后jmeter中引入

    2022年8月31日
    8
  • java websocket框架_websocket监听数据库

    java websocket框架_websocket监听数据库HandlerSocket简介HandlerSocket是针对Mysql的一个NoSQL插件,它作为一个守护进程工作在mysqld进程里面,接收tcp连接,并处理来自客户端的请求。HandlerSocket不支持SQL查询,作为替代,它支持表的简单的CRUD操作。由于下面的原因,在某些情况下HandlerSocket比mysqld/libmysql对儿更快速:-HandlerSocket处理数据…

    2022年8月24日
    7
  • C++对象数组「建议收藏」

    C++对象数组「建议收藏」C++对象数组一、对象数组1.C++对象数组的定义:类名数组名[元素个数]例:Studentstu[10];2.对象数组访问形式:数组名[下标].成员名;例:stu[i].print();3.对象数组的初始化:对象数组的初始化通常也是由构造函数来完成的例:关于对象数组的几点说明:  (1)在建立对象数组的时候需要调用构造函数。如果对象数组有100个元素,就需…

    2022年7月12日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号