三层的了解一直都有,最近在项目结构上遇到了一些问题,遂将三层/多层的结构详解做一下整理和分析。
架构/模式/框架
首先说下什么是三层架构,在解释三层架构之前,应该先分清楚架构,模式,框架的区别。
其他的开发平台不清楚,在.NET 平台,很多人把 MVC 和 三层混为一谈,MVC 和 ASP.NET MVC也混作一团。这就是对这几个概念混淆不清,下面逐一说说。
架构
说到架构这个词,我们首先想到的是架构师,这个作为底层码农心心念念想要达到的职位,那么什么是架构呢?架构一般是正对整个系统的,而并非针对某个单独的问题。
软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。
正是因为架构的这些特性,因此架构是没有语言和平台限制的,通用的,普适的设计规划。
模式
软件开发中遇到某些特定的问题,而由此总结出来的固有的普适的经验,解决方法,就是模式。例如我们常说的 GOF 23 种设计模式 ,MVC 模式, MVP模式等等。
GOF 23
诸如常见的工厂模式,单例模式,原型模式,适配器模式等等……
计划整理一遍23种模式的原型代码,暂时可以参考 TerryLee -.NET设计模式系列文章
MVC/MVP
MVC/MVP 则极为常见,也就是我们常说的,模型,视图,控制器。
而 MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
框架
那么什么是框架呢?框架是架构设计,模式的具体体现。
比如:
- ASP.NET MVC 就是一个基于MVC 设计模式的WEB 服务开发框架。
- VUE 是一个基于 MVVM设计模式的渐进式前端开发框架。
这就是框架的定义。
三层(多层)架构
三层架构,实际上是多层架构的一种,我们通常将其约定为三层,即 :
- UI Layer 界面层
- Business Logical Layer 业务逻辑层
- Data Access Layer 数据访问层
当然,通常情况下,使用对象关系映射 ORM ,也会添加一个 Entity 实体层或 Model 模型层。
那么如此分层的意义是什么呢?
功能明细化,每一层负责各自职责,这样在出现问题时,可以轻松排查出问题出现在哪一层,从而快速做出响应。同时,一定程度的降低了代码的耦合度,从而提升复用率,某种层度上来说,可以提升开发效率。另一方面,也利于团队开发,划分功能模块,各自按规范开发,完成单元测试。
三层间的交互
三层之间各自关联,又相互独立。
UI 层只和 BLL 业务逻辑层 交互,由UI 层获取用户输入和请求,经由BLL 处理, BLL 处理后调用 DAL 与数据库交互,DAL 只和 BLL 与数据库交互,并将处理的结果按需返还给 BLL ,BLL 将内容处理后经 UI 层展示给用户,即完成三层交互。