Laravel为什么受欢迎?
Laravel有很多受欢迎的地方,其中大家说的最多的是Laravel优雅,在我看来Laravel的语法确实很优雅,但是我认为受欢迎不仅仅是因为优雅,还因为Laravel是一个服务组件化的框架。
开发模式
说到服务组件化设计我们就需要说一下开发模式的进化。
混编模式->前后端代码分离->MVC->MVCS->服务组件化设计
1、混编模式:PHP早期开发会把HTML和PHP都写在一个PHP脚本中来运行,这个阶段称之为混编。 缺点:代码混乱,不易于管理。
2、前后端代码分离:由于混编模式不易于管理前后代码,所以出现了前后端分离的做法,也就是把HTML+CSS+JS等这些代码和PHP接口单独分离出去,使用较多的是smarty模板。 缺点:每个项目通用的东西需要重复造轮子。
3、MVC:全名Model VIew Controller,即模型、视图、控制器的缩写,目前各大框架均是采用MVC模式。MVC并不是一种设计模式,可以简单理解为是一种业务框架的拆分方式。MVC是以观察者模式、策略模式、组合模式三种设计模式的合体,到了MVC这个时代以后项目层次已经比较明显易于管理了。 缺点:当业务足够多的时候,业务代码会写在Controller或Model中,假如项目中有三个端,pc、mobile、APP他们各自的登录对应个自己的Controller,假如需求有改动,维护起来成本太高、
4、MVCS:在MVC的基础上又添加了一个Service(业务服务层),MVCS将Controller只用于接收请求,处理参数,所有的业务都在Service中进行操作,Model层单纯的控制数据库操作,Service在这里主要用于业务的处理,已经数据的返回。 缺点:公司发展方向一直都在调整,也许会同时开多个项目,如果同时开多个项目,之前项目上一些工具类方法不能直接拿过来使用,cv大法有时候会丢失代码等。
5、服务组件化:当公司项目多的时候可以把和项目无关的一些工具进行封装,上传至composer中,下次在有别的项目使用的时候直接从composer中加载即可,Laravel就是一个组件化设计的框架,Laravel中所有的功能都是一个单独的组件,都可以在composer中找到。
laravel核心架构:
结合laravel文档,总结看下laravel框架的结构,laravel6.0中文文档地址:https://learnku.com/docs/laravel/6.x
文档中指出laravel的核心架构是请求周期、服务容器、服务提供者、Facades、契约。
服务容器(container):
本质为IOC容器,实际上是一个数组,当程序初始化的时候,会将所有会用到的类、函数注册到容器中,用于管理项目运行的服务,容器组件地址:vendor/laravel/framework/src/Illuminate/Container/。
服务提供者(providers ):
所有的服务提供者都会继承,注册一些实例对象到容器中,初始化组件,让laravel能够加载到这个组件。
Illuminate\Support\ServiceProvider 类,服务提供者就是指组件.
<?php
namespace App\Providers;
use Riak\Connection;
use Illuminate\Support\ServiceProvider;
class RiakServiceProvider extends ServiceProvider
{
/**
* 在服务容器里注册
*
* @return void
*/
public function register()
{
$this->app->singleton(Connection::class, function ($app) {
return new Connection(config('riak'));
});
}
}
Facades(门面):
门面是为了使Laravel的语法更加优雅而出现的,正常在IOC中注册以后是可以通过$this->app('User')->add();这样来调用的,加入门面以后可以使用USER::add();是用法更加简单。
契约:
组件会不定期更新,组件升级以后如何保证方法一致?契约的主要作用是用来约束组件,为组件定义相应的规则。
Laravel流程:
解释:图中Controller可以直接使用$this->app('User')->add();