Command Pattern Nedir? PHP ile Uygulama
PHP
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
interface Command {
public function execute();
}
<?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";
}
}
<?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();
}
}
<?php
class Button {
private $command;
public function __construct(Command $command) {
$this->command = $command;
}
public function click() {
$this->command->execute();
}
}
<?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();
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