分层架构

graph TD    subgraph "传统结构"        展现层1[展现层]        业务逻辑层[业务逻辑层]        数据访问层[数据访问层]        数据库[(数据库)]        展现层1 --> 业务逻辑层 --> 数据访问层 --> 数据库    end    subgraph "现代结构"        展现层2[展现层]        应用层[应用层]        领域层[领域层]        基础设施层[基础设施层]                展现层2 --> 应用层 --> 领域层        领域层 --> 基础设施层        基础设施层 --> 数据访问[数据访问]        基础设施层 --> Config[Config]        基础设施层 --> Common[Common]                数据访问 --> DB[DB]        数据访问 --> HSF[HSF]        数据访问 --> Search[Search]                Config --> Spring[Spring]        Config --> Diamond[Diamond]                Common --> Notify[Notify]        Common --> MetaQ[MetaQ]    end

软件架构设计分层模型和构图思考

将系统按照职责拆分和组织,上层依赖于下层定义的各种服务,下层对上层隐藏下下层的细节,最核心的一点就是需要保证各层之间的差异足够清晰,边界足够明显

层次并不能封装所有东西,有时会带来级联修改,过多的层次也会影响性能

为何分层

关注点分离(降低复杂度)

隔离变化/错误

stateDiagram-v2  state 数据接入层 {    外部预警1 --> [*]    外部预警2 --> [*]    外部预警3 --> [*]  }  数据接入层 --> 落库业务层
classDiagram  class 地址查询策略  地址查询策略: +查询(手机号)  class 外部接口查询策略1  外部接口查询策略1: +查询(手机号)  class 外部接口查询策略2  外部接口查询策略2: +查询(手机号)  class 外部接口查询策略3  外部接口查询策略3: +查询(手机号)  地址查询策略 <|-- 外部接口查询策略1  地址查询策略 <|-- 外部接口查询策略2  地址查询策略 <|-- 外部接口查询策略3

扩展性伸缩性

可测试性

分层的问题

分层架构设计

分层架构模型

MVC

随着前后端分离以及后端微服务化的不断发展,传统的MVC已不适合现在的纯后端系统,Controller其实也是API,它代表了服务对外提供的接口,是一种合约

---title: Model1模型---sequenceDiagram  客户端 ->> JSP: 请求  JSP ->> JavaBean: 请求  JavaBean ->> DAO: 数据库操作  DAO ->> JavaBean: 数据库操作  JavaBean ->> JSP: 返回  JSP ->> 客户端 : 返回
---title: Model2模型---sequenceDiagram  participant 客户端  participant 控制器 as Controller(Filter/Servlet)  participant 模型 as Model(JavaBean)  participant 视图 as View(JSP)  客户端 ->> 控制器: 请求  控制器 ->> 模型: 请求  控制器 ->> 视图: 请求  视图 ->> 模型: 请求  模型 ->> 数据库: 请求

当系统有了一些不可见的逻辑时,就需要注意模型与视图分离

优势

弊端

控制器类型

  1. 页面控制器,为特定页面或动作处理请求的对象。控制器通过绑定请求来实现与用户的交互。其从请求中提取参数,对输入进行处理,执行业务逻辑,选择适当的视图以呈现结果。
  2. 前端控制器:处理所有请求的控制器,执行一些通用的行为,如身份验证和日志记录,并且这些行为可以在运行时动态修改
  3. 应用控制器:一个处理程序流的集中控制点,负责协调页面控制器与前端控制器之间的交互,确保请求在应用中的流转符合预期

Model

业务数据模型,Model层是高层策略,是技术无关逻辑的封装

View

当有用户的行为触发操作时,由控制器更新模型,并通知视图进行更新

Controller

主要是接收用户请求,并负责协调Model与View

MVP

stateDiagram-v2  View --> Presenter: User events  Presenter --> Model: Model update  Model --> Presenter: State changes  Presenter --> View: View update

MVVM

BFF

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