Информация об изменениях

Сообщение Re[4]: Опять про исключения бизнес-процесса (2017 год) от 01.11.2017 7:55

Изменено 01.11.2017 7:56 Shmj

Re[4]: Опять про исключения бизнес-процесса (2017 год)
Здравствуйте, yenik, Вы писали:

Y>

Y>X DO NOT use exceptions for the normal flow of control, if possible.


Дык... в том то и дело -- в нормальном случае операция проходит и вы отгружаете товар. А если перевести средства не удалось, то это не стандартная ситуация.

Вот, даже наш местный MVP, спец. по guidelines, рекомендует юзать Exception: http://rsdn.org/forum/philosophy/6951261.1
Автор: gandjustas
Дата: 01.11.17


Получается есть таки 2 лагеря?

Y>Видятся варианты.


Y>1)

Y>TransferValidationResult ValidateTransfer(int toAccount, decimal amount);
Y>long Transfer(int toAccount, decimal amount); // бросает исключение при неуспехе

Пред. проверка обычно проходит иначе. Прежде чем пользователь переводит со счета, он видит остаток. Если там 0, то вы просто не отобразите кнопку "перевести средства" в GUI. Если попытается ввести сумму больше, то вы на уровне проверки вводимых данных не дадите этого сделать.

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

Y>2)

Y>bool TryTransfer(int toAccount, decimal amount, out TransferValidationResult transferValidationResult);

Вот, никогда не видел ничего подобного.
Re[4]: Опять про исключения бизнес-процесса (2017 год)
Здравствуйте, yenik, Вы писали:

Y>

Y>X DO NOT use exceptions for the normal flow of control, if possible.


Дык... в том то и дело -- в нормальном случае операция проходит и вы отгружаете товар. А если перевести средства не удалось, то это не стандартная ситуация.

Вот, даже наш местный MVP, спец. по guidelines, рекомендует юзать Exception: http://rsdn.org/forum/philosophy/6951261.1
Автор: gandjustas
Дата: 01.11.17


Получается есть таки 2 лагеря?

Y>Видятся варианты.


Y>1)

Y>TransferValidationResult ValidateTransfer(int toAccount, decimal amount);
Y>long Transfer(int toAccount, decimal amount); // бросает исключение при неуспехе

Пред. проверка обычно проходит иначе. Прежде чем пользователь переводит со счета, он видит остаток. Если там 0, то вы просто не отобразите кнопку "перевести средства" в GUI. Если попытается ввести сумму больше, то вы на уровне проверки вводимых данных не дадите этого сделать.

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

Y>2)

Y>bool TryTransfer(int toAccount, decimal amount, out TransferValidationResult transferValidationResult);

Вот, никогда не видел ничего подобного. В обычном случае операция проходит, ведь пред. проверки делаются всегда.