Я часто бываю в ситуации, когда у меня есть метод, в котором что-то может пойти не так, но исключение нецелесообразно использовать, поскольку оно не является исключительным.
Например:
Я разрабатываю монопольную игру. У класса Bank есть метод buyHouse и поле, которое подсчитывает количество оставшихся домов (в монополии 32 дома). Что-то, что может пойти не так, это игрок, покупающий дом, когда осталось 0. Как я должен справиться с этим. Вот три подхода, которые я могу придумать.
1. public void buyHouse(Player player, PropertyValue propertyValue)
{
if(houseCount < 0) throw new someException;
....
//Not really an exceptional situation
}
2. public boolean buyHouse(Player player, PropertyValue propertyValue)
{
if(houseCount < 0) return false;
....
//This I think is the most normal approach but changing something
//and returning if it was a success seems bad practice to me.
}
3. public boolean housesLeft()
{
if(houseCount > 0) return true;
return false;
//Introducing a new method. But now I expect the client to call this method
//first before calling buyHouse().
}
Что бы вы сделали?