romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

PHP – Tasarım Desenleri

Carissa

Administrator
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye Turkmmo Discord Nitro Booster
Admin
VIP Üye
Katılım
2 Mar 2015
Konular
59,189
Mesajlar
88,439
Çözüm
109
Online süresi
4mo 16d
Reaksiyon Skoru
14,280
Altın Konu
2,398
TM Yaşı
11 Yıl 3 Ay 6 Gün
Başarım Puanı
1,051
MmoLira
695,092
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

<!DOCTYPE html>
<html>
<head>
<title>View (User Interface)</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<form id="mysearch" action="controller.php" method="POST">
<input type="text" id = "nm" name="search" required>
<input type="submit" value="Search">
</form>
<div id="results"></div>
<script>
let results = document.getElementById("results");
results.innerHTML = "";
</script>
<?php
session_start();
if (isset($_SESSION['result'])) {
$arr=$_SESSION['result'];

foreach ($arr as $obj) {?>
<script>
results.innerHTML += "<div><?php echo $obj['id'] . "-" .
$obj['name'] . "</div>"; ?>";
</script>
<?php
}
}
?>
</body>
</html>

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.

-- Table structure for table `users`
--
CREATE TABLE `users` (
`id` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Dumping data for table `users`
--
INSERT INTO `users` (`id`, `name`) VALUES
(21, 'Ahmad Shaikh'),
(24, 'Akshay Wadkar'),
(26, 'Bridget Wooten'),
(10, 'Coby Kelleigh'),
(20, 'Dashan Shah'),
(12, 'Elizabeth Taylor'),
(41, 'Issac Newton'),
(34, 'Julia Roberts'),
(31, 'Junior Mahmood'),
(32, 'Kailas Bende'),
(47, 'Karan Sharma'),
(16, 'Kenneth Sanders'),
(28, 'Kirstie Thomas'),
(33, 'Lawrence Murphy'),
(14, 'Leah Shan'),
(51, 'Marcus Best'),
(29, 'Maya Pande'),
(50, 'Nathaniel Khan'),
(6, 'Richard Breann'),
(54, 'Rowan Avalos'),
(3, 'Rusty Terry'),
(37, 'Sacha Gross'),
(27, 'Sally Castillo'),
(11, 'Sarah Sanders'),
(18, 'Seth Sonnel'),
(38, 'Shannon Peterson'),
(25, 'Shayan Clements'),
(49, 'Shoaib Vickers'),
(43, 'Simran Kaur'),
(35, 'Sulaiman Gilmour'),
(44, 'Taran Morin'),
(48, 'Taran Morin'),
(22, 'Thelma Kim'),
(8, 'Tillie Sharalyn'),
(36, 'Virgil Collier');

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

php_design_patterns.jpg
 
Paylaşım için teşekkürler. :)
 

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

Geri
Üst