New We are sorting MAX channels into categories and territories. Read the news

Ошибки при реализации Transactional Script



Очень частая ошибка — пытаться сделать красиво. Вспоминаем все практики из Clean Code и начинаем разбивать логику, чтобы код соответствовал всем принципам ООП — SOLID, DRY, SLAP и т. п. В результате бизнес-логика начинает размазываться по куче классов, и нам придется потратить много времени, чтобы разобраться.

Вот один из таких примеров:

public OrderDto createOrder(CreateOrderRequest request) {
Order order = orderFactory.create(request); // <- Что делает фабрика? Непонятно.
orderRepository.save(order);
return orderAssembler.toDto(order); // <- А здесь внезапно считается цена?
}

Такой код выглядит чистым, но скрывает и размазывает бизнес-логику по куче классов.

Еще один пример, который часто встречается во множестве проектов:

public OrderDto createOrder(CreateOrderRequest request) {
// 1. Валидация входных данных
validateRequest(request);

// 2. Создание заказа
// ОШИБКА: Бизнес-логика скрыта! Мы не видим, как считается цена,
// применяется ли скидка и проверяются ли остатки.
Order order = orderFactory.buildOrderFromRequests(request);

// 3. Сохранение
orderRepository.save(order);

// 4. Отправка события
eventPublisher.publish(new OrderCreatedEvent(order.getId()));

// 5. Возврат DTO
return toDto(order);
}

Здесь важная бизнес-логика скрыта в фабрике, которая создает заказ. Мы не видим, как считается цена, применяется ли скидка и проверяются ли остатки.

Transactional Script — это не про «чистоту», а про прозрачность бизнес-процесса.

Ad post

Views: 11
Open in MAX Report an inaccuracy

Report an inaccuracy

Describe what needs fixing. If you have a source, add a link.

You are leaving datool.ru

The link leads to an external website. datool.ru is not responsible for its content — check the address before entering passwords or payment details.

Redirecting in 10 s

Go