Является ли возвращаемое значение true в конце метода плохой практикой, когда исключения обрабатывают все другие пути кода? - PullRequest
1 голос
/ 26 августа 2011

Я пытаюсь вызвать веб-сервис, который сохраняет информацию о пользователе. По сути, объект «завершения» возвращается с результатами вызова службы. Код, который я имею, может быть сокращен следующим образом:

public bool SaveUserInformation(ArgsList args) {
    CompletionObject results = SaveService(args);
    if (results.Status == Failed)
        throw SomeException("onoez D:");

    return true;
}

По сути, этот метод возвращает логическое значение, но значение никогда не бывает ложным. Это кажется мне немного странным, так есть ли лучший способ приблизиться к этому?

Спасибо!

Ответы [ 5 ]

6 голосов
/ 26 августа 2011

Почему бы не вернуть void? Если выдается исключение, вы об этом узнаете. Если он не выдан, вы знаете, что ваша функция успешно выполнена (возвращено значение true).

try
{
   MyFunction();
   //here you know it has successfully completed
}
catch(Exception e)
{
   //...  
}

Если, однако, вы переопределяете виртуальную функцию, которая возвращает bool, тогда вы, конечно, всегда можете вернуть true, так как вам все равно придется возвращать некоторое логическое значение. Если подумать, вы также можете вернуть false:)

1 голос
/ 26 августа 2011

Исходя из этого вопроса и после просмотра вашего кода, я бы сказал ДА .

Эта функция возвращает true независимо от результата, поэтому ее возвращаемое значение не имеет значения.

Теперь, с другой стороны, если вы попытались открыть несуществующий файл, вы также получите исключение. Если вы обработали это исключение и использовали файл по умолчанию или загрузили значения по умолчанию, и все по-прежнему работало ... тогда возвращение true было бы логичным.

Показанная вами функция бесполезна для всех, кто ее использует ... если только вы что-то из нее не оставили.

1 голос
/ 26 августа 2011

Exception для исключительных случаев.

Return value для указания вызывающей стороне о том, что произошло внутри вызываемой функции.

Это совершенно разные концепции дизайна.

Выберите, как вам нужно поведение этого метода.

Если не о чем уведомлять, удалите возвращаемое значение.

Если есть, проверьте, действительно ли имеет смысл обрабатывать все эти исключения.

0 голосов
/ 27 августа 2011

Почему бы просто не вернуть CompletionObject

public CompletionObject SaveUserInformation(ArgsList args) {
    return SaveService(args);
    /*if (results.Status == Failed)
        throw SomeException("onoez D:");

    return true;*/
}

Я не могу понять необходимость возвращаемого значения bool как всегда истинного.

0 голосов
/ 26 августа 2011

Зачем вообще заставлять его возвращать логическое значение?Вы либо возвращаете ошибку как значение true / false, либо просто ничего не возвращаете и полагаетесь на исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...