如果在服务器端的技术领域选择一个架构设计方法,那一定是“分层架构设计”方法。
前言
“分层”是一种思维方式,一种解决复杂性问题的方式,也是一种体系结构。
“分层体系结构”指的是将系统的组件分隔到不同的层中,每一层中的组件应保持内聚性,并且应大致在同一抽象级别;每一层都应与它下面的各层保持松散耦合。“分层架构设计”是一种采用分层思维方式在软件架构设计领域进行设计的体系化方法。
分层设计为什么适用范围非常广,因为这个设计方法包含了两个优点,而这两个优点正好对应了架构设计的六字真言。
架构设计六字真言:高内聚低耦合
分层设计优点:
- 用Layer分层定义了高内聚的聚类方式
- 用上层只能调用下层定义了低耦合通讯方式
正文
软件研发人员都是专业人士,专业人士要能用专业词汇进行定义描述。架构风格和模式的一种专业描述架构设计的方法。“分层架构设计”的风格和模式描述如下。
- 架构风格 - 分层架构,约束(分层,上层依赖下层,下层不依赖上层)
- 架构模式 - 三层系统架构、N-Layer层系统架构
三层系统架构
三层系统架构是服务器端研发人员张口就来的设计方法。分层架构有一个通用的切分规则是“技术横切业务竖切”,三层系统架构的三层主要指的是三个横切的技术层,主要用于技术组件的高内聚低耦合。三层的主要特点如下。
层次 | 特性 |
---|---|
表现层 | 又称UI层,表现层支撑用户访问,需要提供API供外部用户访问,主要定义用户行为的输入输出。 |
业务层 | 又称业务逻辑层,主要进行用户场景的业务逻辑处理,包括输入数据的业务合法性检查和业务逻辑处理等。 |
持久化层 | 又称数据库层,支撑业务数据的持久化存储,一般Web系统指的是关系型数据库。 |
三层系统架构和MVC是什么关系?
有同学把三层系统架构和MVC弄混,其实这两个是不同维度上的设计方法,一般认为MVC(Model-View-Controller)是“表现层”的一种设计方法。
N-Layer层系统架构
既然有三层系统架构,那么肯定也有更多层系统架构设计,比如在设计层面也可以把数据库当做单独的一层,形成四层架构设计。
四层架构设计:
同理除了四层还可以有五层/六层等设计方法。
六边形系统架构
同理继续扩展分层架构的设计方法,除了上下的分层也可以是内外的分层,六边形架构设计方法就是一种内外分层的设计方法。
分层架构设计的目的是降低耦合提高功能复用,但是不可避免的将业务逻辑拆散在不同层次中了,反而导致了核心业务逻辑的离散化,离散化导致持续迭代的难度增高和不能独立测试验证业务逻辑,并且随着微服务架构的流行,软件架构设计也从一维的设计发展为多维的设计,原有的上下分层架构设计方法无法很好地支撑这种变化。
六边形架构设计:
六边形架构设计从内到外分为业务核心层、支撑层、适配器层,这种设计方法将业务、内部技术和外部技术进行区分,有效的防止了业务逻辑泄露到多层的问题,并且通过适配器设计方法可以支撑替换三方框架服务,进行独立业务逻辑验证的目的。
案例
最知名的一种分层设计成果是TCP/IP的七层网络协议和五层模型。
总结
有一种采用“南北东西”进行设计描述的方法,这也是一种分层架构设计的方法,相比于东南西北我更喜欢分层架构设计,一个“分层”概括了这个架构的所有特点,也体现了解决复杂性问题的本质:分解切分。
如果用一个类比思维,设计更像是切蛋糕,除了竖着切之外,还可以横着切、斜着切、和盘子一起切、连着桌子一起切、组合切分等方法,每种切分方法都可以像是“六边形架构”一样可以命名一种新的架构设计方法。
架构设计不是一蹴而就的,一般情况更多是确定架构风格达成团队共识后,逐步进行演进设计。