Php ile Adapter Pattern’i Anlayalım

By | 10 May 2016

Gang of Four (GOF) yazılım mimarilerine göre genellikle sisteminizle uyuşmayan sınıfları, sisteminize adapte etmekte kullanılır. Bunlar genellikle bir toolkit veya bir 3.parti kütüphane olabilir. Bu yazıda adapter pattern nasıl çalışır ve Php ile anlatmaya çalışacağım. Doğrusu dil bağımsız, mantığı anlamaktır. Senaryomuz şu;

   ” Twitter API kullanılarak kendi uygulamamızdan Tweet attrırıyoruz. Kullandığımız API 1.0 ve Tweet attıran fonksiyonun adı da postTheTweet… Lakin Twitter yeni API versiyon çıkarıtyor ve 2.0 oluyor. Bu yeni versiyonda Tweet attıran fonksiyonun adı da değişiyor ve postToWall oluyor. Bu durumda kullandığımız her yerde tek tek fonksiyon ismini değiştirmemiz gerekiyor. İşte bunun yerine TwitterAdapter adında bir class oluşturuyoruz ve API’ı kendi uygulamamıza göre şekillendiriyoruz. Bir değişiklik veya buna benzer bir şey olduğunda biz Adapterı değiştiriyoruz.”

class Twitter {
public function postTheTweet($tweet){
//do something...
echo $tweet;
}

Üstteki kodları Twitter Apı’ı olarak düşünelim ve içinde Tweet atmamızı sağlayan postTheTweet adında fonksiyon var.
Şimdi de kendi uygulamamızı yazmaya başlayalım.Açıklamaları yorum satırlarıyla yaptım.

//içinde post fonksiyonu olan bir interface yazıyoruz.
interface ITwitterAdapter{
    public function post($tweet);
}

//burada Twitter Api ile bizim uygulamamız arasında olan adapter classı tanımlıyoruz.
class TwitterAdapter implements ITwitterAdapter{
    private $twitter;

    //buraya Twitter Api olan class'ı alıyoruz, bunun Twitter api olduğunu anlayabiliriz.
    public function __construct(Twitter $twitter){
        $this->twitter = $twitter;
    }

    //implemente ettiğimiz post fonksiyonu içine twitter api içindeki
    //postTheTweet fonksiyonunu kullanıyoruz.
    public function post($tweet){
        $this->twitter->postTheTweet($tweet);
    }
}

//senaryo gereği kullanıcıdan bir tweet alan fonksiyon.
function getTweetFromUser(){
    return 'My first tweet...';
}

//adapter classından instance alarak kullanıma hazır hale getiriyoruz.
$twitter = new TwitterAdapter(new Twitter());
//tweetimizi alıyoruz.
$tweet = getTweetFromUser();
//burada da tweetimizi post ediyoruz.
$twitter->post($tweet);

Uygulamamız da bu kadar. İşte burada Twitter Api içinde post eden fonksiyon olan postTheTweet adı değişti diyelim, yeni versiyonda adı postToWall oldu. Biz burada tek tek gidip fonksiyon adını değiştirmek yerine, Adapter class’ı içindeki implemente ettiğimiz fonksiyonun adını değiştiriyoruz ve kullandığımız her yere etki ediyor.Adapter Pattern mantığı bu şekilde çalışıyor, umarım anlatabilmişimdir.Günümüzde bilerek/bilmeyerek en çok kullanılan design pattern olarak geçiyor, Adapter pattern. Anlatacaklarım şimdilik bu kadar, bir dahaki yazımda görüşmek üzere… 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

*