Sobes.tech
Junior — Middle

Môžete uviesť príklad najzložitejšieho vzoru návrhu, ktorý ste použili v praxi?

sobes.tech AI

Odpoveď od AI

Jedným z najzložitejších vzorov návrhu, s ktorými som pracoval v PHP, je vzor "Stav" (State). Tento vzor umožňuje objektu meniť svoje správanie v závislosti od jeho vnútorného stavu, bez zmeny jeho triedy.

Príklad použitia: mal som projekt s objednávkovým systémom, kde objednávka mohla byť v rôznych stavoch (nová, zaplatená, odoslaná, zrušená). Namiesto viacerých podmienok if som každý stav implementoval ako samostatnú triedu, ktorá implementuje spoločné rozhranie, a dynamicky menil stav objednávky.

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

class NewOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // logika pre prechod do stavu "zaplatené"
        $order->setState(new PaidOrderState());
    }
}

class PaidOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // logika pre prechod do stavu "odoslané"
        $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);
    }
}

// Použitie
$order = new OrderContext(new NewOrderState());
$order->proceed(); // prechádza na "zaplatené"
$order->proceed(); // prechádza na "odoslané"

Tento vzor je zložitý, pretože vyžaduje dobré pochopenie princípov OOP a správny návrh tried na správu stavov, ale výrazne zlepšuje čitateľnosť a rozšíriteľnosť kódu.