架构分层

软件架构分层在软件工程中是一种常见的设计方式,它是将整体系统拆分成 N 个层次,每个层次有独立的职责,多个层次协同提供完整的功能。

常见分层架构

MVC(Model-View-Controller)架构

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

另外一种常见的分层方式是将整体架构分为表现层、逻辑层和数据访问层:

  • 表现层,顾名思义嘛,就是展示数据结果和接受用户指令的,是最靠近用户的一层;
  • 逻辑层里面有复杂业务的具体实现;
  • 数据访问层则是主要处理和存储之间的交互。

计网中的 TCP/IP四层模型:

  • 分为链路层、网络层、传输层和应用层
  • 每一层各司其职又互相帮助,网络层负责端到端的寻址和建立连接,传输层负责端到端的数据传输等,同时相邻两层还会有数据的交互。这样可以隔离关注点,让不同的层专注做不同的事情。

分层的优缺点

优点:

  • 首先分层的设计简化了系统设计,让人各司其职只关注某一层的事情。
  • 再次就是提高了系统的复用性,可以将某一层单独抽出使用。
  • 能够更容易的进行横向扩展,比如可以将某一层单独部署扩展。

缺点:

  • 增加了代码的复杂度。
  • 如果我们把每个层次独立部署,层次间通过网络来交互,那么多层的架构在性能上会有损耗。

分层案例

分层架构需要考虑层次之间一定是相邻层互相依赖,数据的流转也只能在相邻的两层之间流转。

参照阿里系统分层的规约:

image-20230412163055014
  • 终端显示层:各端模板渲染并执行显示的层。当前主要是 Velocity 渲染,JS 渲染, JSP 渲染,移动端展示等。
  • 开放接口层:将 Service 层方法封装成开放接口,同时进行网关安全控制和流量控制等。
  • Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
  • Service 层:业务逻辑层。
  • Manager 层:通用业务处理层。这一层主要有两个作用:
    • 其一,你可以将原先 Service 层的一些通用能力下沉到这一层,比如与缓存和存储交互策略,中间件的接入;
    • 其二,你也可以在这一层封装对第三方接口的调用,比如调用支付服务,调用审核服务等。
  • DAO 层:数据访问层,与底层 MySQL、Oracle、HBase 等进行数据交互。
  • 外部接口或第三方平台:包括其它部门 RPC 开放接口,基础平台,其它公司的 HTTP 接口。