Sobes.tech
Junior — Middle

Tudna példát mondani arra a legbonyolultabb tervezési mintára, amit gyakorlatban alkalmazott?

sobes.tech MI

Válasz az MI-től

Az egyik legbonyolultabb tervezési minta, amellyel PHP-ben dolgoztam, az "Állapot" (State) minta. Ez a minta lehetővé teszi egy objektum számára, hogy belső állapotától függően viselkedését megváltoztassa anélkül, hogy osztályát módosítaná.

Példa: volt egy projekt, amelyben rendelési rendszer volt, ahol a rendelés különböző állapotokban lehetett (új, fizetett, szállított, törölt). Sok feltételes utasítás helyett minden állapotot külön osztályként valósítottam meg, amely egy közös interfészt implementál, és dinamikusan váltogattam a rendelés állapotát.

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

class NewOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // logika a "fizetett" állapotba lépéshez
        $order->setState(new PaidOrderState());
    }
}

class PaidOrderState implements OrderState {
    public function proceed(OrderContext $order) {
        // logika a "szállított" állapotba lépéshez
        $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);
    }
}

// Használat
$order = new OrderContext(new NewOrderState());
$order->proceed(); // átáll a "fizetett" állapotra
$order->proceed(); // átáll a "szállított" állapotra

Ez a minta összetett, mert jó OOP-elveket és helyes osztálytervezést igényel az állapotok kezeléséhez, de jelentősen javítja a kód olvashatóságát és bővíthetőségét.