服务容器

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. 基于php的AWS存储服务

    近几天用到了aws的s3存储服务,公司内部的完全兼容aws并对其进行了封装,之前也用过,现在把经验总结一下. 既然要用,首先需要安装sdk,下边提供了几种安装方法 方法一:使用composer安装 1 ...

  2. ZROI #364. 【2018普转提day18专题】嘤嘤嘤

    ZROI #364. [2018普转提day18专题]嘤嘤嘤 直接贴代码 具体见注释 #include<stdio.h> #include<cstring> #include& ...

  3. POJ-325Corn Fields

    链接:https://vjudge.net/problem/POJ-3254#author=freeloop 题意: 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ ...

  4. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D

    Moriarty has trapped n people in n distinct rooms in a hotel. Some rooms are locked, others are unlo ...

  5. CImage访问像素及其像素操作总结

    MSDN的代码 COLORREF pixel; int maxY = imgOriginal.GetHeight(), maxX = imgOriginal.GetWidth(); byte r,g, ...

  6. 海德汉S3078长度计

    手头有一款海德汉S3078的增量式长度计. 图三为长度计引出线缆的针脚编号,其中,Up和传感器Up短路,0V与传感器0V短路,其他为输出信号线缆.时序如图: Ua1和Ua2两个信号的相位,可以得出长度 ...

  7. ps 进程管理

    一. 进程管理 1. pstree 2. ps 3. top 4. nice 5. free 6. screen 二. 程序与进程 程序是静态的文件,进程是动态运行的程序. 三. 进程和线程 一个程序 ...

  8. iOS 自定义读写文件

    LSCacheFile.h // // LSCacheFile.h // iPhone // // Created by xujinzhong on 14-6-5. // Copyright (c) ...

  9. 数据倾斜是多么痛?spark作业调优秘籍

    目录视图 摘要视图 订阅 [观点]物联网与大数据将助推工业应用的崛起,你认同么?      CSDN日报20170703——<从高考到程序员——我一直在寻找答案>      [直播]探究L ...

  10. scss引入的问题

    导入.sass或.scss文件 css有一个不太常用的特性,即@import 导入功能,它允许在一个css文件中导入其他css文件.然而,结果是只有执行到@import 规则时,浏览器才会去下载其他c ...