Facade Pattern (Cephe/Sadeleştirici Desen), karmaşık sistemleri basit bir arayüzle dış dünyaya sunmak için kullanılır.
Kullanıcıya birden fazla sınıfla uğraşmak yerine, tek bir sınıf üzerinden kolay erişim imkânı sağlar.
Neden Kullanılır?
-
Karmaşık alt sistemleri bir arayüz altında toplamak
-
Kullanıcıdan teknik detayları saklamak
-
Kodun okunabilirliğini ve bakımını artırmak
Nerelerde Kullanılır?
-
Laravel’deki
Facade
sınıfları (Cache::put()
,Mail::send()
,DB::table()
) -
API istemcileri (Google, Stripe, Mailchimp gibi servislerin facade sınıfları)
-
Karmaşık sınıf yapılarının soyutlanmasında (örneğin medya oynatıcı, sipariş işlemleri)
PHP ile Facade Pattern Örneği
Senaryo: Bir video oynatma sistemi. Arka planda birçok sınıf var ama kullanıcı sadece VideoPlayer
sınıfını kullanacak.
<?php
class FileLoader {
public function load($filename) {
echo "Dosya yüklendi: $filename\n";
}
}
class VideoDecoder {
public function decode($filename) {
echo "Video çözüldü: $filename\n";
}
}
class AudioManager {
public function enableAudio() {
echo "Ses açıldı\n";
}
}
<?php
class VideoPlayer {
protected $fileLoader;
protected $decoder;
protected $audio;
public function __construct() {
$this->fileLoader = new FileLoader();
$this->decoder = new VideoDecoder();
$this->audio = new AudioManager();
}
public function play($filename) {
$this->fileLoader->load($filename);
$this->decoder->decode($filename);
$this->audio->enableAudio();
echo "Video oynatılıyor: $filename\n";
}
}
<?php
$player = new VideoPlayer();
$player->play("film.mp4");
Dosya yüklendi: film.mp4
Video çözüldü: film.mp4
Ses açıldı
Video oynatılıyor: film.mp4
Avantajları
-
Karmaşık işlemleri kullanıcıdan gizler
-
Controller/Service tarafında kod karmaşasını azaltır
-
Daha sade, okunabilir ve sürdürülebilir yapı sağlar
-
Test yazarken kolayca izole edilebilir
Dezavantajları
-
Aşırı kullanım, sistemi gereksiz soyut hale getirebilir
-
Alt sistemlere erişimi tamamen gizlerse, bazı özel işlemler zorlaşabilir
Facade vs Diğer Desenler
Desen | Amaç |
---|---|
Strategy | Farklı algoritmaları değiştirmek |
Decorator | Dinamik olarak özellik eklemek |
Facade | Karmaşık yapıyı basitleştirip sarmalamak |
Özet
-
Facade Pattern, sistemdeki çoklu işlemleri sadeleştirerek tek bir arayüz ile sunmanı sağlar.
-
Laravel, bu deseni birçok yerde kullanır (örneğin:
DB::table()
,Log::info()
) -
Kodun okunabilirliğini artırır, bakım maliyetini azaltır.