Здравствуйте, 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 тоже норм.
не всегда хорошо чтоб каждое место использование функции вынуждало её менять/рефакторить.