Ошибки при реализации 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 — это не про «чистоту», а про прозрачность бизнес-процесса.

Рекламный пост

Просмотры: 11
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти