рефакторинг к .net основные соглашения API - PullRequest
0 голосов
/ 23 февраля 2019

В нашем приложении мы используем mediatr, и существует следующая общая схема:

class SomeController
{
    public Action Foo(SomeRequest request)
    {
       var result = Mediatr.Send(request);
       if(result == null)
       {
          return NotFound();
       }
       return Ok(result);
    }

}

Этот код повторяется для каждой конечной точки API, независимо от метода HTTP.

Я читал об API-соглашениях, но думаю, что речь идет о Swagger, API-анализаторе и подобных.

Как можно избежать использования этого повторяющегося кода выше?

1 Ответ

0 голосов
/ 23 февраля 2019
class BaseController
{
     protected static IActionResult GenericAction(object request)
     {
           var result = Mediatr.Send(request);
           if(result == null)
           {
               return NotFound();
           }
           return Ok(result);
     }
}

Тогда

class SomeController : BaseController
{

    public Action Foo(SomeRequest request)
    {
         return GenericAction(request);
    } 
}

, если ваши методы всегда имеют одинаковую структуру, вы можете даже обобщить ее более

class BaseController<TRequest>
{ 
     public virtual Action Foo(SomeRequest request)
     {
         return GenericAction(request);
     } 


     protected static IActionResult GenericAction(TRequest request)
     {
           var result = Mediatr.Send(request);
           if(result == null)
           {
               return NotFound();
           }
           return Ok(result);
     }
}

Тогда

class SomeController<SomeRequest> : BaseController
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...