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 սկզբունքները և ճիշտ դասերի նախագծում կարգավիճակների կառավարում համար, բայց զգալիորեն բարելավում է կոդի ընթեռնելիությունը և ընդլայնելիությունը։