Estoy escribiendo una aplicación bastante simple que se ocupa de la reserva de habitaciones de hotel. Tengo un problema en una etapa.
Estoy procesando una cola de pedidos. Para cada pedido, uno de los recepcionistas debe elegir una habitación (una o ninguna) para el cliente de acuerdo con su estrategia. Es por eso que decidí ir con Java Optional
. El problema es que si simplemente no hay habitaciones libres en la fecha deseada, el pedido debe cancelarse, pero si hay algunas habitaciones disponibles y ninguna de ellas se ajusta a la estrategia de la recepcionista, ese pedido debe volver a la cola.
La elección de las habitaciones definitivamente debería ser un deber de recepcionista. ¿Cuál crees que es la mejor manera de lidiar con ese problema de manera limpia? ¿Debo lanzar una excepción en lugar de volver vacía Optional
cuando no hay habitaciones en la fecha? Desafortunadamente, las excepciones no suelen ser una buena solución para controlar el flujo 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);
}
fuente