4) Сервисы (SRP + DIP)

4) Сервисы (SRP + DIP)


// 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() + ")"); } }

Автор: к.п.н., Румянцев Сергей Александрович, доцент Финансового университета при Правительстве РФ; доцент ОЧУВО Международного инновационного университета; Консалтинг, управление разработкой ПО; системный и бизнес анализ; менеджмент; аналитиз данных; управление ИТ. Телефон для связи +79269444818 (мессенджеры)   Короткая ссылка:

4) Сервисы (SRP + DIP)


// 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() + ")"); } }

https://webprogr.ru/~D6H8Y
Короткая ссылка на новость:https://webprogr.ru/~D6H8Y


// Пример кода
function hello(name) {
  console.log(`Hi, ${name}!`);
}
hello("Sergey");

Последние новости

Рейтинг@Mail.ru