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.