08 / 07 / 2009

template method design pattern – php

ekleyen: Emre Çevik kategori: design patterns| php

Template method tasarım şablonu davranışsal (behavioral patterns) tasarım şablonları gurubunda yer alır. Template method ile bir algoritma için gerekli işlemler soyut olarak tanımlanır. Alt sınıflar algoritma için gerekli bir yada birden fazla işlemi kendi bünyelerinde implemente ederek, kullanılan algoritmanın kendi istekleri doğrultusunda çalışmasını sağlıyabilirler.

Mssql , Mysql, Oracle ile çalışabilecek bir sistem tasarladığımızı düşünelim. bunların ortak yanlarını abstract sınıfa toplayalım.

1. sürücüleri yükle
2. bağlantı kur
3. sorgu çalıştır
4. dataset oluştur

1
2
3
4
5
6
7
8
9
10
11
12
13
14
abstract class Veritabani  {
 
	final public function prepare()  {
		$this->driver();
		$this->baglanti();
		$this->query();
		$this->dataset();
	}
 
	abstract function driver();
	abstract function baglanti();
	abstract function query();
	abstract function dataset();
}

evet şimdi bundan bağımsız mysql ve mssql sınıflarımızı yazalım

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Mysql extends Veritabani  {
 
	public function driver()  {
		echo "mysql driver yuklendi<br/>";
	}
 
	public function baglanti()  {
		echo "baglanti kuruldu<br/>";
	}
 
	public function query()  {
		echo "sorgu yapıldı<br/>";
	}
 
	public function dataset()  {
		echo "dataset olusturuldu<br/>";
	}
}
 
class Mssql extends Veritabani  {
 
	public function driver()  {
		echo "mssql driver yuklendi<br/>";
	}
 
	public function baglanti()  {
		echo "baglanti kuruldu<br/>";
	}
 
	public function query()  {
		echo "sorgu yapıldı<br/>";
	}
 
	public function dataset()  {
		echo "dataset olusturuldu<br/>";
	}
}

simdi uygulamayı çalıştıracak kod bloğunu yazalım

1
2
$mysql = new Mysql();
$mysql->prepare();

ekran çıktısı

mysql driver yuklendi
baglanti kuruldu
sorgu yapıldı
dataset olusturuldu

dosya : template method design pattern
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • BlinkList
  • blogmarks
  • description
  • Furl
  • Ma.gnolia
  • NewsVine
  • Reddit
  • Technorati

benzer konular:

  1. proxy design pattern – php
  2. factory method design pattern – php
  3. command design pattern – php
  4. observer design pattern – php
  5. state design pattern – php
  6. strategy design pattern – php
  7. memento design pattern – php
  8. visitor design pattern – php
  9. chain of responsibility design pattern- php
  10. adapter design pattern – php


(1 votes, average: 5.00 out of 5)
Loading ... Loading ...

3 yorum

1 | ahmet sari

10 / 09 / 2009 - 15:46

Avatar

burda

$db = new Veritabani();
$db->prepare();

olsa daha iyi olurdu. hatta varsayilan driveri degistirmek istenirse;

$db = new Veritabani(”mysql”);
$db->prepare();

gibi olsa daha kullanisli olabilir.

bu yapi template metoda uyar mi?

2 | Emre Çevik

10 / 09 / 2009 - 20:48

Avatar

senin yapmak istediğin template methoduna uygun degil.
template method ile yapmak istediklerimizi öncelikle bir sınıf ile tasarlıyoruz. ve buna baglı alt sınıflarda bu yapılacak işlemleri yapıyoruz.

yani en az 2 adet sınıfımız olmalı. peki istediğin şeyi nasıl yapabiliriz.

- soyut bir sınıfımız olur ( ornekteki : abstract veritabani )
- buna baglı alt sınıflarımız olur ( ornekteki : mysql, mssql vs)
- bir tane veritabani secme sinifimiz olur ve secilen veritabanını direk calistirir. (bunun icinde factory method kullanabilirsin)

3 | can

19 / 09 / 2010 - 01:52

Avatar

class Database
{
private static $DB;
private $Driver;
protected $Connection;

public function CreateDatabase($config = array())
{
if (!isset(self::$DB)) {
self::$DB = new Databse($config);
}
return self::$DB;
}

public function __Construct($TObject)
{
$driver = $TObject['driver'];
if (include_once ($driver . ‘.php’)) {
$this->Driver = new $driver($TObject);

} else {
throw new Exception($driver . ‘ -sürücüsü yok’);
}

}

public function Connect()
{
if (!is_resource($this->Connection) and !is_object($this->Connection)) {
$this->Connection = $this->driver->connect();
if (!is_resource($this->Connection) and !is_object($this->Connection))
throw new Exception(”veri tabanına bağlanılamadı”);

}
}

public function ExecuteReader($TObject)
{
$this->Connect();
return $this->driver->ExecuteReader($TObject);

}

public function ExecuteScalar()
{
//
}

public function ExecuteDataSet()
{
//
}
}

abstract class Driver
{
abstract public function Connect();
abstract public function ExecuteReader($TObject);
abstract public function ExecyteScalar();
abstract public function ExecuteDataSet();
}

class Mysql extends Driver
{
private $DB;
private $Pass;
private $User;
private $Driver;
private $Database;
private $Host;
private $Port;

private $Connection;

public function __construct($TObject)
{
extract($TObject);
$this->DB = $DB;
$this->Driver = $Driver;
$this->Database = $Database;
$this->User = $User;
$this->Pass = $Pass;
$this->Host = $Host;
$this->Port = $Port;
return $this;
}

public function __sleep()
{
mysql_close($this->Connection);
}

public function __wakeup()
{
$this->Connection;
}

public function Connect()
{

$connect = $this->Driver . “_connect”;

$select_db = $this->Driver . “_select_db”;

$host = (empty($this->Port)) ? $$this->Host : $this->Host . ‘:’ . $this->Port;

if (!$this->Connection = @$connect($host, $this->User, $this->Pass, true))
{

throw new Exception(mysql_errno().mysql_error());

}

$this->DB = @$select_db($this->DB, $this->Connection);
if (!$this->DB)
{

throw new Exception(mysql_errno());

}

return $this->Connection;
}

public function ExecuteDataSet()
{

}

public function ExecuteReader($TObject)
{
$Reader = $this->Driver.”_query”;
$return = $Reader($TObject, $this->Connection);
return $return;
}

public function ExecyteScalar()
{

}

public function __destruct()
{
unset($this);
}
}

class Mssql extends Driver
{
private $DB;
private $Pass;
private $User;
private $Driver;

public function __construct($TObject)
{

}

public function __sleep()
{

}

public function __wakeup()
{

}

public function Connect()
{

}

public function ExecuteDataSet()
{

}

public function ExecuteReader($TObject)
{

}

public function ExecyteScalar()
{

}

public function __destruct()
{

}
}

class xPdo extends Driver
{
private $DB;
private $Pass;
private $User;
private $Driver;

public function __construct($TObject)
{

}

public function __sleep()
{

}

public function __wakeup()
{

}

public function Connect()
{

}

public function ExecuteDataSet()
{

}

public function ExecuteReader($TObject)
{

}

public function ExecyteScalar()
{

}

public function __destruct()
{

}
}
$Config["DB"] = “Deneme”;
$Config["Host"] = “127.0.0.1″;
$Config["Port"] = 3306;
$Config["User"] = “Root”;
$Config["Pass"] =”";
$Config["Driver"] = “Mysql”;

$DB = Database::CreateDatabase($Config);
echo “

";
var_dump ($DB->ExecuteReader("SELECT * FROM TEST ORDER BY ASC"));

yorum yaz

ne yapıyoruz

eğleniyoruz?

anket

design pattern yazılarını nasıl buldunuz?

sonuçlar

Loading ... Loading ...