当前位置: 首页 > news >正文

设计模式-应用分层

一.什么是应用分层

        在没有应用分层的项目中: 

        此时对于前端的请求,不论是接收数据、处理数据、返回数据,都在堆积在一起的,这样的做法对于项目规模小的项目来说还能勉强应对,一但项目的规模变大,这样堆积在一起的做法,非常不利于项目的后期维护。

        在最开始的时候,为了让项目快速上线,我们通常是不考虑分层的. 但是随着业务越来越复杂,大量的代码混在⼀起,会出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动⼀处就牵⼀发而动全身等问题。

        类似公司的组织架构
                公司初创阶段, ⼀个人身兼数职,既做财务, 又做人事, 还有行政。随着公司的逐渐壮大, 会会把岗位进行细分,划分为财务部门, 人事部门, 行政部门等。 各个部门内部还会再进行细分。
                项目开发也是类似,最开始功能简单时,我们前后端放在⼀起开发,随着项目功能的复杂,我们分为前端和后端不同的团队,甚至更细粒度的团队。 后端开发也会根据功能再进行细分。MVC就是其中的⼀种拆分方式。 但是随着后端人员不再涉及前端,后端开发⼜有了新的分层方式。
        在阿里的开发手册中,关于工程结构部分,定义了常见工程的应用分层结构:

                应用分层是⼀种软件开发设计思想,它将应用程序分成N个层次,这N个层次分别负责各自的职责,多个层次之间协同提供完整的功能. 根据项目的复杂度,把项目分成三层,四层或者更多层。
                常见的MVC设计模式, 就是应用分层的⼀种具体体现。

二.如何分层

        

        MVC思想就是一个应用分层很好的体现:

        也就是将用户视图和业务处理分开,并且通过中间的Controller来连接。

        但是就目前的项目开发来说,现在的Web网站规模都非常的庞大,所以现在开发都采用前后端分离的方式开发,后端开发人员根本不关注网站的前端页面是如何实现的,后端开发人员只需要将前端所需要用到的数据返回给前端开发人员就好了。

        所以针对后端开发有了新的分层架构,把整体的架构分为:表现层、业务处理层、数据层。

        这种分层方式也叫做"三层架构"。

 

三.三层架构

        1.表现层:就是展示数据结果和接受用户指令的,是最靠近用户的一层;

        2.业务逻辑层:负责处理业务逻辑,里面有复杂业务的具体实现;

        3.数据层:负责存储和管理与应用程序相关的数据;

四.Spring中的三层架构

五. MVC和三层架构的区别和联系

        首先从概念上来讲,两者都是软件工程设计领域中的架构模式。

        MVC架构模式是又三部分组成,分别是:View(视图)、Controller(控制器)、Model(模型)。

        三层架构是将应用分为:Controller(表现层)、Service(业务处理层)、Dao(持久层)。

        MVC中,视图和控制器合起来对应三层架构中的表现层,模型对应三层架构中的业务逻辑层, 数据层,以及实体类。
        二者其实是从不同角度对软件工程进行了抽象。
        MVC模式强调数据和视图分离,将数据展示和数据处理分开,通过控制器对两者进行组合。
        三层架构强调不同维度数据处理的高内聚和低耦合,将交互界面,业务处理和数据库操作的逻辑分开。
        角度不同也就谈不上互相替代了,在日常的开发中可以经常看到两种共存的情况,比如我们设计模型层的时候往往也会拆分出业务逻辑层(Service层)和数据访问层(Dao层)。
        但是⼆者的目的是相同的, 都是"解耦,分层,代码复用"。 
http://www.lryc.cn/news/579977.html

相关文章:

  • 01背包P1048 [NOIP 2005 普及组] 采药
  • [netty5: ByteToMessageCodec MessageToByteEncoder ByteToMessageDecoder]-源码分析
  • CCViM Block(上下文聚类视觉曼巴模块),通过多方向扫描(水平 / 垂直 / 翻转)提取目标延展特征,结合聚类层对边界点的动态聚合,提升目标的定位能力
  • Python爬虫 模拟登录状态 requests版
  • Vue2中的keep-alive:组件状态缓存与性能优化实战指南
  • Linux 如何上传本地文件以及下载文件到本地命令总结
  • Linux探秘坊-------13.进程间通信
  • 五、Flutter动画
  • 【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
  • 【Git】git命令合集
  • 网安系列【4】之OWASP与OWASP Top 10:Web安全入门指南
  • Rust 闭包
  • 暴雨服务器成功中标华中科技大学集成电路学院服务器采购项目
  • 封装一个png的编码解码操作
  • 数据库位函数:原理、应用与性能优化
  • 企业该怎么做竞争分析?一文了解
  • Linux-进程概念(3)
  • 【WEB】Polar靶场 6-10题 详细笔记
  • 类图+案例+代码详解:软件设计模式----原型模式
  • vue3 el-table 行筛选 设置为单选
  • 电商分拣的“效率密码”:艾立泰轻量化托盘引领自动化流水线革新
  • vue3 获取选中的el-table行数据
  • 【WRFDA第三期】OBSPROC namelist 变量总结
  • Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
  • OpenCV中DPM(Deformable Part Model)目标检测类cv::dpm::DPMDetector
  • 前端基础知识Webpack系列 - 03(webpack中常见的Loader?解决了什么问题?)
  • STM32CubeMX教程1 实现点灯点灯
  • 量化开发(系列第3篇): C++在高性能量化交易中的核心应用与技术栈深度解析
  • 三态逻辑详解:单片机GPIO、计算机总线系统举例
  • 【python实用小脚本-128】基于 Python 的 Hacker News 爬虫工具:自动化抓取新闻数据