Junior — Middle
Kas saaksite anda näite kõige keerulisemast disainimustrist, mida olete praktikas rakendanud?
sobes.tech AI
Vastus AI-lt
Üks keerulisemaidest disainimustest, millega mul on pidanud PHP-s töötama, on "Seisundi" (State) muster. See muster võimaldab objektil muuta oma käitumist sõltuvalt sisemisest seisundist, muutmata selle klassi.
Näide: mul oli projekt tellimissüsteemiga, kus tellimus võis olla erinevates seisundites (uus, makstud, saadetud, tühistatud). Selle asemel, et kasutada palju tingimuslauseid, rakendasin iga seisundi eraldi klassina, mis rakendab ühist liidest, ning vahetasin tellimuse seisundit dünaamiliselt.
interface OrderState {
public function proceed(OrderContext $order);
}
class NewOrderState implements OrderState {
public function proceed(OrderContext $order) {
// Loogika "makstud" seisundisse üleminekuks
$order->setState(new PaidOrderState());
}
}
class PaidOrderState implements OrderState {
public function proceed(OrderContext $order) {
// Loogika "saadetud" seisundisse üleminekuks
$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);
}
}
// Kasutamine
$order = new OrderContext(new NewOrderState());
$order->proceed(); // liigub makstud seisundisse
$order->proceed(); // liigub saadetud seisundisse
See muster on keeruline, kuna nõuab head OOP põhimõtete mõistmist ja õiget klasside disaini seisundite haldamiseks, kuid parandab märkimisväärselt koodi loetavust ja laiendatavust.