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