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

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

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

    最近在学三层,刚看到这个名字,就在想,三层是什么?它是用来干什么的?于是先上网查了一下,发现在信管中就接触过这块的东西,当时是客户服务器(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逻辑层

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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • windows2003 dns 414错误「建议收藏」

    windows2003 dns 414错误「建议收藏」原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://rainbird.blog.51cto.com/211214/121697       因为原来在Linux下实现过域根dns.所以朋友也想做域名用自己的dns服务器的时候肯定是一马当先的帮着做了。操作系统这回用的是2003。用windows配置服务就一个字:“简单”。

  • 腾讯 OCR 情况

    腾讯 OCR 情况

  • zynq 挖矿_FPGA芯片矿机

    zynq 挖矿_FPGA芯片矿机比特币是一种虚拟货币,在过去几年里逐渐流行开来。由此,比特币的追随者通过采购或者“挖矿”比特币的形式,投入其部分资产来支持这种货币。挖矿是指使用计算机硬件为比特币网络执行数学计算的过程。提供服务的比特币矿工可以得到一笔报酬(目前是25比特币)以及任何内含的交易费用。由于网络报酬是按照所有矿工完成的计算量进行分配的,故挖矿的竞争异常激烈。比特币挖矿开始是在CPU和GPU这样的低成本硬件上运行的一个软…

  • XGBoost:参数解释

    XGBoost:参数解释XGBoost参数在运行XGboost之前,必须设置三种类型成熟:generalparameters,boosterparameters和taskparameters:Generalparameters:参数控制在提升(boosting)过程中使用哪种booster,常用的booster有树模型(tree)和线性模型(linearmodel)。Boosterparameters:这取

  • tcp/ip协议包含哪几层_ip协议提供的是一种什么服务

    tcp/ip协议包含哪几层_ip协议提供的是一种什么服务在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。1)ARP分层的位置是TCP/IP的网络层2)ARP报文是由以太网帧进行封装传输的。没有封装进IP包。3)实际上

  • python中将字符串转化为数字_python字符串转int

    python中将字符串转化为数字_python字符串转intpython把字符串转化成数字的方法发布时间:2020-08-0317:03:31来源:亿速云阅读:82作者:清晨这篇文章将为大家详细讲解有关python把字符串转化成数字的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python中的int函数只能把整数字符串转换转换成整数另外可用于取出float的整数部分可以用float进行转换测试用例:>&gt…

发表回复

您的电子邮箱地址不会被公开。

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