// SRP: каждый сервис делает своё; DIP: зависит от абстракций public final class PricingService { private final DiscountPolicy discountPolicy; public PricingService(DiscountPolicy discountPolicy) { this.discountPolicy = discountPolicy; } public Money priceWithDiscount(Money total) { return discountPolicy.apply(total); } } public final class CheckoutService { private final Payment payment; private final Notifier notifier; private final OrderRepository repo; private final PricingService pricing; public CheckoutService(Payment payment, Notifier notifier, OrderRepository repo, PricingService pricing) { this.payment = payment; this.notifier = notifier; this.repo = repo; this.pricing = pricing; } public void checkout(Order order) { // 1) скидка Money discounted = pricing.priceWithDiscount(order.total()); order.applyDiscount(discounted); // 2) оплата PaymentResult r = payment.pay(discounted); if (!r.success()) { notifier.send(order.customerEmail(), "Оплата не прошла: " + r.message()); throw new IllegalStateException("Payment failed: " + r.message()); } // 3) фиксация и уведомление order.markPaid(); repo.save(order); notifier.send(order.customerEmail(), "Заказ " + order.id() + " оплачен (" + r.txId() + ")"); } }
// SRP: каждый сервис делает своё; DIP: зависит от абстракций public final class PricingService { private final DiscountPolicy discountPolicy; public PricingService(DiscountPolicy discountPolicy) { this.discountPolicy = discountPolicy; } public Money priceWithDiscount(Money total) { return discountPolicy.apply(total); } } public final class CheckoutService { private final Payment payment; private final Notifier notifier; private final OrderRepository repo; private final PricingService pricing; public CheckoutService(Payment payment, Notifier notifier, OrderRepository repo, PricingService pricing) { this.payment = payment; this.notifier = notifier; this.repo = repo; this.pricing = pricing; } public void checkout(Order order) { // 1) скидка Money discounted = pricing.priceWithDiscount(order.total()); order.applyDiscount(discounted); // 2) оплата PaymentResult r = payment.pay(discounted); if (!r.success()) { notifier.send(order.customerEmail(), "Оплата не прошла: " + r.message()); throw new IllegalStateException("Payment failed: " + r.message()); } // 3) фиксация и уведомление order.markPaid(); repo.save(order); notifier.send(order.customerEmail(), "Заказ " + order.id() + " оплачен (" + r.txId() + ")"); } }
// Пример кода
function hello(name) {
console.log(`Hi, ${name}!`);
}
hello("Sergey");