深入解析三层架构:构建稳定高效的软件系统

概述

顾名思义,三层架构分为三层,分别是“数据访问层”、“业务逻辑层”、“表示层”。

数据访问层:数据访问层在作业过程中访问数据系统中的文件, 实现对数据库中数据的读取保存操作

表示层:主要功能是 显示数据和接受传输用户的数据,可以在为网站的系统运行 提供交互式操作界面,表示层的应用方式比较常见,例如 Windows窗体和Web页面

业务逻辑层: 将用户的输入信息进行甄别处理,分别保存。 建立新的数据存储方式,在存储过程中对数据进行读取, 将“商业逻辑”描述代码进行包含

三层架构软件系统 为用户的数据传输、提取、储存创造了便利条件。在应用数据时,信息划分架构开发项目,对各层次之间的 工作职责进行清晰规划, 这样就降低了网站系统的维护风险

三层原理

3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。

所谓三层体系结构, 是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即把这三个层放置到一台机器上。

三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是 通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互

三层架构中主要功能与业务逻辑一般要在业务逻辑层进行信息处理和实现,其中三层体系架构中的客户端和数据库要预设中间层,成为组建层。三层架构中的三层具有一定的逻辑性,即是将三层设置到同一个计算机系统中,把业务协议、合法校验以及数据访问等程序归置到中间层进行信息处理,一般客户端无法和数据库进行数据传输,主要是利用COM/DCOM通讯和中间层构建衔接通道,实现中间层与数据库的数据传输,进而实现客户端与是数据库的交互。

结构

表示层

表示层又称表现层UI,位于三层构架的最上层,与用户直接接触,主要是B/S信息系统中的Web浏览页面。作为Web浏览页面,表示层的主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到BLL系统中进行数据处理,处理后会将处理结果反馈到表示层中。换句话说,表示层就是实现用户界面功能,将用户的需求传达和反馈,并用BLL或者是Models进行调试,保证用户体验。

业务逻辑层

业务逻辑层BLL的功能是对具体问题进行逻辑判断与执行操作,接收到表现层UI的用户指令后,会连接数据访问层DAL,访问层在三层构架中位于表示层与数据层中间位置,同时也是表示层与数据层的桥梁,实现三层之间的数据连接和指令传达,可以对接收数据进行逻辑处理,实现数据的修改、获取、删除等功能,并将处理结果反馈到表示层UI中,实现软件功能。

数据访问层

数据访问层DAL是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写DataAccessCommon,保证数据访问层DAL数据处理功能。

各层作用

1、 数据访问层:主要是对 非原始数据( 数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据库的操作,而不是数据,具体为业务逻辑层或表示层提供数据服务。

2、业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。

3、界面层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

规则

三层结构并不是普通的 DAL,BLL,WebUI三个模块,三层程序有一些需要约定遵守的规则:

1、最核心的模块规则,表现层只是外壳作用, 不能包含任何BizLogic的处理过程

2、各层次模块设计时应该从业务逻辑层出发,而不是开始于表现层.。 业务逻辑层在API上应该实现所有BizLogic,以面向对象的方式

3、不论数据层是一个简单的SqlHelper,还是带有Mapping的Classes, 应该保证其与抽象的系统层无关

4、 不管使用COM+(EnterpriseService), 还是Remoting,还是WebService之类的远程对象技术, 不管部署是否在服务器上,在起码在设计时必须要 考虑多台服务器通过 负载均衡作集群

综上,考虑一个项目是否符合 应用三层或多层设计时, 必须要考虑是否真正符合项目的需求

优缺点

优点

1、开发人员可以 只关注整个结构中的其中某一层

2、可以 很容易的用新的实现来替换原有层次的实现

3、可以 降低层与层之间的依赖

4、有利于标准化;

5、 利于各层逻辑的复用

6、 结构更加的明确

7、在后期维护的时候, 极大地降低了维护成本和维护时间

8、避免了表示层直接访问数据访问层,表示层只和业务逻辑层有联系, 提高了数据安全性

9、 有利于系统的分散开发,每一个层可以由不同的人员来开发, 只要遵循接口标准,利用相同的对象模型实体类就可以了,这样就可以大大提高系统的开发速度

10、 方便系统的移植,如果要把一个C/S的系统变成B/S系统,只要修改三层架构的表示层就可以了。业务逻辑层和数据访问层几乎不用修改就可以轻松的把系统移植到网络上。

11、 项目结构更清楚,分工更明确,有利于后期的维护和升级

缺点

1、 降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。

2、 有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。

3、 增加了开发成本

应用

(1)应用服务器。

服务器一般包括 有连接与无连接形式, 无连接在最底层要设置UDP/IP协议实现服务器通信功能,同时在实际使用的过程中, 由于客户机无法保证可靠的传输渠道,使得客户机向服务器提交请求时,很容易造成请求的丢失、延迟以及传递失序等传输问题,进而降低通信质量。UDP的可靠性很低,在实际运行中UDP 要依托于下层IP网络进行交付分组,无法引入检验程序,而IP网络还要由实际硬件网络或者是相关网关决定其工作质量。因此,从这一层面上看,下层网络的好坏直接关系到UDP工作。在进行开发有连接服务器的过程中, 要利用TCP/IP通信协议,利用互联网创建良好的通信环境,进而提高通信数据的真实性和可靠性。TCP/IP通信协议 可以对数据信息进行验证与校对,保证数据信息的完整性。同时在实际运行中, 可以通过数据的序列号排序保证数据信息的有序到达,防止出现信息重复分组的情况。另外,这种通信协议可以对流量进行有效控制, 确保发送信息速度在接收方的承受范围以内,通过INTERNET,实现服务器的面向连接

(2)应用客户端。

在三层构架系统中,客户端是使用者的主要功能体验区域,相比于服务器而言非常简单。一方面,在三层构架运行的过程中, 客户机软件要和各个服务器进行相互通信,不需要过于重视并发性处理。另一方面,一般客户机软件可以仿照常规程序进行指令执行,不需要进行外加保护,依托于操作系统进行强迫性保护。但与此同时对界面具有极高的要求,系统分析的过程中就要进行专门的界面设计,同时要和客户进行及时沟通, 掌握客户的实际需求,实现高效的信息反馈与交流沟通,进而保证信息系统软件界面设计的质量和效率。

(3)数据服务器。

在进行数据服务器选择的过程中, 要根据信息系统平台要求和用户期望要求,同时对应各个服务器的特点进行使用与选择。一般情况下出于对系统性能的考虑, 会选择SQLSERVER数据服务器,设计阶段中要通过Proactive等有效措施对系统数据库的实际使用性能进行不断地优化与完善。同时管理人员要和程序设计人员进行有效的沟通与协作, 明确信息系统软件的性能目标,设置性能期望值,构建系统资源组合体系,满足用户的实际需求。

(4)数据库和应用服务器的连接。

在基于三层构架的信息系统开发中,应用服务器要 利用SQL语言进行连接数据库服务器,其连接方法 包括DB-Library、DAO以及OLE等方式,其中DB-Library是最为常见的连接方式,作为SQLSERVER的重要接口层, 具有极强的访问信息效率和访问速度。这主要是 源于DB-Library的语言开发能力, 直接省去DAO以及OLE等连接方式中抽象层的调用,节省了信息访问时间。同时,三层构架适用于使用诸多开发语言的信息系统开发,不是.NET的专利,也不是专门用在数据库上的技术, 而是一种更加普适的架构设计理念,除了 数据、逻辑、界面等层次之外,在实际应用中 还会根据需要多出传递数据的层、接口层等等。在结合DB-Library数据库连接后, 设置NTWDBLIB.LIB组建,构建CDBConn实体类库体系,实现数据库与应用服务器的连接。因此,信息系统软件架构可 以为系统开发创造出良好的分布式计算环境,其中 逻辑层可以 实现多个机器的同时运行, 通过计算机网络计算能力, 强化系统各个功能板块的精准性和复用性, 进而有效减少了信息系统软件开发的时间和周期,保证信息系统的 安全性与拓展性,实现系统功能的最大化实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/843229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode刷题之HOT100之盛最多水的容器

狂风大作,降温了。下午提前把题目做了,上午做的最长回文子串还不是很能理解,慢慢理解吧,且看题 1、题目描述 2、逻辑分析 题目要求很清晰,我的思路就是暴力解法:枚举全部可能的情况(两数不相等…

【Qt QML】Dialog组件

带有标准按钮和标题的弹出对话框,用于与用户进行短期交互。 这个描述指的是一个常见的用户界面元素,即一个临时弹出的窗口(或对话框),它包含一个标题,显示对话框的用途或内容描述,以及一系列标…

[数据集][目标检测]航空发动机缺陷检测数据集VOC+YOLO格式291张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):291 标注数量(xml文件个数):291 标注数量(txt文件个数):291 标注类别…

Kyndryl 与 Nvidia 建立新的人工智能基础设施合作伙伴关系

Kyndryl与Nvidia宣布达成新的人工智能基础设施战略合作,共同推动AI技术的广泛应用。根据这一合作,Nvidia的先进AI软件解决方案将被引入Kyndryl的开放集成平台——Kyndryl Bridge,以优化基础设施工作负载,并为客户提供更高效的IT服…

AUS GLOBAL 与 UNICEF 联合国儿童基金会共同帮助叙利亚和土耳其地震受灾居民

2023年2月6日,土耳其东南部和叙利亚发生两次强烈地震和数十次余震,数以千计的儿童和家庭面临危机。 成千上万的房屋被毁,许多家庭被迫流离失所,而在一年中的这个时候,气温经常低于冰点,雪和冻雨很常见。许多学校、医院以及其他医疗和教育设施被地震破坏或摧毁,这对儿童造成了巨…

mongodb数据库备份到远程机器

一、背景 生产环境的mongodb数据库是直接购买阿里云的云数据库,但是在公司研发环境,我们是自己手动部署的。开发和测试的数据当然没有生产环境那么重要,但备份也是必要的,只不过容忍一定的数据丢失。 二、备份脚本 vi /etc/cro…

SpringCloud Alibaba Nacos分类配置--多方案配置隔离

文章目录 Nacos 分类配置(实现配置隔离)1.DataID 方案需求分析/图解配置实现测试 2.Group 方案需求分析/图解配置实现修改application.yml修改bootstrap.yml测试 3.Namespace 方案需求分析/图解配置实现修改application.yml修改bootstrap.yml测试 Namespace/Group/Data ID 关系…

MySQL连表查询练习

– 34. 查询所有员工的姓名和部门名称,没有部门的员工不需要展示 SELECTe.NAME 员工姓名,d.NAME 部门名称 FROMt_emp eINNER JOIN t_dept d ON e.dept_id d.id;– 35. 查询所有员工的姓名和部门名称,没有部门的员工展示BOSS SELECTe.NAME 员工姓名,i…

揭秘:如何使用Python统计女友生日还剩几天?

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:为何需要统计生日天数? 二、需求分析与准备 1. 用户输入格…

自适应星空背景个人导航单页(附带源码)

自适应星空背景个人导航单页 效果图部分源码领取源码下期更新预报 效果图 部分源码 function Star(id, x, y) {this.id id;this.x x;this.y y;this.r Math.floor(Math.random() * 2) 1;var alpha (Math.floor(Math.random() * 10) 1) / 10 / 2;this.color "rgba(…

shell脚本的基础应用

规范脚本的构成 #!/bin/bash # 注释信息 可执行的语句 执行脚本的方法 有1.添加x权限 ,绝对路经,或者相对路径2. 使用解释器 不需加x,root...bash...bash..echo 3,用source, 开机root ...bash ...echo bash -x /opt/test01.sh &#xff…

【算法】递归、搜索与回溯——汉诺塔

题解:汉诺塔(递归、搜索与回溯算法) 目录 1.题目2.题目背景(拓展了解)3.题解4.参考代码5.细节6.总结 1.题目 题目链接:LINK 2.题目背景(拓展了解) 汉诺塔问题是一个通过隐式使用递归栈来进行实现的一个经典问题,该问题最早的发明人是法国…

node_相关知识点

Node.js采用谷歌的V8引擎,是一个服务器端的、非阻断式I/O的、事件驱动的JavaScript运行环境,可优化应用程序的传输量和规模。传统服务器多线程(一个请求一个线程)易阻塞。 一、线程、进程: 进程:进程负责…

【从零开始学习RabbitMQ | 第二篇】如何确保MQ的可靠性和消费者可靠性

目录 前言: MQ可靠性: 数据持久化: Lazy Queue: 消费者可靠性: 消费者确认机制: 消费失败处理: MQ保证幂等性: 方法一: 总结: 前言: …

Debian12 安装留档@Virtual Box

在学蜜罐系统的时候,T-Pot 需要Debian,于是安装Debian12 下载安装光盘 先去中科大下载了12的安装光盘,然后在VirtualBox中创建一个新虚拟机,将安装光盘挂载上。 安装光盘下载地址:https://mirrors.ustc.edu.cn/debi…

【NumPy】全面解析NumPy的bitwise_and函数:高效按位与操作指南

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

抖音小程序如何生成二维码

1.页面结构 <image src{{imgUrl}}></image>2.代码结构 onLoad(options) {if (options.param) {var qrCode 13246897451257 //传入生成二维码的字符串this.generateQRCode(qrCode);}},//调起第三方库qrCodegenerateQRCode(text) {//调用了qrCode里面的apiconst api…

【静态分析】在springboot使用太阿(Tai-e)02

参考&#xff1a;使用太阿&#xff08;Tai-e&#xff09;进行静态代码安全分析&#xff08;spring-boot篇二&#xff09; - 先知社区 本文章使用的被分析代码为GitHub - JoyChou93/java-sec-code: Java web common vulnerabilities and security code which is base on springb…

本地部署 MiniCPM-Llama3-V 2.5

本地部署 MiniCPM-Llama3-V 2.5 0. 引言1. 性能评估2. 典型示例3. 本地部署4. 运行 WebUI Demo5. vLLM 部署 0. 引言 MiniCPM-Llama3-V 2.5 是 MiniCPM-V 系列的最新版本模型&#xff0c;基于 SigLip-400M 和 Llama3-8B-Instruct 构建&#xff0c;共 8B 参数量&#xff0c;相较…

Llama模型家族训练奖励模型Reward Model技术及代码实战(三) 使用 TRL 训练奖励模型

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…