Sobes.tech
Junior — Middle

Можете ли да дадете пример за най-сложния модел на проектиране, който сте прилагали на практика?

sobes.tech AI

Отговор от AI

Един от най-сложните шаблони за проектиране, с които съм работил в PHP, е шаблонът "Състояние" (State). Този шаблон позволява на обект да променя поведението си в зависимост от вътрешното си състояние, без да променя своя клас.

Пример за използване: имах проект с система за поръчки, където поръчката можеше да бъде в различни състояния (нова, платена, изпратена, анулирана). Вместо множество условни оператори, реализирах всяко състояние като отделен клас, който реализира общ интерфейс, и динамично сменях състоянието на поръчката.

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

class NewOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // логика за преминаване към "платена"
        $order->setState(new PaidOrderState());
    }
}

class PaidOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // логика за преминаване към "изпратена"
        $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(); // преминава към "платена"
$order->proceed(); // преминава към "изпратена"

Този шаблон е сложен, защото изисква добро разбиране на принципите на ООП и правилно проектиране на класове за управление на състоянията, но значително подобрява четливостта и разширяемостта на кода.