怎么理解Laravel的核心架构

摘要:
首先,您应该了解larravel框架的架构模式。在larravel中,多个服务提供商构成了larravel组件。这项服务是为您提供所需的服务。larravel提供的服务包括身份验证服务、数据库服务、缓存服务、队列服务等。然后,larravel中有一个facade,方便我们优雅地调用服务器提供者的类。

怎么理解Laravel的核心架构第1张

使用过larave框架的朋友都知道laravel框架里面除了提供一些基本的功能(如控制器、视图、模型)之外,还有中间件、门面、契约等,这些东西是如何在laravel框架运用起来的呢?今天就和大家详聊一下。


首先应该了解laravel框架的架构模式(设计核心,laravel 框架是使用服务组件化的开发模式开发的,laravel框架就是由不同的服务组件构成的)

laravel 里面多个服务提供者构成了laravel组件。分层设计:把相同功能的类库放在同一个文件夹里面。
laravel框架有多个类组成服务,由多个服务组成组件。类 -> 服务 -> 组件
laravel使用组件化的开发模式,多个类 -> 服务 -> 组件,多个类组成服务,多个服务构成组件。
多个组件提供不同的服务,然后多个服务构成我们的项目。
请求生命周期
大概的流程如图:

怎么理解Laravel的核心架构第2张

 理论上,生命周期主要有这么些阶段,但其中,开发者大多数只需关注路由、中间件、控制器、闭包函数、逻辑处理等几步
当然,每一步的内部,还是会有更多细化的执行流程,在这里,一般不深入研究框架或改造框架,很少会细化研究,但研究底层,依旧是学习的好选择。

服务
说的就是提供给你所需要的东西,在laravel里面所提供的服务有 认证服务、数据库服务、缓存服务、队列服务等等。laravel框架所有服务都定义在了app/config/app.php 里面

服务提供者
可以给你提供一组服务的东西就是服务提供者,laravel里面如上所示其实定义的服务器提供者,比如IlluminateAuthAuthServiceProvider::class,提供认证服务的服务提供者。IlluminateCacheCacheServiceProvider::class,提供缓存服务的服务提供者

好处:开发者可以节省下更多的精力去处理项目逻辑,且不同开发个体之间能达到一定默契,最重要的是,项目达到分层解耦,业务逻辑只依赖于服务,并不依赖于服务底层的实现。
解耦之后,我们可以任意升级或自定义服务的底层实现,只要确保底层类实现了该服务

总结:其实服务是一个抽象的概念,服务器提供者是完成这个抽象概念的具体实施者

服务容器
把所有的服务放在一个盒子里,存放服务的容器。laravel里面的服务容器位于 

怎么理解Laravel的核心架构第3张

 Container.php 就是laravel框架的服务容器。

契约
用来规划服务提供者的格式、方法、参数等,给服务提供者规范了一定约束。所以在框架里面所有的契约都是接口,这样才能规范服务提供者。

门面
门面再一次展示了Laravel在设计上的优秀,它让Laravel变得更加灵活易扩展,那么它的概念是:
1 为开发者提供服务容器中服务的静态代理
2 它对服务访问方式做了补充,之前使用服务必须获取服务的实例,再调用服务的方法,但使用facade,就可以直接把服务当静态对象来调用了。
3 config/app.php中服务别名alias大多数都使用了facade
4 使用facade是有风险的,并不是用的越多越好,这在手册上有少量的介绍,但具体的,还是需要开发中去发现

laravel框架总体架构图

怎么理解Laravel的核心架构第4张

 如上图所示:laravel框架是由多个服务组件构成的 -> 服务提供者(最下面的不同的服务组件)。
Foundation 的 Application 用来创建服务提供者,创建好之后保存在Container 的 Container 的服务容器里面,交由他管理,Application 要继承 Container。
为了约定服务提供者提供的服务,我们定义一个规范,这就是契约

对于我们的用户(最上面的用户)想使用laravel框架,必须通过控制器来使用(上面的Controller),使用laravel框架主要是使用laravel里面的服务提供者(上面的 new 服务),这样就是最传统的开发模式,和服务器容器没有直接关系,如果laravel这样设计的话,基本上和其他框架一样,没有任何优势。所以一般不怎么做。

由于有契约,契约是服提供者的接口,所以我们也可以直接使用契约,new 服务旁边的黄色线。使用契约用注入的方式,这样使用的不好之处是如果一个方法里面使用多个契约的话,我们就得注入多个契约,这样代码看起来不优雅。

于是laravel里面就出现了门面,门面的出现方便我们优雅的调用服务器提供者的类。由于每个服务提供者的类太长了如:

怎么理解Laravel的核心架构第5张

 所以又引出了别名,使用别名之后 简化了我们调用的服务提供者的类。

事件:laravel里面的模型里面的事件,比如用户对数据库操作时做的一个监听。对整个项目运行进行监听,有监听的动作。类似tp5里面的钩子和行为。
中间件:做用户的请求做一定的过滤。

百度网盘面试题资源分享链接:https://pan.baidu.com/s/1XDWqO3iUK2ZC1Uo1PBwFfg

提取码:urtq

整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货获取点击链接加入群聊【swoole学习2群】:

正在跳转

免责声明:文章转载自《怎么理解Laravel的核心架构》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Bootstrap风格zTree树形菜单插件批处理为乱码但可以正常执行的问题分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

移动端常用开发插件和框架

1. 移动端常用开发插件 1.1. 什么是插件 移动端要求的是快速开发,所以我们经常会借助于一些插件来帮我完成操作,那么什么是插件呢? JS 插件是 js 文件,它遵循一定规范编写,方便程序展示效果,拥有特定功能且方便调用。如轮播图和瀑布流插件。 特点:它一般是为了解决某个问题而专门存在,其功能单一,并且比较小。 我们以前写的animate.js 也算一个...

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一 1.此框架方便简洁,便于学习研究。除了基本的增删改查外,还有分页,兼容分页的多表查询,同一业务处理时多次数据库操作仅需要打开一次数据库,反射对象映射赋值,分页返回集合的json封装函数,自定义对象,NLOG日志记录,前端H+框架,sweetalert、Sortable、l...

Web移动应用开发框架的8个技术构想 狼人:

之前我们已经介绍过四大主流移动Web开发框架,今天我们再次深入,探讨Web移动应用框架需要具备的技术特性和理念。目前虽然已经有诸如iUI、jQTouch、WPTouch、PhoneGap、XUI、iWebkit等Web移动应用开发框架,但在移动这个领域毕竟刚刚起步,需要更多技术人员对其修正和思辨。下面这篇文章来自腾讯WSD团队博客,为我们梳理了移动Web开...

使用 Equinox 框架进行 OSGi 环境下的 Web 开发

转载地址 http://www.ibm.com/developerworks/cn/web/0907_osgiweb_liuqing/ 使用 Equinox 框架进行 OSGi 环境下的 Web 开发 文档选项 将此页作为电子邮件发送 样例代码 级别: 初级 刘 庆 (qlcdl@cn.ibm.com)...

开源项目【mall】完整的电商系统

项目介绍 mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理...

让.net程序运行在没有framework的机器上

Remote Soft's Salamander .NET Native Compiler (www.remotesoft.com) .Net 框架目前逐步在普及了,仍然有很多人在寻找如何让.NET程序脱离.NET框架的方法。 现成的工具有 Xenocode 的postbuidle或者vas,还有 Salamander .NET Linker . 另外...