У меня есть метод Foo (), выполняющий некоторую тяжелую работу, и на уровне пользовательского интерфейса у меня есть кнопка для вызова этого метода.
Все, что я хочу сделать, это вызвать метод и показать окно сообщения, если что-то не так с методом Foo ().
У меня есть два варианта оформления подписи метода:
1.Tuple
Tuple<bool, string> Foo()
{
if(!DoHardWorkA()) return Tuple.New(false, "cannot do hardwork A");
if(!DoHardWorkB()) return Tuple.New(false, "cannot do hardwork B");
return Tuple.New(true, String.Empty);
}
2.Exception
void Foo()
{
if(!DoHardWorkA()) throw new ProgramSpecificException("cannot do hardwork A");
if(!DoHardWorkB()) throw new ProgramSpecificException("cannot do hardwork B");
return Tuple.New(true, String.Empty);
}
Как DoHardWorkA (), так и DoHardWorkB () являются внешними методами, которые я не могу контролировать, и они возвращают true / false, указывая результат.
Логично, я думаю, что я должен пойти с вариантом 2, поскольку они действительно исключения; Но для согласованности я бы хотел воспользоваться вариантом 1.
Какой из них вы предпочитаете, почему?