表现层(Presentation Layer)是软件架构中最上层的部分,主要负责处理用户界面和用户交互。它也被称为展现层或UI层,是用户与系统交互的接口。
表现层的主要职责包括:
在分层架构中,表现层通常依赖于业务逻辑层(或应用层)来获取数据和执行业务操作,对用户隐藏了系统内部的复杂性。
随着前后端分离以及后端微服务化的不断发展,传统的MVC已不适合现在的纯后端系统,Controller其实也是API,它代表了服务对外提供的接口,是一种合约
Model1模型
---
title: Model1模型
---
sequenceDiagram
客户端 ->> JSP: 请求
JSP ->> JavaBean: 请求
JavaBean ->> DAO: 数据库操作
DAO ->> JavaBean: 数据库操作
JavaBean ->> JSP: 返回
JSP ->> 客户端 : 返回
Model2模型
---
title: Model2模型
---
sequenceDiagram
participant 客户端
participant 控制器 as Controller(Filter/Servlet)
participant 模型 as Model(JavaBean)
participant 视图 as View(JSP)
客户端 ->> 控制器: 请求
控制器 ->> 模型: 请求
控制器 ->> 视图: 请求
视图 ->> 模型: 请求
模型 ->> 数据库: 请求
优势
弊端
页面控制器: 为特定页面或动作处理请求的对象。控制器通过绑定请求来实现与用户的交互。其从请求中提取参数,对输入进行处理,执行业务逻辑,选择适当的视图以呈现结果。
前端控制器: 处理所有请求的控制器,执行一些通用的行为,如身份验证和日志记录,并且这些行为可以在运行时动态修改
应用控制器: 一个处理程序流的集中控制点,负责协调页面控制器与前端控制器之间的交互,确保请求在应用中的流转符合预期
业务数据模型,Model层是高层策略,是技术无关逻辑的封装
当有用户的行为触发操作时,由控制器更新模型,并通知视图进行更新
主要是接收用户请求,并负责协调Model与View
stateDiagram-v2
View --> Presenter: User events
Presenter --> Model: Model update
Model --> Presenter: State changes
Presenter --> View: View update
MVVM是MVC模式的进一步演变,特别适用于现代前端开发,如Vue.js等框架。
graph TB
subgraph "Applications"
WebApp[Web APP]
MobileApp[Mobile APP]
DesktopApp[Desktop APP]
end
subgraph "Gateways"
WebGateway[Web APP Gateway]
MobileGateway[Mobile APP Gateway]
DesktopGateway[Desktop APP Gateway]
end
subgraph "Services"
AccountService[Account Service]
PaymentService[Payment Service]
SecurityService[Security Service]
WarehouseService[Warehouse Service]
end
WebApp -- REST --> WebGateway
MobileApp -- RMI --> MobileGateway
DesktopApp -- gRPC --> DesktopGateway
WebGateway --> AccountService
WebGateway --> PaymentService
MobileGateway --> PaymentService
MobileGateway --> SecurityService
DesktopGateway --> SecurityService
DesktopGateway --> WarehouseService
在传统的分层架构中,表现层是系统架构的最上层,通常与业务逻辑层、数据访问层和数据库层形成依赖关系:
graph TD
展现层[展现层]
业务逻辑层[业务逻辑层]
数据访问层[数据访问层]
数据库[(数据库)]
展现层 --> 业务逻辑层 --> 数据访问层 --> 数据库
在现代架构中,表现层与应用层、领域层和基础设施层形成更复杂的交互关系:
graph TD
展现层[展现层]
应用层[应用层]
领域层[领域层]
基础设施层[基础设施层]
展现层 --> 应用层 --> 领域层
领域层 --> 基础设施层
当系统有了一些不可见的逻辑时,就需要注意模型与视图分离。