Sobes.tech
Junior — Middle

Tətbiq etdiyiniz ən mürəkkəb dizayn nümunəsinin nümunəsini verə bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

PHP-də işlədiyim ən mürəkkəb dizayn nümunələrindən biri "Vəziyyət" (State) nümunəsidir. Bu nümunə obyektə daxili vəziyyətinə görə davranışını dəyişdirməyə imkan verir, sinfini dəyişmədən.

İstifadə nümunəsi: mənim bir sifariş sistemi olan layihəm var idi, burada sifariş müxtəlif vəziyyətlərdə ola bilərdi (yeni, ödənmiş, göndərilmiş, ləğv edilmiş). Bir çox şərt operatoru yerinə, hər vəziyyəti ümumi interfeys tətbiq edən ayrıca sinif kimi həyata keçirdim və sifarişin vəziyyətini dinamik olaraq dəyişdirdim.

interface OrderState {
    public function proceed(OrderContext $order);
}

class NewOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // "ödənmiş" vəziyyətinə keçid loqikası
        $order->setState(new PaidOrderState());
    }
}

class PaidOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // "göndərilmiş" vəziyyətinə keçid loqikası
        $order->setState(new ShippedOrderState());
    }
}

class OrderContext {
    private $state;

    public function __construct(OrderState $state) {
        $this->state = $state;
    }

    public function setState(OrderState $state) {
        $this->state = $state;
    }

    public function proceed() {
        $this->state->proceed($this);
    }
}

// İstifadə
$order = new OrderContext(new NewOrderState());
$order->proceed(); // "ödənmiş" vəziyyətə keçir
$order->proceed(); // "göndərilmiş" vəziyyətə keçir

Bu nümunə mürəkkəbdir, çünki OOP prinsiplərini yaxşı başa düşməyi və vəziyyətləri idarə etmək üçün düzgün sinif dizaynını tələb edir, lakin kodun oxunaqlığını və genişləndirilə bilməsini əhəmiyyətli dərəcədə yaxşılaşdırır.