3-Tier Architecture

唯科网推荐的代码分层设计模式为三层架构设计(3-Tire Architecture)。三层架构设计能够很好地体现出软件设计"高内聚,低耦合"的设计思想。


图2. 三层架构设计模式

传统的三层架构设计如上图,将项目代码划分了三层,每一层有其独自的职责边界。但在大多数的场景中,我们常看到的是以下的分层结构,将数据结构模型再进一步地抽离了出来统一维护。


图3. 常见三层架构设计模型

表示层 - UI

User Interface位于三层构架的最上层,与用户直接接触,主要是B/S中的 WEB页面,也可以是API接口。表示层的主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到BLL系统中进行数据处理,处理后会将处理结果反馈到表示层中。换句话说,表示层就是实现用户界面/API接口功能,将用户的需求传达和反馈,并用BLL或者是Model进行调试,保证用户体验。

业务逻辑层 - BLL

Business Logic Layer的功能是对具体问题进行逻辑判断与执行操作,接收到表现层UI的用户指令后,会连接数据访问层DAL,业务逻辑层在三层构架中位于表示层与数据层中间位置,同时也是表示层与数据层的桥梁,实现三层之间的数据连接和指令传达,可以对接收数据进行逻辑处理,实现数据的增删改查等功能,并将处理结果反馈到表示层UI中,实现软件功能。

数据访问层 - DAL

Data Access Layer是数据库的主要操控系统,实现数据的增删改查等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中实现通用数据能力进行封装(例如通过ORM组件)来保证数据访问层DAL数据处理功能。 

模型定义层 - Model

模型定义也常用Entity实体对象来表示,主要用于数据库表的映射对象,在信息系统软件实际开发的过程中,要建立对象实例,将关系数据库表采用对象实体化的方式表现出来,辅助软件开发中对各个系统功能的控制与操作执行。建立实体类库,进而实现各个结构层的参数传输,提高代码的阅读性。从本质上看,实体类库主要服务于表示层、业务逻辑层以及数据访问层,在三层之间进行数据参数传输,强化数据表示的简约性。

需要注意区分的是,这里的ModelMVC设计模式中的Model虽然都是一个名字但是差别巨大,职责完全不同。

三层架构设计与MVC

由于MVC也是三层结构,因此有的同学也会将MVC笼统地归纳于三层架构设计中,从字面意义上来讲似乎也没什么问题。不过两者还是存在一定的区别。


图4. 三层架构设计与MVC

可以看到,在三层架构设计中,UI表示层即相当于MVCViewController层,原本在MVC中这两层的逻辑应当是比较"轻量"的,因此被合并为一层进行统一管理也可以理解。比较重要的一点是,原本MVC中的Model被拆分为了BLLDAL,即将业务逻辑与数据访问进行分离,将原本臃肿的Model进行了进一步的解耦,有利于项目的更好维护。

软件架构的演变过程,特别是互联网软件架构的演变过程,本质也就是将业务逻辑不断解耦的过程。