Estou escrevendo um aplicativo bastante simples que trata da reserva de quartos de hotel. Eu tenho um problema em um estágio.
Estou processando uma fila de pedidos. Para cada pedido, um dos recepcionistas deve escolher um quarto (um ou nenhum) para o cliente, de acordo com sua estratégia. Por isso decidi ir com Java Optional. O problema é que, se simplesmente não houver salas livres na data desejada, o pedido deverá ser cancelado, mas se houver algumas salas disponíveis e nenhuma delas se encaixar na estratégia da recepcionista, essa ordem deverá ser colocada de volta na fila.
A escolha dos quartos definitivamente deve ser um dever da recepcionista. Qual você acha que é a melhor maneira de lidar com esse problema de maneira limpa? Devo lançar uma exceção em vez de retornar vazio Optionalquando não há quartos na data? Infelizmente, as exceções geralmente não são uma boa solução para controlar o fluxo de código.
Fragmento de código:
Optional<Room> selectedRoom = receptionist.chooseRoom(rooms,
order.getQuestionnaire());
boolean decision = selectedRoom
.map(room -> receptionist.askClient(order.getClient(),
room,
order.getQuestionnaire()))
.orElse(false);
if (shouldProcessAgain(order, selectedRoom.isPresent(), decision)) {
orders.add(order);
}