Sobes.tech
Junior — Middle

შეგიძლიათ გამოიტანოთ თქვენი პრაქტიკაში გამოყენებული ყველაზე რთული დიზაინის ნიმუში?

sobes.tech AI

პასუხი AI-სგან

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ə onun daxili vəziyyətinə əsasən davranışını dəyişdirməyə imkan verir, sinfini dəyişmədən.

Misal üçün: mənim layihəmdə sifariş sistemi var idi, burada sifariş müxtəlif vəziyyətlərdə ola bilərdi (yeni, ödənmiş, göndərilmiş, ləğv edilmiş). Çoxsaylı şərt operatorları 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);
    }
}

// Ишләтүү
$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, amma kodun oxunaqlığını və genişləndirilə bilməsini əhəmiyyətli dərəcədə yaxşılaşdırır.