Перейти к содержанию

Transaction script

Способ организации бизнес логики в виде вызова процедур. Каждая процедура выполняется в отдельной транзакции и обрабатывает отдельный запрос от слоя представления. Бизнес логика внутри процедуры перемешана с вызовами к базе данных.
По ощущениям самый распространенный паттерн написания кода в индустрии.
Благодаря своей простоте хорошо подходит для задач с простой бизнес логикой или для ETL задач.

Пример

@RequaredArgConstructor
public class Hotel {
  private final HotelDao hotelDao;

  @Transactional
  public void bookRoom(int roomId) throws Exception {
    Room room = hotelDao.getById(roomId);

    if (room == null) {
      throw new Exception("Room number: " + rroomId + " does not exist");
    } else {
      if (room.isBooked()) {
        throw new Exception("Room already booked!");
      } else {
        room.setBooked(true);
        hotelDao.update(room);
      }
    }
  }
}