Fluent Interface Design Pattern ve PHP

Standard

Bu makalemde size fluent interface design pattern yani Akıcı arayüz tasarım deseni nedir ne işe yarar ondan bahsedeceğim.

Aslında akıcı arayüz yerine akıcı arabirim de diyebiliriz; Fluent Interface yani Türkçe meali iki kapıya da çıkar.. Aynı şey zaten 🙂

Peki nedir bu Fluent Interface?
Eric Evans ve Martin Fowler tarafından geliştirilmiş Fluent Interface bir OOP design pattern. Yani özetlemek gerekirse Fluent Interface de metodlar zincirleme olarak da kullanılabilir..

Öncelikle OOP bilginiz yoksa daha önce yazmış olduğum makalelere göz gezdirip sonra bu makaleye devam etmenizi öneririm.

Aslına bakıldığı zamanmetodlar içersine eklenmiş return $this; olarak görülebilir bu işlem. Ama sonucunda kullanımında bize sağladığı fayda metodların birlikte çağırılabilmesidir örneğin: $this->methodA()->methodB()->methodC();

Şimdi dilerseniz basit bi hello world yapalım ve pekişsin;

<?php
class FluentMerhabaDunya 
{
	public function merhaba() 
	{
		echo "Merhaba ";
		return $this;
	}

	public function dunya() 
	{
		echo "Dünya";
		return $this;
	}
}

$fluent = new FluentMerhabaDunya();
$fluent->merhaba()->dunya();
?>

Çıktı tabiki Merhaba Dünya 🙂

Görüldüğü gibi gayet açık aslında, bu şekilde dilerseniz veritabanı sınıfı yazıp $db->query(“Select…”)->filter(“id=10”)->limit(3); şeklinde kullanım geliştirebilirsiniz tabi bu sadece bir fikir, örnek olması açısından..

En iyi farkı şimdi before after yaparak göstereceğim size..

Eskiden Olsa Nasıl Yapardık?

<?php
class Developer
{
	protected $_name;
	protected $_street;
	protected $_city;
	protected $_country;

	public function setName($name)
	{
		$this->_name = $name;
	}

	public function setStreetAddress($street)
	{
		$this->_street = $street;
	}

	public function setCity($city)
	{
		$this->_city = $city;
	}

	public function setCountry($country)
	{
		$this->_country = $country;
	}

	public function save()
	{
		echo "Developer Bilgileri Kaydedildi..";
	}
}
?>

sınıfımızı ve metodumuzu tanımladık ve kullanırken şu şekilde kullanıyorduk;

<?php
$developer = new Developer; 
$developer->setName('Onur Canalp');
$developer->setStreetAddress('Yüksel Caddesi');
$developer->setCity('Ankara');
$developer->setCountry('Türkiye');
$developer->save();
?>

Şimdi bu sınıfımızı fluent interface e göre düzenleyip tekrar yazalım;

<?php
class Developer
{
	protected $_name;
	protected $_street;
	protected $_city;
	protected $_country;

	public function setName($name)
	{
		$this->_name = $name;
		return $this;
	}

	public function setStreetAddress($street)
	{
		$this->_street = $street;
		return $this;
	}

	public function setCity($city)
	{
		$this->_city = $city;
		return $this;
	}

	public function setCountry($country)
	{
		$this->_country = $country;
		return $this;
	}

	public function save()
	{
		echo "Developer Bilgileri Kaydedildi..";
	}
}
?>

Şimdi direk kullanımına geçmek gerekirse;

<?php
$developer = new Developer;
$developer->setName('Onur Canalp')->setStreetAddress('Yüksel Caddesi')->setCity('Ankara')->setCountry('Türkiye')->save();
?>

Ve makalenin sonlarına gelirken son olarak Martin Fowler ‘in kendi dilinden Fluent Interface i sizlere aktarmak istiyorum… Belki okumak istersiniz 🙂

Umarım açıklayıcı olabilmişimdir, herkese iyi çalışmalar dilerim..

2 thoughts on “Fluent Interface Design Pattern ve PHP

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir