Developersland

Teknoloji ve Yazılım Blogu

  • Yazıtipi boyutunu arttır
  • Varsayılan yazıtipi boyutu
  • Yazıtipi boyutunu azaltır

Tasarım Şablonları - PHP

Tasarım ŞablonlarıTasarım şablonları yazılım mühendisliğinde sık sık karşılaşılan genel sorunları çözmeye yönelik oluşturulmuş genel çözümler olarak tanımlanabilir. Burada genel amaç her seferinde tekerliği baştan icat etmek yerine, daha önce aynı sorunla karşılaşmış insanların çözümlerini ele alarak daha hızlı ve daha sağlam şekilde sorunları çözmektir. Tasarım şablonlarının programlamaya uyarlanması fikri ilk kez 1987 yılında  Kent Beck ve Ward Cunningham tarafından OOPSLA (Object-Oriented Programming, Systems, Languages & Applications) konferansında ileri sürülmüştür. Tasarım şablonları "Design Patterns Elements of Reusable Object-Oriented Software" isimli kitabın yayınlanması ile bilgisayar bilimlerinde popüler olmaya başlamıştır. Bu kitap tasarım şablonları ile ilgili bir ansiklopedi niteliğindedir.

Tasarım şablonları sorunlara güvenilir çözümler sunmasının yanında kod okunurluluğu açısından da önemli avantaj sağlamaktadır. Kodu okuyan yazılımcı uygulanan tasarım şablonu ile ilgili bilgiye sahipse kodu anlaması çok daha kolay ve hızlı olacaktır. Birçok programlama dili nesne yönelimli programlama tekniğini benzer şekilde desteklese de programlama dilleri arasında bazı farklılıklar bulunmaktadır. Bu nedenle tasarım şablonları da dilden dilek değişiklikler gösterebilmektedir. Ben yazımızın başlığına uygun olarak PHP diline özel örnekleri inceleyeceğim. Şurada gerçekten güzel ve açıklayıcı php örnekleri bulabilirsiniz. Ayrıca IBM tarafından verilen örnekleri de gayet açıklayıcı ve faydalı buldum. Şimdi tek tek tasarım şablonlarını inceleyelim. Yeni tasarım şablonlarını öğrendikçe buraya eklemeye çalışacağım.


Tasarım Şablonu Kategorileri ve Tasarım Şablonları

Oluşturucu tasarım şablonları (Creational patterns) bunlar; Abstract Factory, Builder, Factory, Prototype, Singleton tasarım şablonları.

Yapısal tasarım şablonları(Structual patterns) bunlar; Adapter, Bridge, Facede, Decorator, Composite, Flyweight, Proxy tasarım şablonları.

Davranışsal tasarım şablonları(Behavioral patterns) bunlar; Command, Memento, Strategy, Iterator, State, Chain of Responsibility, Mediator, Observer, Template Method, Visitor tasarım şablonları.


Factory Tasarım Şablonu

Bu tasarım şablonu projemizdeki nesneleri esnek bir şekilde yaratmamıza yardımcı olacaktır. Factory tasarım şablonu nesneleri yaratırken işimize yarayacak metodlar içeren sınıftır. Böyle bir sınıfa ihtiyaç duymamızın sebebi nesneleri yaratma yöntemlerimizin esnek bir yapıya kavuşmasını sağlamaktır. Nesnelerimizi new diyerek yaratmakta olduğumuz bir projede daha sonra karar değiştirerek nesneleri veritabanından veya herhangi başka bir yerden yükleyerek oluşturabiliriz. Bu durumda tüm new diyerek nesne yarattığımız yerlerdeki kodları değiştirmek yerine direk factory sınıfı içerisindeki metodları değiştirmemiz bize esneklik kazandıracaktır. Ayrıca zamandan da ciddi şekilde tasarruf ederiz. kodları incelediğinizde daha iyi anlayacaksınız.

<?php
interface IUser
{
  function getName();
}

class User implements IUser
{
  public function __construct( $id ) { }

  public function getName()
  {
    return "Jack";
  }
}

class UserFactory
{
  public static function Create( $id )
  {
    return new User( $id );
  }
}

$uo = UserFactory::Create( 1 );
echo( $uo->getName()."\n" );
?>

Factory tasarım şablonunun diğer varyasyonu şu şekildedir.


<?php
interface IUser
{
  function getName();
}

class User implements IUser
{
  public static function Load( $id ) 
  {
        return new User( $id );
  }

  public static function Create( ) 
  {
        return new User( null );
  }

  public function __construct( $id ) { }

  public function getName()
  {
    return "Jack";
  }
}

$uo = User::Load( 1 );
echo( $uo->getName()."\n" );
?>

Fabrika tasarım şablonu Can Aydoğan tarafından gerçekten çok güzel bir örnek ile anlatılmış. Yazıyı okumanızı kesinlikle tavsiye ederim.

Fabrika tasarım şablonunun farklı bir amaçla kullanımına bir örnek daha vereyim:


public class Factory {

	public A create****() { // burada parametre girilebilir de.

		if (kosul1) { // koşul uyuyor ise

			return new X();

		} else if (kosul2) { // koşul uyyor ise

			return new Y();

		} else if (kosul3) { // koşul uyyor ise

			return new Z();

		} else { // hiç bir koşula uymuyor ise

			return new T();

		}

	}

}

php.net de yayınlanmış bir örneği inceleyecek olursak, Factory tasarım şablonunun çok az kod ile ne kadar esnek bir yapı kurabileceğine şahit oluruz.

<?php
class Database
{
    // The parameterized factory method
    public static function factory($type)
    {
        if (include_once ($type . '.php')) {
            $classname = $type;
            return new $classname;
        } else {
            throw new Exception ('Driver not found');
        }
    }
}
 
$mysql = Database::factory('mysql');
$mysql->db_connect();
 
$mssql = Database::factory('mssql');
$mssql->db_connect();
?>

Kaynaklar

http://www.ibm.com/developerworks/library/os-php-designptrns/

http://en.wikipedia.org/wiki/Software_design_pattern

http://www.canaydogan.net/2012/01/08/tasarim-sablonlari-design-patterns/

http://code.internet.com.tr/factory-method-design-pattern/

 

Yorum ekle


Güvenlik kodu
Yenile