PHP – Tasarım Desenleri

Carissa

Administrator
Katılım
2 Mar 2015
Konular
59,189
Mesajlar
88,450
Çözüm
109
Online süresi
4mo 16d
Reaksiyon Skoru
14,294
Altın Konu
2,398
TM Yaşı
11 Yıl 3 Ay 14 Gün
Başarım Puanı
1,051
MmoLira
695,301
DevLira
234
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Yazılım mühendisliği teorisinde, "Tasarım desenleri" terimi genellikle yaygın olarak ortaya çıkan sorunları ele almak için uygulamalar geliştirmek için bir şablon olarak kullanılabilen yeniden kullanılabilir bir çözümü ifade eder. Yazılım çözümleri geliştirirken yazılım tasarım desenlerini resmileştirilmiş en iyi uygulamalar olarak düşünebilirsiniz.

Standart tasarım kalıplarının çoğu PHP'de uygulama geliştirmede çok etkili bir şekilde uygulanabilir. Bu bölümde, popüler tasarım kalıplarından bazılarının PHP uygulamaları geliştirmede nasıl uygulanacağını öğreneceğiz.

Tekil Desen

Tekil tasarım deseni, belirli bir sınıfın nesnesinin örneklemesini yalnızca bir örnekle sınırlamak istediğinizde kullanışlıdır. "Tekil desen" adı, Matematikteki tekil kavramından gelir. Tekil desen, uygulama boyunca yalnızca bir örneğin olmasını ve buna küresel erişim sağlanmasını garanti eder.

Singleton deseninin tipik uygulaması, bir uygulamanın yaşam süresi boyunca bir kez oluşturulması gereken bir veritabanı bağlantı nesnesinin oluşturulmasıdır.

Örnek

Aşağıdaki kodda, DataBaseConnector sınıfı yalnızca bir kez örneklendirilebilir, aksi takdirde yinelenen nesneye izin vermeyen bir mesaj verilir.

PHP:
<?php
   class DataBaseConnector {               
      private static $obj;               
      private final function __construct() {
         echo __CLASS__ . " object created for first time ". PHP_EOL;
      }
      public static function getConnect() {
         if (!isset(self::$obj)) {
            self::$obj = new DataBaseConnector();
            return self::$obj;
         } else {
            echo "connection object could not be created again" . PHP_EOL;
         }
      }
   }

   $obj1 = DataBaseConnector::getConnect();
   $obj2 = DataBaseConnector::getConnect();

   var_dump($obj1 == $obj2);
?>

Aşağıdaki çıktıyı üretecektir:

DataBaseConnector object created for first time
connection object could not be created again
bool(false)


Fabrika Deseni

Bu en yaygın kullanılan tasarım desenlerinden biridir. Bu desende, istenen sınıfın nesnesini doğrudan bildirmezsiniz, ancak statik yöntemi gerekli nesneyi oluşturan başka bir sınıf sağlanır.

Örnek

Aşağıdaki örnek fabrika tasarım deseninin nasıl çalıştığını göstermektedir:

PHP:
<?php
   class Automobile {
      private $bikeMake;
      private $bikeModel;

      public function __construct($make, $model) {
         $this->bikeMake = $make;
         $this->bikeModel = $model;
      }

      public function getMakeAndModel() {
         return $this->bikeMake . ' ' . $this->bikeModel;
      }
   }

   class AutomobileFactory {
      public static function create($make, $model) {
         return new Automobile($make, $model);
      }
   }

   $pulsar = AutomobileFactory::create('ktm', 'Pulsar');
   print_r($pulsar->getMakeAndModel());
?>

Aşağıdaki çıktıyı üretecektir:


Strateji Deseni

Strateji kalıbı, belirli algoritma ailelerini kapsüllediğiniz ve istemci sınıfının belirli bir algoritmayı örneklemesinden sorumlu olmasına izin verdiğiniz bir yaklaşımı önerir. Kalıbı uygulayan sınıfın gerçek uygulama hakkında bilgisi yoktur.

Örnek

İşte strateji deseninin kullanımını gösteren bir kod. case() metodu iki farklı sınıf tarafından farklı şekilde uygulanan bir arayüzümüz var. testdata sınıfının nesnesi, kendi process() metodu aracılığıyla ilgili case() metotlarını dolaylı olarak çağırır.

PHP:
<?php
   interface example {
      public function case($str);
   }

   class ucase implements example {
      public function case($str) {
         return strtoupper($str);
      }
   }

   class lcase implements example {
      public function case($str) {
         return strtolower($str);
      }
   }

   class testdata {
      private $data;

      public function __construct($input) {
         $this->data = $input;
      }
      public function process(example $type) {
         return $this->data = $type->case($this->data);
      }
   }
   $str = "hello";
   $obj = new testdata($str);
   echo $obj->process(new ucase) . PHP_EOL; 
   $str = "HELLO";
   echo $obj->process(new lcase);
?>

Aşağıdaki çıktıyı üretecektir:



MVC Tasarım Deseni

Model, View ve Controller'ın kısaltması olan MVC, çok popüler bir yazılım mimarisi desenidir. Laravel, Symfony vb. gibi PHP ağlarının çoğu MVC mimarisini uygular.

Bir uygulamada her katmanın rolünün ayrılması şu şekildedir:

  • Model − Veri yapısını ifade eder. Bu durumda, veritabanı.
  • Görünüm − Kullanıcı arayüzünü ifade eder: HTML ve CSS.
  • Denetleyici − İşlemi yapan "aracı". Görünümden girdiyi kabul eder ve modelle çalışır. Kendi kendini açıklayan, PHP betikleri ve kütüphaneleri.
View, GUI olarak, Model arka uç olarak ve Control ise bir adaptör olarak görev yapar. Burada, üç parça birbirine bağlıdır. Verileri birbirlerine iletecek ve birbirlerine erişeceklerdir.

Örnek

Aşağıdaki örnekte MVC tasarım desenini saf PHP, JavaScript ve HTML'de uygulayalım:

Uygulamanın sunum katmanı, bir HTML formu oluşturan view.php'dir. Kullanıcı, verileri bir denetleyici betiğine gönderir. Denetleyici tarafından döndürülen sonuç, biraz JavaScript ile web sayfasında oluşturulur.

view.php


Denetleyici betiği model.php gerektirir ve veritabanı nesnesini kullanır, veriyi veritabanından almak için select metodunu çağırır. Sonuç, görünüm sayfasında erişilebilmesi için geçerli oturumda saklanır.

controller.php


PHP:
<?php
   session_start();
   require "model.php";
   $results = $_DB->select(
      "SELECT * FROM `users` WHERE `name` LIKE ?",
      ["%{$_POST["search"]}%"]
   );
   $_SESSION['search'] = $_POST['search'];
   $_SESSION['result'] = $results;
   Header("Location: view.php", true);
?>

Uygulamanın model katmanı "model.php" dosyasında kodlanmıştır. PDO eklentisini kullanarak mydb isimli mysql veritabanına bağlantı kurar.

model.php

PHP:
<?php
   class DB {
      public $error = "";
      private $pdo = null;
      private $stmt = null;
      var $dsn="localhost"; 
      var $dbName="myDB"; 
      var $username="root";       
      var $password="";
      function __construct () {
         $this->pdo = new PDO("mysql:host=$this->dsn;dbname=$this->
            dbName",$this->username,$this->password);
      }
      function __destruct () {
         if ($this->stmt!==null) { $this->stmt = null; }
         if ($this->pdo!==null) { $this->pdo = null; }
      }
      function select ($sql, $data=null) {
         $this->stmt = $this->pdo->prepare($sql);
         $this->stmt->execute($data);
         return $this->stmt->fetchAll();
      }
   }
   $_DB = new DB();
?>

Arka uç mydb veritabanında ID ve NAME alanlarına sahip bir kullanıcılar tablosu bulunmalıdır.


Tarayıcıda " " adresini ziyaret ederek uygulamayı başlatın. Gerekli harflere sahip isimlere karşılık gelen bir arama terimi girin.

 
Paylaşım için teşekkürler.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)