Web 金字塔式开发框架分层模型概述

现在的大部分 Web 框架都是使用金字塔式的分层架构,一般这种应用都是阻塞同步 IO 模型的编程实现,理解这种分层架构模型的实质有助于理解框架。

因为万变不离其宗,理解这种架构后你不管这种模型如何变化实际上都是在遵守一些约定和规则,那么理解这个模型,只要这个框架是这种架构那么你都会掌握的很快。

首先我们从最简单的 MVC 三层架构说起。

file

实际上,一般框架分层就是这种分层的,这种分层模型使用时通过一个入口文件启动框架服务,注册一些框架依赖,然后通过路由分发将请求分发到各个控制器里去,一般逻辑写在控制器层,模型层做数据处理,视图层负责展现。

随着项目变大,协作人数变多,这种分层会不太能适应需求,那么我们可以通过增加分层来解决问题。

file

我们在模型层和控制器层中增加服务层,通过依赖注入的方式将控制反转,能解决扩展和重用的问题,但随着项目继续扩大,我们又要增加一层。

file

我们再分一层,将数据修改获取逻辑放到储藏库层,模型只负责模型定义,这样多个程序员就可以工作在不同的层上。

理论上我们可以无限分层,不断的拆分将业务分层拆的更细。但是有的场景中我们需要做一些操作其实不能很好的分层,因为有的业务可能用到,有的业务可能不会用到,同时由于分层我们制造了许多组件和分层之间的依赖,在这样的系统中面向对象设计和编码变的重要。

此时引进了一个新的概念 AOP ,既面向切面编程

file

上图的蓝色就是切面,面向切面编程,这种编程方法就是在需要的地方实现一个切面,把一些需要做但不是每个业务都要做的东西放到这里去做,如中间件、过滤器、拦截器、事件通知、观察者都算是这种切面的实现之一。

总结

金字塔分层模型是阻塞 IO 编程的常用处理方式。

分层会带来业务低耦合及增强程序复用性,但同时也会带来业务逻辑代码变得复杂。

面向对象编程时为了解决大型项目的复杂性问题而产生的编程方法,有些人说这个不重要或者没有用很有可能是做的项目还不够大还不够复杂,或者是根本不涉及到协作开发的原因,亦或者是真的是要使用底层语言做高性能的开发,而语言本身不支持。

金字塔式架构开发,业务平行展开难度较大,这种架构在人员分组上 5-7 人一般会达到极限,此时即使增加人手也不会增加开发速度和效率。解决这个问题的就是微服务或者是扁平化的基于消息传递的面向消息编程。

世界上不止阻塞 IO 编程,还有多线程、协程,也有非阻塞 IO 异步编程语言,它们使用的编程模型和金字塔分层模型是有区别的,但在理解和使用上难度更高些。

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer 于 6年前 加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3
颜⑧

用MVP 模式 岂不是直接纵向切割管理了?

6年前 评论
nickfan

web服务采用金字塔式分层其实是业务和交互层面而言最容易理解(舒服)方便的一种方式
如果业务多了以后其实还是有很多细节可以重构的:

  1. 各个业务内部服务分层管理消息化对接
  2. 对外统一提供带QOS控制的RPC接口(即大前端的视图层/接口层)
  3. 接口设计层面尽可能采用请求、响应消息模式、队列化、异步化的方式
  4. 业务流程中各个分支业务接口调用分等级,非必要支线事务可以采用异常捕获事后回推补偿来解决问题。
  5. 各业务服务的调用严格限制超时即异常终止并记录。
6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!