Ich schreibe eine recht einfache Anwendung, die sich mit der Reservierung von Hotelzimmern befasst. Ich habe irgendwann ein Problem.
Ich bearbeite eine Warteschlange mit Bestellungen. Für jede Bestellung sollte einer der Rezeptionisten ein Zimmer (eines oder keines) für den Kunden gemäß seiner Strategie auswählen. Deshalb habe ich mich für Java entschieden Optional
. Das Problem ist, dass die Bestellung storniert werden sollte, wenn zum gewünschten Datum einfach keine freien Zimmer vorhanden sind. Wenn jedoch einige Zimmer verfügbar sind und keines der Strategie der Rezeptionistin entspricht, sollte die Bestellung wieder in die Warteschlange gestellt werden.
Die Auswahl der Zimmer sollte auf jeden Fall die Pflicht der Rezeption sein. Was ist Ihrer Meinung nach der beste Weg, um dieses Problem auf saubere Weise zu lösen? Sollte ich eine Ausnahme auslösen, anstatt leer zurückzukehren, Optional
wenn derzeit keine Zimmer vorhanden sind? Leider sind Ausnahmen normalerweise keine gute Lösung für die Steuerung des Codeflusses.
Codefragment:
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);
}