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.