• 27-11-2010, 19:22:15
    #1
    Tasarım desenleri(Design Patterns) yazılımcıların karşılaştığı sorunları minumuma indirmek için ortaya çıkmıştır. Creational(Kurucu), Structural(Yapısal), Behavioral(Davranışsal) olmak üzere 3 sınıfa ayrılır. Nesne tabanlı yazılımlar geliştirirken kodların birbirinden maksimum oranda bağımsız olması; yeniden kullanılabilir, kolayca geliştirilebilir ve değişiklik yapmamız gerektiğinde minumum kod yazarak müdahale edebileceğimiz yapıları ortaya çıkarmamızı sağlar. Böylece işgücünden ve zamandan maksimum faydayı elde ederiz.

    Bu yazıda kurucu tasarım desenlerinden biri olan factory üzerine bir örnek paylaşacağım. Factory Design Pattern sayesinde sınıfları tek bir arayüz üzerinden oluşturabiliyoruz. Lafı daha fazla uzatmadan bir örnek üzerinden konuyu pekiştirelim.

    "lib" isminde bir klasör oluşturalım. Bu klasör içinde "Mail.php" ve "Pagination.php" isminde 2 dosya oluşturalım. Bu dosyaların içinde, dosya ismi ile aynı olacak şekilde sınıflar tanımlayalım.

    Mail.php :

    Class Mail
    {
    	public function Send()
    	{
    		return '<p>Burası Mail Sınıfında Bulunan Send Fonksiyonu</p>';
    	}
    }
    Pagination.php :

    Class Pagination
    {
    	public function Initialize()
    	{
    		return '<p>Burası Pagination Sınıfında Bulunan Initialize Fonksiyonu</p>';
    	}
    }
    "Lib" klasörünün bizim sınıflarımızı topladığımız bir alan olduğunu düşünelim. Mesela bir framework kullanırken tüm sınıfların bir klasör altında toplandığını ve bizim bunları bir sınıf üzerinden uygulamaya dahil ettiğimizi görebiliyoruz. Bizde buna benzer bir yapı ortaya çıkarmaya çalışalım. "Lib" klasörünün dışında bir .php dosyası oluşturalım ve buraya aşağıdaki kodları yazalım.

    // "load" isminde bir sınıf tanımlıyorum.
    Class Load
    {
    
    	/*
    	 * "Library" isminde bir statik fonksiyon tanımlıyorum.
    	 * Bu fonksiyona sınıf ismini yolluyorum.
    	 * Sınıf ismiyle dosya ismi aynı olmalı. (Sınıf ismiyle dosya include ettiğim için)
    	 * Dosya varsa include edip sınıf objesini geriye döndüyorum.
    	 */
    	public static function Library($class)
    	{
    		try
    		{
    			$dir = 'Lib/' . $class . '.php';
    			
    			if(file_exists($dir))
    			{
    				include_once $dir;
    				return new $class;
    			}
    			else
    			{
    				throw new Exception('<p>Sınıf Bulunamadı</p>');
    			}
    		}
    		catch(Exception $e)
    		{
    			echo $e->getMessage();
    		}
    	}
    }
    
    // "Pagination" sınıfında bulunan "Initialize" fonksiyonunu çağırıyorum.
    echo Load::Library('Pagination')->Initialize();
    
    // "Mail" sınıfında bulunan "Send" fonksiyonunu çağırıyorum.
    echo Load::library('Mail')->Send();
    
    // Olmayan bir sınıf çağırarak hata oluşturalım.
    Load::library('Test');
    Kodlara açıklama satırları ekleyerek hangi satırda, hangi işlemi yaptığımızı açıklamaya çalıştım. Böylece her sınıfı uygulamada ayrı ayrı "new" operatörü ile tanımlamak yerine, "Load" sınıfında bulunan "Library" fonksiyonu aracılığıyla yüklemiş olduk.

    Kaynak : http://www.webteders.com/blog/detay/...sign-Pattern/7
  • 28-11-2010, 00:28:49
    #2
    Üyeliği durduruldu
    elinize sağlık
  • 28-11-2010, 01:28:08
    #3
    vay be r10 da profesyonele yakın bir kod görmek çok güzel.
  • 29-11-2010, 18:03:17
    #4
    BHCoder adlı üyeden alıntı: mesajı görüntüle
    elinize sağlık
    Efe4ka adlı üyeden alıntı: mesajı görüntüle
    vay be r10 da profesyonele yakın bir kod görmek çok güzel.
    Teşekkürler.
  • 29-11-2010, 21:51:54
    #5
    elinize saglik hocam
  • 30-11-2010, 14:14:12
    #6
    Üyeliği durduruldu
    Ellerinize saglik

    %100 oturup debug yapmadigimdan tam sonucu nedir bilmiyorum ama javada static kullaninca bir baska taleptede(request) ayni degisken gecerli oluyor(uygulama sunucusuna tanimlanmis oldugu icin uygulama sunucusunu tekrar baslatmadiginiz surece degisken degeri ile korunuyor). php de de durum boylemi? detayli test yapan yada konuyu arastiran oldu mu acaba
  • 30-11-2010, 14:34:38
    #7
    ofis soft eline sağlık. böyle şeyler görmek sevindirici. kendini çok geliştirdin valla tebrik ederim. 10 yıldır hala hala function yazıyorum
  • 30-11-2010, 14:40:34
    #8
    Üyeliği durduruldu
    sdemirkeser adlı üyeden alıntı: mesajı görüntüle
    Ellerinize saglik

    %100 oturup debug yapmadigimdan tam sonucu nedir bilmiyorum ama javada static kullaninca bir baska taleptede(request) ayni degisken gecerli oluyor(uygulama sunucusuna tanimlanmis oldugu icin uygulama sunucusunu tekrar baslatmadiginiz surece degisken degeri ile korunuyor). php de de durum boylemi? detayli test yapan yada konuyu arastiran oldu mu acaba
    evet talep gelene kadar değeri koruyor.