服务容器

laravel框架中 服务容器是整个系统功能调度配置的核心,在系统运行过程中动态的为系统提供需要的服务 从而实现了解耦

控制反转(IOC)

控制反转是一种设计模式 主要解决了系统组件之间的相互依赖关系 。

工厂模式 工厂模式中 一般会有一些共同的接口 通过调用不同的类 来实现相同的结果 比如出去旅游 有的人骑自行车 那就new一个自行车类 有的人可能坐火车 还有的人可能坐飞机 轮船或者其他的。也就是说 工厂模式中 需要哪些类 则工厂就生成哪些功能 这个时候就需要动态的修改工厂 但随着需要的功能越来越多 那么程序必然会变得庞大 耦合性非常高。

而控制反转就是要解决上面的问题 它将组件间的依赖关系 从程序内部提取到外部容器来管理 而依赖注入 是指组件的依赖通过外部参数或者其它形式注入到容器 等到需要的时候 在从容器中取出来即可
图片来自 http://blog.xiaohansong.com/2015/10/21/IoC-and-DI/

服务提供器 (Service Providers)

为了让依赖注入的代码不至于写乱,Laravel 搞了一个 服务提供器(Service Provider)的东西,它将这些依赖聚集在了一块,统一申明和管理,让依赖    变得更加容易维护。

两种方式添加服务

  • 1.要在每个环境下都要加载 编辑/config/app.php 将类加到providers数组中即可自动加载
  • 2.按需加载 根据不同环境加载 /app/Providers/AppServiceProvider.php 下面的 register方法 通过判断不同的环境然后加载不同的服务

门面模式(Facade)

为应用程序的服务容器中可用的类提供了一个「静态」接口 Laravel自带的门面,以及创建的自定义门面,都会继承自Illuminate\Support\Facades\Facade基类。门面类只需要实现一个方法:getFacadeAccessor。正是getFacadeAccessor方法定义了从容器中解析什么,然后Facade基类使用魔术方法从你的门面中调用解析对象。
好处1 不需要收到New对象 简化了书写
好处2 实现了统一的API 隐藏内部实现 当需要换一种类实现 也不需要改动太多代码

总结

所以有了控制反转(Inversion of Control)和门面模式(Facade),实际还有 服务提供器(Service Providers)和别名(Alias),我们创建自己的类库和扩展 Laravel 都会方便很多。

laravel 设计思想简单了解的更多相关文章

  1. 大数据 --> MapReduce原理与设计思想

    MapReduce原理与设计思想 简单解释 MapReduce 算法 一个有趣的例子:你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃? MapReduce方法则是: 给在座 ...

  2. 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...

  3. spring事务管理器设计思想(二)

    上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...

  4. javascript继承机制的设计思想(ryf)

    我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...

  5. 08-FPGA状态机设计实例——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的:1.学习状态机的相关概念 2.理解一段式.两段式以及三段式状态机的区别以及优缺点 实验平台:芯航线FPGA核心板 实验原理: 状态机全称是有限状态机(fin ...

  6. FPGA重要设计思想

    FPGA重要设计思想   1.速度和面积互换原则.以面积换速度可以实现很高的数据吞吐率,其实串/并转换.就是一种以面积换速度的思想 2.乒乓操作. 3.串/并转换的思想. 高速数据处理的重要技巧之一. ...

  7. MapReduce原理与设计思想

    简单解释 MapReduce 算法 一个有趣的例子 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃? MapReduce方法则是: 给在座的所有玩家中分配这摞牌 让每个玩家 ...

  8. CEPH浅析”系列之三——CEPH的设计思想

    Ceph针对的目标应用场景 理解Ceph的设计思想,首先还是要了解Sage设计Ceph时所针对的目标应用场景,换言之,"做这东西的目的是啥?" 事实上,Ceph最初针对的目标应用场 ...

  9. Delphi 包的设计思想及它与PAS、BPL、DCU、DLL、OXC的关系。

    DCP ,BPL分别是什么文件,起什么作用?你在DELPHI中建立一个package然后保存一下,看看. bpl和Dll比较相似.只是BPL是BORLAND自己弄出来的东西!!!调用也和调用DLL相似 ...

随机推荐

  1. Java有了GC同样会出现内存泄露问题

    1.静态集合类像HashMap.Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,所有的对象Object也不能被释放,因为他们也将一直被Vector等应用着. Static ...

  2. python regex

    re.match: match from the beginning of the string re.search: scan through the whole string to find a ...

  3. pycharm 虚拟环境virtualenv迁移到别的机器 无法读取包的问题

    将virtualenv迁移到别的机器时,发现pycharm 总是无法读取目录下所在的包,后来经过实验终于找到了问题所在: 将自己所建的虚拟环境目录下的orig-prefix.txt中保存的路径,改成新 ...

  4. [在读]JavaScript异步编程:设计快速响应的网络应用

    很棒的一本,就如书名所示,主要讲js异步的一些东西,比如定时器.Jquery的promise和deffered,node...看了一小半.推荐哦~~

  5. php pack、unpack、ord 函数使用方法(二进制流接口应用实例)

    在工作中,我也逐渐了解到pack,unpack,ord对于二进制字节处理的强大. 下面我逐一介绍它们.在我们工作中,用到它们的估计不多. 我在最近一个工作中,因为通讯需要用到二进制流,然后接口用php ...

  6. 用redis实现简单的队列

    在工作中,时常会有用到队列的场景,比较常见的用rabbitMQ这些专业的组件,官网地址是:http://www.rabbitmq.com,重要的是官方有.net的客户端,但是如果对rabbitMQ不熟 ...

  7. Vue.js - Day5 - Webpack

    在网页中会引用哪些常见的静态资源? JS .js .jsx .coffee .ts(TypeScript 类 C# 语言) CSS .css .less .sass .scss Images .jpg ...

  8. react项目构建中的坑—淘宝镜像安装后要设置

    基本的搭建步骤参考博客:https://blog.csdn.net/qq_27727251/article/details/86593415 这里要强调的坑是:安装完淘宝镜像要将其设置为默认Regis ...

  9. Opencv内存jpg图像解码和编码[转]

    CV_IMPL CvMat* cvEncodeImage( const char* ext,const CvArr* arr, const int* _params ) CV_IMPL IplImag ...

  10. sizeof()用法汇总 zhuan

    sizeof()功能:计算数据空间的字节数1.与strlen()比较      strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素.       ...