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

应用分层简介

一、什么是应用分层

应用分层是一种软件开发设计思想,它将应用程序分为多个层次,每个层次各司其职,多个层次之间协同提供完整的功能,根据项目的复杂程度,将项目分为三层或者更多层。

常见的MCV设计模式,就是应用分层的一种具体体现。

二、为什么要分层

当项目过于复杂时,大量代码混杂在一起,会出现逻辑不清,各模块相互依赖,代码扩展性差,修改时很容易改一处而动全身等情况,所以引入程序分层是很有必要的。

三、如何分层(以三层架构为例)

MVC将整体分为了Model(模型),View(视图),Controller(控制器)三个层次,也就是将用户视图和业务处理隔离开,并且通过控制器连接起来,很好地实现了表现和逻辑的解耦合,是一种标准的软件分层架构。

目前更主流的开发方式是“前后端分离”的方式,后端开发师不必关注前端的实现,所以对于后端开发来说,又有了一种新的分层架构:将整体架构分为表现层、业务逻辑层、数据层。

1.表现层/控制层(Controller):展示数据结果和接受用户指令并返回响应,是最靠近用户的一层。

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

3.数据层/数据访问层(Dao):负责存储和管理与应用程序相关的数据。

MVC和三层架构的区别和联系:

关于二者关系,说法不一,但是从概念上来说,二者都是软件工程领域中的架构模式,MVC由三部分构成:模型(Model)、视图(View)、控制器(Controller),三层架构将业务应用分为表现层,业务逻辑层,数据访问层。

MVC中,视图和控制器合起来对应三层架构中的表现层,模型对应三层架构中的业务逻辑层,数据层以及实体类。

二者只是从不同角度对软件工程进行了抽象。

MVC强调视图和数据的分离,将数据展示和数据处理分开,通过控制器对二者进行结合。

三层架构强调不同维度数据处理的高内聚和低耦合,将交互页面、业务处理和数据库操作的逻辑分开。

但是二者的目的都是相同的:“解耦,分层,代码复用”。

四、应用分层的好处

1.降低层与层之间的依赖,结构更加的明确,利于各层逻辑的复用。

2.开发人员可以只关注整个结构的其中的某一层,降低了维护成本和维护时间。

3.可以较为容易的使用新的实现来替换原有层次的实现。

4.有利于标准化。

五、企业规范

1.类名使用大驼峰命名方式,但这些情况除外:DO/BO/DTO/AO

2.方法名、参数名、成员变量、局部变量统一使用小驼峰命名方式。

3.包名统一使用小写,点分隔符之间有且仅有一个自然语义的英文单词。

六、一些学习Web开发的注解

1.@RequestMapping:路由映射。

2.@RequestParam:后端参数重命名。

3.@RequestBody:接受JSON类型的参数。

4.@PathVariable:接收路径参数。

5.@ResponseBody:返回数据。

6.@CookieValue:从Cookie中获取值。

7.@SessionAttribute:从Session中获取数据。

8.@RequestHeader:从Header中获取数据。

9.@Controller:定义一个控制器,Spring框架启动时加载,把这个对象交给Spring管理,默认返回视图。

10.@RequestPart:上传文件。

11.@RestController:等于@ResponseBody+@Controller返回数据。

Cookie和Session区分:

Cookie和Session都是会话机制,Cookie是客户端机制,Session是服务端机制,二者通过SessionId来关联,SpringMVC中内置HttpServletRequest,HttpServletResponse两个对象,需要使用时,直接在方法中添加对应的参数即可,Cookie和Session可以从HttpServletRequest中来获取,也可以使用HttpServletResponse设置Http响应状态码。

http://www.dtcms.com/a/75569.html

相关文章:

  • 压缩Docker虚拟磁盘空间CMD命令
  • ssm框架之mybatis框架动态SQL
  • Modern C++处理 Hooks 机制
  • 解决Java多张图合成JPG时出现红色前景及多列自适应适配
  • 《基于Spring Boot+Vue的智慧养老系统的设计与实现》开题报告
  • CAN及CANFD协议
  • 第四届光学与机器视觉国际学术会议(ICOMV 2025)
  • RabbitMQ 和 Redis 的选择
  • ssm框架之mybatis框架搭建
  • 牛客周赛 Round 85(DE)
  • 蓝桥杯备赛(基础语法4)
  • Shell 脚本中的 `read` 命令:灵活处理用户输入
  • 20. Excel 自动化:Excel 对象模型
  • 【NeurIPS-2022】CodeFormer: 将人脸复原转化为码本预测以减少LQ-HQ映射的不确定性
  • 基于ssm学科竞赛小程序的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 使用Flux查询数据
  • (6)用于无GPS导航的Nooploop
  • [原创](Modern C++)现代C++的关键性概念: 灵活多变的绑定: std::bind
  • 化学工业领域 - 石油化工、高分子化工、生物化工极简理解
  • 软考 中级软件设计师 考点知识点笔记总结 day05
  • E1-数组的平衡点2(前缀和)
  • .[OnlyBuy@cyberfear.com].REVRAC勒索mysql恢复---惜分飞
  • 基于 ELK、Python、OLaMA 和飞书群的 AI 自动化巡检方案
  • 25. K 个一组翻转链表(C++)
  • 微服务面试题:远程调用
  • 注解与设计模式:解锁Java编程的魔法与艺术!
  • mac npm run dev报错 error:0308010C:digital envelope routines::unsupported
  • Redis基础:命令行操作实践指南
  • QML与C++交互
  • Flink读取Kafka数据写入IceBerg(HiveCatalog)