Sobes.tech
Middle+

Zadanie: poproszono Cię o przeprowadzenie przeglądu kodu nowej funkcji, której istotą jest możliwość zarezerwowania wycieczki (składającej się z biletu lotniczego i hotelu). Funkcje do oddzielnej rezerwacji biletu lotniczego i wycieczki już istnieją, od tego zadania oczekuje się, że dostarczy jednolitą metodę, która zarezerwuje całą wycieczkę lub nic z jej składników.

sobes.tech AI

Odpowiedź od AI

В такой задаче важно обеспечить атомарность операции бронирования тура, чтобы либо оба компонента (авиабилет и отель) были забронированы, либо ни один — иначе возможна рассинхронизация данных.

Основные моменты для ревью:

  • Использовать транзакцию, которая охватывает оба бронирования.
  • Обработать возможные ошибки каждого шага, чтобы при неудаче откатить изменения.
  • Проверить, что вызовы к существующим методам бронирования авиабилета и отеля поддерживают откат или отмену.
  • Логировать процесс для отладки и аудита.

Пример на C# с использованием транзакции (псевдокод):

using(var transaction = dbContext.Database.BeginTransaction())
{
    try
    {
        BookFlight(flightDetails);
        BookHotel(hotelDetails);
        transaction.Commit();
    }
    catch(Exception)
    {
        transaction.Rollback();
        throw;
    }
}

Если методы бронирования не поддерживают транзакции, нужно реализовать компенсационные действия (отмена бронирования), чтобы при ошибке откатить уже сделанные брони.