Design Pattern yani tasarım desenleri nedir? PHP ile ele alalım..

Standard

Çoğu insanın duyduğu bir kavram olsa gerek design pattern ler yani tasarım desenleri veya wiki deki tabiri ile tasarım örüntüleri.. Bana kalırsa da tasarım şablonu 🙂

Her neyse işte, bu makalede tasarım desenlerini ve basit bir kaç kullanımını ele alacağız..

Nereden Çıktı Bu Tasarım Deseni?

  • Zamanla karşılaşılmış problemlerin çözümü ortaya çıkmışlardır.

Bize faydası nedir?

  • Bizim yaşadığımız sorunu başkasıda yaşamıştır ve bizim amerikayı baştan keşfetmemizi önler. Hali ile zamandan kazanabiliriz.

Tasarım desenlerini 3 ana başlıkta değerlendirilebiliriz;

  • Oluşturucu tasarım desenleri (creational patterns)
    Yazılım nesnelerinin (ya da başka bir değişle sınıf örnekleri – class instances) nasıl yaratılacağı hakkında öneriler sunar
  • Yapısal tasarım desenler (structual patterns)
    Sınıfların ve nesnelerin bileştirilerek daha geniş yazılım yapılarının kurulmasına olanak sağlayan öneriler sunar.
  • Davranışsal tasarım desenleri (behavioral patterns)
    İşlevsel sorumlulukların nesneler arasında nasıl atanacağı ve yazılımın gerektirdiği çözüm yöntemlerinin nesnelerce nasıl kullanılacağı hakkında öneriler sunar

Bunlarında kendi altlarında alt başlıkları mevcut onlarıda sadece başlık olarak belirtmek gerekirse;

Oluşturucu tasarım desenleri

  • Abstract Factory (soyut fabrika)
  • Builder (inşaatçi)
  • Factory Method (fabrika)
  • Prototype  (prototip)
  • Singleton (yanlızlık)

Yapısal tasarım desenleri

  • Adapter
  • Bridge (köprü)
  • Facade (cephe)
  • Decorator (dekotatör)
  • Composite (kompozit)
  • Flyweight (sinek siklet)
  • Proxy (vekil)

Davranışsal tasarım desenleri

  • Command (komut)
  • Memento (hatıra)
  • Strategy (strateji)
  • Iterator (tekrarlayıcı)
  • State (durum)
  • Chain Of Responsibility (sorumluluk zinciri)
  • Mediator (aracı)
  • Observer (gözlemci)
  • Template Method (şablon metot)
  • Visitor (ziyaretçi)

Tasarım Desenleri hakkında genel bilgi ve Her maddenin hakkında bilgiye wikipedia üzerinde yazılmış makaleden ulaşabilirsiniz. (http://tr.wikipedia.org/wiki/Tasarım_örüntüleri)

Ben size Singleton lie ilgili bir örnek vermek istiyorum. Zamanla fırsat bulup inceledikçe diğer desenlere de değinme niyetim var tabi.. Singleton, temel olarak bir kere oluşturulup her yerden erişebilmemizi hedefler. Örneğin veritabanı için bir kere bağlantı kurup her yerden erişmek istersiniz. Aksi halde her seferinde oluşturmak gereksiz yük getirecektir..

Dikkat edilmesi gereken husus illaki static tanımlı erişim metodu olmak zorundadır. Static olma zorunluluğunu ise ramde tutulması içindir.

Mysqli genel kullanımı hakkında buraya tıklayarak ulaşabilirsiniz.
Mysqli bağlantısı için bir singleton örneği ile makalemi sonlandırmak isterim, fikir olması açısından;

class Database {
	private $connection;
	private static $instance; //Buraya Dikkat
	private $host = "localhost";
	private $username = "onurcanalp";
	private $password = "12345";
	private $database = "Deneme";

	public static function getInstance() {
		if(!self::$instance) { // instance tanımlı mı bakalım, değilse oluşturalım
			self::$instance = new self();
		}
		return self::$instance;
	}

	private function __construct() {
		$this->connection = new mysqli($this->host, $this->username, $this->password, $this->database);

		if(mysqli_connect_error()) {
			trigger_error("MySQLi: " . mysql_connect_error(),E_USER_ERROR);
		}
	}

	// Bağlantının klonlanabilmesini önlemek için boş döndürüyoruz
	private function __clone() { }

	// mysqli bağlantısını döndürelim
	public function getConnection() {
		return $this->connection;
	}
}

Bu sayede her seferinde new ile sınıfı baştan oluşturmak yerine aşağıdaki şekilde bağlantımıza erişebilirsiniz

$db = Database::getInstance();
$mysqli = $db->getConnection();

Geniş zamanda inşallah diğer tasarım desenlerini de ele almak için zamanım olur..

Herkese iyi çalışmalar..

Print Friendly, PDF & Email
Facebooktwittergoogle_pluslinkedin

One thought on “Design Pattern yani tasarım desenleri nedir? PHP ile ele alalım..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir