架构 ―― 契约.pdfVIP

  • 6
  • 0
  • 约4.53千字
  • 约 5页
  • 2017-08-22 发布于湖北
  • 举报
架构 ―― 契约

架构 ―― 契约 架构 —— 契约 (Contracts) 1、简介 Laravel的契约是指框架提供的⼀系列定义核⼼服务的接⼜。⽐ 如,Illuminate\Contracts\Queue\Queue契约定义了队列任务需要的⽅ 法,Illuminate\Contracts\Mail\Mailer契约定义了 送邮件所需要的⽅法。 每⼀个契约都有框架提供的相应实现。⽐如,Laravel提供了多个驱动的队列实现,邮 件实现则由 SwiftMailer驱动。 所有的Laravel契约都有其GitHub库,这为所有有效的契约提供了快速⼊门指南,同时 也可以作为独⽴、解耦的包被包开 者使⽤。 1.1 契约 (Contracts) VS 门⾯ (Facades) Laravel的门⾯为Laravel服务的使⽤提供了⼀个简便的⽅式——不再需要从服务容器中 类型提⽰和解析契约。然⽽,使⽤契约允许你为类定义明确的依赖,在⼤多数应⽤ 中,使⽤门⾯刚刚好,但是,如果你需要更多更多松耦合,那么契约⽆疑是合适的, 继续看下去 ! 2、为什么使⽤契约? 关于契约你可能存有疑问。为什么要全部使⽤这些契约接⼜?难道使⽤契约接⼜不是 更复杂?下⾯让我们从这两个⽅⾯来说明使⽤契约接⼜的原因:松耦合和简单。 2.1 松耦合 ⾸先,让我们看看⼀些缓存实现的紧密耦合代码: ?php namespace App\Orders; class Repository{ /** * 缓存 */ protected cache; /** * 创建⼀个新的Repository实例 * * @param \SomePackage\Cache\Memcached cache * @return void */ public function __construct(\SomePackage\Cache\Memcached cach { this-cache = cache; } /** * 通过ID获取订单 * * @param int id * @return Order */ public function find( id) { if ( this-cache-has( id)) { // } } } 在这个类中,代码和给定缓存实现紧密耦合,因为我们基于⼀个来⾃包的具体的缓存 类,如果报的API变了,那么相应的,我们的代码必须做修改。 类似的,如果我们想要替换底层的缓存技术 (Memcached )为别的技术实现 (Redis ),我们将再⼀次不得不修改我们的代码库。我们的代码库应该并不知道谁提 供的数据或者数据是怎么提供的。 我们可以基于⼀种简单的、与提供者⽆关的接⼜来优化我们的代码,从⽽替代上述那 种实现: ?php namespace App\Orders; use Illuminate\Contracts\Cache\Repository as Cache; class Repository{ /** * 创建⼀个新的Repository实例 * * @param Cache cache * @return void */ public function __construct(Cache cache) { this-cache = cache; } } 现在代码就不与任何特定提供者耦合,甚⾄与Laravel都是⽆关的。由于契约包不包含 任何实现和依赖,你可以轻松的为给定契约编写可选实现代码,你可以随意替换缓存 实现⽽不⽤去修改任何缓存消费代码。 2.2 简单 当所有Laravel服务都统⼀在简单接⼜中定义,很容易判断给定服务提供的功能。契约 可以充当框架特性的简明⽂档。 此外,基于简单接⼜,代码也更容易理解和维护。在⼀个庞⼤⽽复杂的类中,与其追 踪哪些⽅法时有效的,不如转向简单、⼲净的接⼜。 3、契约列表 下⾯是Laravel契约列表,以及其对应的“ 门⾯” 契约

文档评论(0)

1亿VIP精品文档

相关文档