S (SRP): Order, PricingService, CheckoutService, EmailNotifier, CardPayment, InMemoryOrderRepository— каждый класс выполняет одну роль.
O (OCP): новые способы оплаты/уведомления/скидок добавляются новыми классами, не меняя CheckoutService.
L (LSP): Payment ↔︎ CardPayment/PaypalPayment, Notifier ↔︎ EmailNotifier/SmsNotifier — любое подставляется без сюрпризов.
I (ISP): четыре маленьких интерфейса (Payment, Notifier, DiscountPolicy, OrderRepository) вместо «бога-интерфейса».
D (DIP): высокоуровневый CheckoutService зависит от абстракций, а конкретные реализации передаются извне (композиция/DI).
S (SRP): Order, PricingService, CheckoutService, EmailNotifier, CardPayment, InMemoryOrderRepository— каждый класс выполняет одну роль.
O (OCP): новые способы оплаты/уведомления/скидок добавляются новыми классами, не меняя CheckoutService.
L (LSP): Payment ↔︎ CardPayment/PaypalPayment, Notifier ↔︎ EmailNotifier/SmsNotifier — любое подставляется без сюрпризов.
I (ISP): четыре маленьких интерфейса (Payment, Notifier, DiscountPolicy, OrderRepository) вместо «бога-интерфейса».
D (DIP): высокоуровневый CheckoutService зависит от абстракций, а конкретные реализации передаются извне (композиция/DI).
// Пример кода
function hello(name) {
console.log(`Hi, ${name}!`);
}
hello("Sergey");