Saya sedang menulis aplikasi yang cukup sederhana yang berkaitan dengan pemesanan kamar hotel. Saya punya masalah pada satu tahap.
Saya sedang memproses antrian pesanan. Untuk setiap pesanan, salah satu resepsionis harus memilih kamar (satu atau tidak sama sekali) untuk klien sesuai dengan strateginya. Itu sebabnya saya memutuskan untuk pergi dengan Java Optional
. Masalahnya adalah bahwa jika tidak ada kamar gratis pada tanggal yang diinginkan pesanan harus dibatalkan, tetapi jika ada beberapa kamar yang tersedia dan tidak ada yang sesuai dengan strategi resepsionis bahwa pesanan harus dikembalikan ke antrian.
Memilih kamar tentu harus menjadi tugas resepsionis. Menurut Anda apa cara terbaik untuk mengatasi masalah itu dengan cara yang bersih? Haruskah saya melemparkan pengecualian daripada mengembalikan kosong Optional
ketika tidak ada kamar di tanggal? Sayangnya, pengecualian biasanya bukan solusi yang baik untuk mengendalikan aliran kode.
Fragmen kode:
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);
}