Sobes.tech
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(); // անցնում է "ուղարկված" կարգավիճակ

Այս նմուշը բարդ է, քանի որ պահանջում է լավ հասկանալ OOP սկզբունքները և ճիշտ դասերի նախագծում կարգավիճակների կառավարում համար, բայց զգալիորեն բարելավում է կոդի ընթեռնելիությունը և ընդլայնելիությունը։