Re[4]: обработка ошибок
От: MadHuman Россия  
Дата: 08.04.22 05:25
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>А чем это принципиально лучше, чем:

G>
G>public static object GetThing(string arg1){
G>  //do work
G>}


G>//хэндлер для апи ендпойнта
G>public static object ProcApiRequest(string arg1, string arg2){
G>  if ( some condition for arg1) {
G>    this.ModelState.AddModelError(nameof(arg1),"Condition failed");
G>  }
G>  if ( some other condition for arg2) {
G>    this.ModelState.AddModelError(nameof(arg2),"Condition failed");
G>  }

G>  if(!this.ModelState.IsValid) {
G>    return BadRequest(this.ModelState);
G>  }

G>  var result1 = GetThing(arg1);
G>  var result2 = DoSomeOtherWork(result1);
G>  return MakeOutPut(result2);
G>}
G>

G>?

тем что, логика проверки аргумента arg1 довольно сложна (это не одна строчка для if как в упрощённом примере) и специфична именно для GetThing, и там уже реализована, тк функция используется не только для хандлера рест-апи ендпойнта.

в предлагаемом вами варианте логика проверки перенесена из GetThing в ProcApiRequest. это было бы ок, если она совсем простая, но она не совсем простая.
проверка внутри GetThing органична и реюзает часть внутренней логики. не так просто её взять и перенести.
и минус — в GetThing проверка всё равно нужно, т.к. GetThing не только для ProcApiRequest.

можно вынести логику валидации в отдельную функцию и реюзать и в GetThing и в ProcApiRequest, так будет уже лучше.
но было ощущение что кэтчем эксепшина из GetThing тоже норм.
не всегда хорошо чтоб каждое место использование функции вынуждало её менять/рефакторить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.