Command Pattern Nedir? PHP ile Uygulama

 


Command Pattern (Komut Tasarım Deseni), bir isteği (komutu) nesne olarak paketlemenizi sağlar. Yani, bir işlemi gerçekleştirmek isteyen kod ile bu işlemi uygulayan kodu birbirinden ayırır.

Bu desenle; işlemleri sıraya alabilir, geri alabilir (undo), kaydedebilir ya da farklı zamanlarda çalıştırmak üzere bekletebilirsiniz.

“Ne yapılacağını bir nesneye dönüştür” felsefesiyle çalışır.


Ne İçin Kullanılır?

  • Komutları sıraya koymak

  • Geri alınabilir (undo/redo) sistemler yapmak

  • İstekleri loglamak ya da daha sonra çalıştırmak

  • Arayüz veya buton işlemlerini soyutlamak

  • Görevleri (task/job) planlamak


Gerçek Hayatta Nerede Kullanılır?

  • Undo/Redo sistemleri (örneğin Photoshop, Word)

  • Queue sistemleri (örn. Laravel Job/Queue)

  • Makro komutlar (birden fazla işlemi zincirlemek)

  • Uzaktan kumanda uygulamaları

  • Menü ya da buton tıklamaları



PHP ile Command Pattern Uygulaması

Senaryo: Bir metin düzenleyicimiz var. Kullanıcı "Kopyala", "Yapıştır" ve "Geri Al" işlemleri yapabiliyor.

1. Komut (interface)

<?php
interface Command {
public function execute();
}


2. Alıcı (Receiver) Sınıf

<?php
class Editor {
public function copy() {
echo "Metin kopyalandı.\n";
}

public function paste() {
echo "Metin yapıştırıldı.\n";
}

public function undo() {
echo "Son işlem geri alındı.\n";
}
}


3. Komut Sınıfları

<?php
class CopyCommand implements Command {
private $editor;

public function __construct(Editor $editor) {
$this->editor = $editor;
}

public function execute() {
$this->editor->copy();
}
}

class PasteCommand implements Command {
private $editor;

public function __construct(Editor $editor) {
$this->editor = $editor;
}

public function execute() {
$this->editor->paste();
}
}

class UndoCommand implements Command {
private $editor;

public function __construct(Editor $editor) {
$this->editor = $editor;
}

public function execute() {
$this->editor->undo();
}
}


4. Komutları Yöneten (Invoker) Sınıf

<?php
class Button {
private $command;

public function __construct(Command $command) {
$this->command = $command;
}

public function click() {
$this->command->execute();
}
}



Kullanım:

<?php
$editor = new Editor();

$copyButton = new Button(new CopyCommand($editor));
$pasteButton = new Button(new PasteCommand($editor));
$undoButton = new Button(new UndoCommand($editor));

$copyButton->click();
$pasteButton->click();
$undoButton->click();


Çıktı:

Metin kopyalandı.
Metin yapıştırıldı.
Son işlem geri alındı.



Avantajları

  • Komutlar arasında gevşek bağlılık sağlar (loose coupling)

  • Geri alma, kaydetme, kuyruklama yapılabilir

  • Yeni komutlar kolayca eklenebilir

  • Arayüzler ile kodun mantığını birbirinden ayırır


Ekstra Bilgi:

Command desenini Laravel gibi modern framework'lerde şu alanlarda görebilirsin:

  • php artisan make:command

  • dispatch(new SendEmailJob())

  • Form işlemleri ve Button Click Event handler sistemleri














 

Related Posts

Command Pattern Nedir? PHP ile Uygulama
4/ 5
Oleh