Sözleşmeler (Contracts) - LARAVEL

Sözleşmeler (Contracts) - LARAVEL

Sözleşmeler

 

Giriş

Laravel'in Sözleşmeleri, çerçevenin sağladığı temel hizmetleri tanımlayan bir dizi arabirimdir. Örneğin, bir süre sözleşme, iş kuyruk için gerekli yöntemleri tanımlar sözleşme e-posta göndermek için gerekli yöntemleri tanımlar.Illuminate\Contracts\Queue\QueueIlluminate\Contracts\Mail\Mailer

Her sözleşmenin çerçeve tarafından sağlanan karşılık gelen bir uygulaması vardır. Örneğin, Laravel çeşitli sürücülerle bir sıra uygulaması ve SwiftMailer tarafından desteklenen bir posta uygulaması sağlar .

Laravel sözleşmelerinin tamamı kendi GitHub deposunda yaşıyor . Bu, mevcut tüm sözleşmelerin yanı sıra paket geliştiricileri tarafından kullanılabilecek tek bir ayrıştırılmış paket için hızlı bir referans noktası sağlar.

 

Sözleşmeler Vs. Cepheler

Laravel en cepheleri ve yardımcı işlevler-tipi ipucu ve servis kabının dışına sözleşmeleri çözmek gerek kalmadan laravel hizmetlerini kullanan basit bir yol sağlar. Çoğu durumda, her cephede eşdeğer bir sözleşme vardır.

Sınıfınızın yapıcısında bunları gerektirmenizi gerektirmeyen cephelerin aksine, sözleşmeler sınıflarınız için açık bağımlılıklar tanımlamanıza izin verir. Bazı geliştiriciler bağımlılıklarını bu şekilde tanımlamayı tercih ederler ve bu nedenle sözleşmeleri kullanmayı tercih ederken diğer geliştiriciler cephelerin rahatlığından yararlanırlar.

 

Cepheleri ya da sözleşmeleri tercih edip etmediğinize bakılmaksızın, çoğu başvurular güzel olacak. Bununla birlikte, bir paket oluşturuyorsanız, bir paket içeriğinde test etmenin daha kolay olacağından, sözleşme kullanmayı kesinlikle düşünmelisiniz.

 

Sözleşmeleri Ne Zaman Kullanalım

Başka yerlerde tartışıldığı gibi, sözleşmeleri veya cepheleri kullanma kararının büyük kısmı, kişisel zevkinize ve gelişim ekibinizin zevklerine kadar gelecektir. Her iki sözleşme ve cepheler de sağlam, iyi test edilmiş Laravel uygulamaları oluşturmak için kullanılabilir. Sınıfınızın sorumluluklarını odaklı tuttuğunuz sürece, sözleşmeleri ve cepheleri kullanma arasında çok az pratik fark edeceksiniz.

Bununla birlikte, sözleşmelerle ilgili olarak halen birkaç sorunuz olabilir. Örneğin, arabirimleri neden kullanmalıyım? Arabirimleri daha karışık kullanmıyor mu? Arayüzleri aşağıdaki başlıklar altında kullanmanın nedenlerini değerlendireceğiz: gevşek bağlantı ve basitlik.

 

Gevşek Bağlama

Öncelikle, bir önbellek uygulamasına sıkı sıkıya bağlı olan bazı kodları gözden geçirelim. Aşağıdakileri göz önünde bulundur:

<?php

namespace App\Orders;

class Repository
{
    /**
     * The cache instance.
     */
    protected $cache;

    /**
     * Create a new repository instance.
     *
     * @param  \SomePackage\Cache\Memcached  $cache
     * @return void
     */
    public function __construct(\SomePackage\Cache\Memcached $cache)
    {
        $this->cache = $cache;
    }

    /**
     * Retrieve an Order by ID.
     *
     * @param  int  $id
     * @return Order
     */
    public function find($id)
    {
        if ($this->cache->has($id))    {
            //
        }
    }
}

Bu sınıfta, kod belirli bir önbellek uygulamasına sıkıca bağlıdır. Bir paket satıcısından somut bir Önbellek sınıfına bağlı olduğumuz için sıkı bir şekilde bağlanmıştır. Bu paketin API'si değişirse, kodumuzun da değişmesi gerekir.

Aynı şekilde, alttaki önbellek teknolojimizi (Memcached) başka bir teknoloji (Redis) ile değiştirmek istiyorsanız, tekrar depomuzu değiştirmek zorunda kalacağız. Depomuzun, kimlerin veri sağladığı veya verdikleri konusunda çok fazla bilgiye sahip olmaması gerekir.

Bu yaklaşım yerine, basit, satıcı agnostik arabirimine bağlı olarak kodumuzu geliştirebiliriz:

<?php

namespace App\Orders;

use Illuminate\Contracts\Cache\Repository as Cache;

class Repository
{
    /**
     * The cache instance.
     */
    protected $cache;

    /**
     * Create a new repository instance.
     *
     * @param  Cache  $cache
     * @return void
     */
    public function __construct(Cache $cache)
    {
        $this->cache = $cache;
    }
}

Şimdi kod herhangi bir satıcıya, hatta Laravel'e bağlanmıyor. Sözleşmeler paketi hiçbir uygulama içermez ve bağımlılık içermediğinden, önbellek tüketen kodunuzu değiştirmeden önbellek uygulamanızı değiştirmenize izin veren herhangi bir sözleşmenin alternatif bir uygulaması kolayca yazabilirsiniz.

 

Basitlik

Laravel'in tüm hizmetleri basit arayüzlerde düzgün bir şekilde tanımlandığında belirli bir hizmetin sunduğu işlevselliği belirlemek çok kolaydır. Sözleşmeler, çerçevenin özelliklerine ilişkin kısa dokümantasyon görevi görür.

Buna ek olarak, basit arayüzlere bağımlı olduğunuzda, kodunuzun anlaşılması ve korunması daha kolaydır. Büyük, karmaşık bir sınıfın içinde hangi yöntemlerin bulunduğunu takip etmek yerine, basit, temiz bir arayüz arayabilirsiniz.

 

Sözleşmeler Nasıl Kullanılır?

Peki, nasıl bir sözleşmenin uygulanmasını alırsınız? Aslında oldukça basit.

Laravel'deki pek çok sınıf türü , denetleyiciler, olay dinleyicileri, ara katmanlar, sıraya alınan işler ve hatta rota Kapanışları da dahil olmak üzere servis konteyneri vasıtasıyla çözülür. Dolayısıyla, bir sözleşmenin uygulanması için, çözülmekte olan sınıfın yapıcısındaki arayüzü "tip-ipucuyla" belirtebilirsiniz.

Örneğin, bu olay dinleyicisine bir göz atın:

<?php

namespace App\Listeners;

use App\User;
use App\Events\OrderWasPlaced;
use Illuminate\Contracts\Redis\Database;

class CacheOrderInformation
{
    /**
     * The Redis database implementation.
     */
    protected $redis;

    /**
     * Create a new event handler instance.
     *
     * @param  Database  $redis
     * @return void
     */
    public function __construct(Database $redis)
    {
        $this->redis = $redis;
    }

    /**
     * Handle the event.
     *
     * @param  OrderWasPlaced  $event
     * @return void
     */
    public function handle(OrderWasPlaced $event)
    {
        //
    }
}

Olay dinleyicisi çözüldüğünde, hizmet kapsayıcısı sınıf yapıcısının ipuçlarını okur ve uygun değeri enjekte eder. Kontrol, servis kabında şeyler kaydetme hakkında daha fazla bilgi için belgelerine .

Henüz Yorum Yapılmamış, İlk Yorumu Siz Yapın

Yorum Yollayın