Junior — Middle
Vai jūs varat sniegt piemēru par visgrūtāko dizaina paraugu, ko esat pielietojis praksē?
sobes.tech AI
Atbilde no AI
Viens no sarežģītākajiem dizaina modeļiem, ar kuriem man nācies strādāt PHP, ir "Stāvokļa" (State) modelis. Šis modelis ļauj objektam mainīt savu uzvedību atkarībā no iekšējā stāvokļa, nemainot tā klasi.
Piemērs: man bija projekts ar pasūtījumu sistēmu, kur pasūtījums varēja būt dažādās stāvokļos (jauns, apmaksāts, nosūtīts, atcelts). Tā vietā, lai izmantotu daudz nosacījumu operatoru, es īstenoju katru stāvokli kā atsevišķu klasi, kas realizē kopēju saskarni, un dinamiski mainīju pasūtījuma stāvokli.
interface OrderState {
public function proceed(OrderContext $order);
}
class NewOrderState implements OrderState {
public function proceed(OrderContext $order) {
// Pārejas uz "apmaksāts" stāvokļa loģika
$order->setState(new PaidOrderState());
}
}
class PaidOrderState implements OrderState {
public function proceed(OrderContext $order) {
// Pārejas uz "nosūtīts" stāvokļa loģika
$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);
}
}
// Lietošana
$order = new OrderContext(new NewOrderState());
$order->proceed(); // pāriet uz PaidOrderState
$order->proceed(); // pāriet uz ShippedOrderState
Šis modelis ir sarežģīts, jo prasa labu OOP principu izpratni un pareizu klases dizainu stāvokļu pārvaldībai, bet būtiski uzlabo koda lasāmību un paplašināmību.