Junior — Middle
Оё метавонед мисоли намунаи паттерни тарҳрезии мураккабтаринеро, ки дар амалия истифода бурдаед, диҳед?
sobes.tech AI
Ҷавоб аз AI
Бозгуч дизайн үлгілерінің бірі, мен PHP-де жұмыс істеген кезде ең күрделі болғаны — "Күй" (State) үлгісі. Бұл үлгі объектінің ішкі күйіне байланысты оның мінез-құлқын өзгертуіне мүмкіндік береді, оның класын өзгертуге мұқтаж болмай.
Қолдану мысалы: менде тапсырыс жүйесі бар жобам болды, онда тапсырыс әртүрлі күйде болуы мүмкін (жаңа, төленген, жіберілген, бұзылған). Көптеген шарт операторларының орнына, әр күйді жалпы интерфейсті жүзеге асыратын бөлек класс ретінде жүзеге асырдым және тапсырыстың күйін динамикалық түрде өзгерттім.
interface OrderState {
public function proceed(OrderContext $order);
}
class NewOrderState implements OrderState {
public function proceed(OrderContext $order) {
// "төленген" күйіне өту логикасы
$order->setState(new PaidOrderState());
}
}
class PaidOrderState implements OrderState {
public function proceed(OrderContext $order) {
// "жіберілген" күйіне өту логикасы
$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);
}
}
// Қолдану
$order = new OrderContext(new NewOrderState());
$order->proceed(); // "төленген" күйіне өтеді
$order->proceed(); // "жіберілген" күйіне өтеді
Бұл үлгі күрделі, себебі ол ООП принциптерін жақсы түсінуді және күйді басқару үшін дұрыс сынып жобалауды талап етеді, бірақ ол кодтың оқылуын және кеңейтілуін айтарлықтай жақсартады.