Sobes.tech
Middle

Uygulamanızda tasarım desenleri kullanıyor musunuz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Evet, kullanıyorum. Bunlar, tipik görevleri çözmeye, kodun yapısını geliştirmeye, okunabilirliğini ve sürdürülebilirliğini artırmaya yardımcı olur.

Uyguladığım temel desenler:

  • Yaratıcı desenler:
    • Singleton: Sınıfı tek bir örnekle sınırlandırmak için.
    • Factory Method: Belirli sınıfı belirtmeden nesneler oluşturmak için.
    • Abstract Factory: İlişkili nesne aileleri oluşturmak için.
    • Builder: Karmaşık nesneleri adım adım oluşturmak için.
  • Yapısal desenler:
    • Adapter: Arayüz uyumluluğu için.
    • Decorator: Bir nesneye dinamik olarak davranış eklemek için.
    • Facade: Bir alt sistemine tek bir arayüz sağlamak için.
    • Proxy: Bir nesneye erişimi kontrol etmek için.
  • Davranışsal desenler:
    • Observer: Abonelik ve bildirim mekanizması uygulamak için.
    • Strategy: Algoritma ailesini tanımlamak ve bunları değiştirilebilir yapmak için.
    • Template Method: Temel sınıfta algoritmanın iskeletini tanımlamak için.
    • Command: Bir isteği nesne olarak kapsüllemek için.

Örneğin, genellikle Singleton'u veritabanı ile çalışmak için kullanıyorum:

<?php
// Database.php
class Database {
    private static ?Database $instance = null;
    private ?PDO $pdo = null;

    private function __construct() {
        // Veritabanı bağlantı yapılandırması
        $dsn = 'mysql:host=localhost;dbname=mydatabase;charset=utf8';
        $user = 'myuser';
        $password = 'mypassword';

        try {
            $this->pdo = new PDO($dsn, $user, $password);
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (\PDOException $e) {
            throw new \PDOException($e->getMessage(), (int)$e->getCode());
        }
    }

    public static function getInstance(): self {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function getConnection(): ?PDO {
        return $this->pdo;
    }

    private function __clone() {}
    public function __wakeup() {}
}

Ve giriş verilerine bağlı olarak farklı mesaj veya nesne türleri oluşturmak için Factory Method'u kullanabilirim:

<?php
// MessageFactory.php
interface Message {
    public function send(): string;
}

class EmailMessage implements Message {
    public function send(): string {
        return "E-posta gönderiliyor...";
    }
}

class SmsMessage implements Message {
    public function send(): string {
        return "SMS gönderiliyor...";
    }
}

class MessageFactory {
    public function createMessage(string $type): Message {
        switch ($type) {
            case 'email':
                return new EmailMessage();
            case 'sms':
                return new SmsMessage();
            default:
                throw new InvalidArgumentException("Bilinmeyen mesaj türü.");
        }
    }
}

// Kullanım:
// $factory = new MessageFactory();
// $email = $factory->createMessage('email');
// echo $email->send(); // "E-posta gönderiliyor..." gösterir

Desen seçimi, belirli göreve ve bağlama bağlıdır. Önemli olan, onları sadece kullanmak için değil, gerçekten ihtiyaç duyulduğunda kullanmaktır, böylece kodu geliştirmeye yardımcı olurlar.