漫谈软件分层架构

本文谈谈软件开发中的分层架构。主要包括概述、组件以及主要特性,当然也包括其优缺点及应用场景。

架构定义

软件架构的定义有很多,这里我们理解为软件系统的基本结构,组成系统的各个功能及行为。尽管术语架构通常指的是建筑设计,但在软件系统中,它包括组件的设计、组件之间的关系、用户交互,以及系统的用户需求。

常见的软件架构有:微内核架构、微服务以及客户端-服务器端架构。这几个架构的结构不同、且应用常见也不一样,本文我们仅关注分层架构。

什么是分层架构

分层架构是软件开发中应用最广泛的架构框架。N层架构表示几个独立层组成单个软件单元的架构模型,单个层是逻辑独立的组件或代码:
漫谈软件分层架构_第1张图片

在这些架构中,类似或相关的组件通常在同一层,但每层有差异,承担整个系统中不同部分的角色。

分层架构的主要特点是上层仅与其下层进行交互,上图中表现层仅能调用逻辑层,逻辑层仅能调用数据访问层,但表现层不能直接调用数据访问层。另一个特征是分层隔离的概念。每层可以修改,但改变不影响其他层,也就是说改变仅在对应层被隔离。再者就是关注的分离概念,机一个模块只关心一个功能点。

分层架构的组件

分层架构具体有几层并没有特别规定,这依赖开发者或软件架构的应用常见。但一般分层架构都有用户交互层、业务处理层以及数据访问层。如下图所示:
漫谈软件分层架构_第2张图片

Presentation Layer – 表示软件下图的用户交互
Application/Business Layer – 负责处理和实现功能需求
Domain Layer – 负责算法及编程组件
Infrastructure/Persistence/Database Layer – 负责数据处理,如数据库

需要说明的是在一些应用中有些层被合并了。如业务层与持久层合并为单个层,这意味着这两层的功能被组合在单个层中。

优势与劣势

下面简要说明下分层的优势与劣势:

  • 优势

框架简单容易学习并实践
减少依赖,每层功能相互独立
独立组件容易测试,每个组件可以单独进行测试
总体运维成本相对较低

  • 劣势

可伸缩性是困难的,因为框架的结构不允许增长。
维护困难,运维每层改变会影响到整个系统。
层之间相互依赖,上层依赖下层,从下次接收数据。
不能并行处理业务

应用场景

当开发简单的小型系统,建议使用分层架构。因为它是比较简单的框架,但也有开发者认为分层比较难维护,应该在大型项目中使用。尽管观点不同,该框架能够快速构建应用、且容易上手;当遇到不确定使用那个框架或没有太多软件架构知识时选择分层框架不失为较好的选项。我们常见WEB应用框架、OSI模型、J2EE编程模型也都是分层架构。

总结

本文我们讨论分层架构的概念,它的特性及基本组成。同时也简要讨论了其优缺点和应用场景。

你可能感兴趣的:(设计模式,架构,分层架构)