02为什么要架构分层

812 阅读3分钟

1.什么是分层架构

将系统纵向的拆分为几层,每个层次有独立的功能,多个层次协同提供完整的功能

常见的分层模型

名称实现细节图片
MVCModel View Controllerimage.png
web+service+dao表现层:展示用户指令
逻辑层:复杂业务的具体实现
数据访问层:处理与存储间的交互
image.png

分层的例子

名称实现细节图片
OSI七层网络模型 TCP/IP四层协议网络层:负责端到端的寻址与建立连接
传输层:端到端的数据传输
相邻两层会有数据交互 隔离关注点,不同的层专注不同的事情
image.png
Linux文件系统VFS:虚拟文件系统,屏蔽系统间的差异
层次是对下层不同实现的抽象
image.png

2.分层的优点与缺点

分层的优势分层的劣势
分层可以简化系统设计,不同的人专注某一层的事情
技术大盘:API,中台,基础架构
增加代码的复杂度
简单的查询,需要在每个层次间进行数据传递
分层可以有很高的复用性
中台、biz-lib、biz-common
每个层次单独部署,增加网络交互
分层可以便于做横向扩展
针对某一层的瓶颈进行扩展
CPU耗时(增加机器),磁盘读写慢(SSD)....

3.如何分层

需要考虑清楚分层的边界问题

因需求变更和业务复杂度,导致分层模糊

image.png 终端显示层:各端模板渲染并执行显示的层。当前主要是 Velocity 渲染,JS 渲染, JSP 渲染,移动端展示等。

开放接口层:将 Service 层方法封装成开放接口,同时进行网关安全控制和流量控制等。

Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。

Service 层:业务逻辑层。

Manager 层:通用业务处理层。这一层主要有两个作用,其一,你可以将原先 Service 层的一些通用能力下沉到这一层,比如与缓存和存储交互策略,中间件的接入;其二,你也可以在这一层封装对第三方接口的调用,比如调用支付服务,调用审核服务等

DAO 层:数据访问层,与底层 MySQL、Oracle、HBase 等进行数据交互。

外部接口或第三方平台:包括其它部门 RPC 开放接口,基础平台,其它公司的 HTTP 接口

Manager 层提供原子的服务接口(多次调用结果一致),Service 层负责依据业务逻辑来编排原子接口。

image.png

4.总结

分层架构是软件设计思想的外在体现,是一种实现方式。

单一原则:每一层的拥有单一的职责

迪米特法则:数据的交互不能跨层,必须在相邻层间进行

开闭原则:将抽象层与实现层分离,抽象层是对实现层共有特征的归纳总结(不可修改),具体实现无限扩展(随意替换)

当某一层复杂度过高后,将其拆分为多层