laravel 契约(Contracts)

作者: smallnews | 来源:发表于2016-09-21 16:02 被阅读650次

laravel 契约(Contracts)

本文重在记录自己的理解和一些心得,如果有什么错误,或者不足,欢迎抛砖!!!

关于契约是否仅仅是这种用法, 和什么时候应该使用契约还是得猿们自行研究,有什么问题欢迎一起探讨!

契约是什么


Laravel中的契约是指框架提供的一系列定义核心服务的接口,比如缓存,队列,日志的接口,契约就是接口

为什么要定义接口


定义接口目的为了解耦

当我们依赖注入缓存实例的时候laravel实现如下:

例如:我们选择使用memcached 缓存驱动
use Illuminate\Contracts\Cache\Repository as Cache;
class Repository{
    /**
     * 创建一个新的Repository实例
     *
     * @param  Cache  $cache
     * @return void
     */
    public function __construct(Cache $cache)
    {
        $this->cache = $cache;
    }
}
Paste_Image.png

不定义接口

如果不定义接口我们必须这样写
use Memcached;
class Repository{
    /**
     * 创建一个新的Repository实例
     *
     * @param  Cache  $cache
     * @return void
     */
    public function __construct(Memcached $cache)
    {
        $this->cache = $cache;
    }
}

这样当我们需要切换缓存驱动为redis 的时候,我们必须去控制器中把依赖注入的类型约定修改成redis,因为redis 的实现,和Memcached 并不一定完全相同,这就说明Memcached缓存紧密耦合与laravel 

什么才算是松耦合


什么才算松耦合,当系统升级,需要对一种实现进行修改(如从Memcached 需要升级到Redis)时,能够不对代码库进行修改,只需要对配置进行修改就能完成升级的时候就算是松耦合了!

一个契约两种,或者多种实现


个人感觉,契约既然定了,那么对应的实现应该是两种,或者更多的实现,或者在不久的将来会有两个或者更多的实现,契约就是来规定这么多实现的。如果肯定只有一种实现,感觉契约就没啥用了!

总结

  • 定义契约,是为了一组功能实现的一个约定,方便第三方接口开发人员的开发
  • 契约更像一个框架的一个目录索引,所有契约的实现组成了框架所有的核心服务,并且可以通过契约快速了解这一组功能是干什么的
  • 对于缓存类来说,缓存的契约,就是为了规定各种缓存实现(Memcached,Redis,文件缓存)需要实现的功能

相关文章

  • laravel 契约(Contracts)

    laravel 契约(Contracts) 本文重在记录自己的理解和一些心得,如果有什么错误,或者不足,欢迎抛砖!...

  • Laravel思维导图之Laravel核心概念

    Laravel 的核心概念包括:服务容器、服务提供者、门面(Facades)、契约(Contracts)。 服务容...

  • Laravel 核心--Contracts 契约

    概述 Laravel 的 Contracts 是一组定义了框架核心服务的接口( interfaces )。 例如I...

  • Laravel框架下的Contracts契约

    Contracts Laravel 的契约是一组定义框架提供的核心服务的接口, 例如我们在介绍用户认证的章节中到的...

  • 契约 Contracts

    Laravel中的契约是指框架提供的一系列定义的核心服务的接口: 契约的定义全部都是接口,需要服务器容器中绑定实现...

  • 2019-03-31Contract 契约模式

    浅谈Laravel中的设计模式(四) Contract 契约模式 技术预备:熟悉Laravel的使用 契约模式(C...

  • 56. 契约 (Contracts)

    Laravel 的契约是一组定义框架提供的核心服务的接口。框架对每个契约都提供了相应的实现。 所有的 Larave...

  • CDC 之 Spring Cloud Contract 看完就会

    先上个导图 一 什么是 CDC 消费者驱动的契约测试(Consumer-Driven Contracts,简称CD...

  • Lumen - 服务容器,服务提供者,Facades的关系

    Contracts 合同,契约,也就是接口,定义一些规则,每个实现此接口的都要实现里面的方法 操作示例首先先在:a...

  • laravel 契约的使用

    英文文档laravel-china建议还是看看英文原文比较好 契约的使用这方面很少文章介绍,很多文章都是直接翻译了...

网友评论

  • llnhhy:其实就是相当一个中间层咯,最上层是配置文件,确定使用哪种服务,中间层是接口,根据上层的配置文件调用下层中具体的实现
    云龙789:@llnhhy 也就是,他的语法跟依赖注入是一样的,但是他注入的是配置项里面的那个服务?如果不用契约,一次只能注册一个服务 是吧
    smallnews:@llnhhy :+1:
  • 云龙789:契约的本质就是接口是吗。我懂依赖注入,但还是不知道什么是契约。
    smallnews:@栾金龙 本质就是接口,对一种功能多种实现的一个约定,在你通过配置来回切换实现的时候,不需要去管具体controller 中是如何写的!
  • 云龙789:没看懂
  • Dearmadman:棒棒哒:kissing_heart:
    smallnews:@Dearmadman 哈哈,还在努力学习中,还望多多指教 :stuck_out_tongue:

本文标题:laravel 契约(Contracts)

本文链接:https://www.haomeiwen.com/subject/ttsaettx.html