服务容器

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. android 一些常用权限

    <!-- 网络访问权限 --> <uses-permission android:name="android.permission.INTERNET" /> ...

  2. 归档-对模型数组对象(存储到本地的plist文件)也数组里存放的是模型

    一.模型文件 (1)JLMainViewsModel.h文件 必须遵循 NSCoding协议 @interface JLMainViewsModel : NSObject<NSCopying,N ...

  3. RTT

    Segger RTT的使用 一般arm系统中,如何通过电脑键盘和显示器同mcu进行交互最有效的有两种形式:arm7的semihost,cm时代的traceswo.现在jlink推出了颇具特色的rtt( ...

  4. base64 正则表达式 ,判断图片是base64还是图片链接

    base64正则表达式 在这里看到https://segmentfault.com/q/1010000009628242/a-1020000009629647 var reg = /^\s*data: ...

  5. [未读]深入浅出node.js

    还没看过,据说很多内容来自国外译文.

  6. CocoaPods 提交自己的库

    今想把自己写的一个view提交到CocoaPods时候,突然发现pull request被拒了,原来从去年开始就改用trunk了... 网上那些folk 在提交的pull request的教程都不可用 ...

  7. WebService学习之旅(二)JAX-WS基于Web容器发布WebService

    在上节中我们定义Web服务接口和实现类后,调用Endpoint类的静态方法publish发布来webservice,这种方法使用起来虽然简单,但是对于一个企业级应用来说通常对外提供的服务可能不止一个, ...

  8. 洛谷 P1309 瑞士轮

    题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程往往十分 ...

  9. Linux下文件以及文件名编码转换

    1.查看文件编码方式--file 文件名(但不是很准确) yang@mint-linux ~ $ file baidu.html baidu.html: HTML document, UTF-8 Un ...

  10. 最完整的台达PLC培训教程(沈阳工大)学习笔记1

    1) 可编程控制器的应用1 开关量逻辑控制:电动机启动与停止2 运动控制:对步进电动机或伺服电动机的单轴或多轴系统实现位置控制3 过程控制:对温度.压力.流量等连续变化的模拟量进行闭环控制4 数据处理 ...