Skip to content

Controlador

Marcelo Vieira de Souza edited this page Aug 23, 2018 · 1 revision

No padrão MVC, o controlador, ou controller é o ponto de entrada e saída de dados da aplicação. Todo o fluxo de requisições obrigatoriamente dá início no controlador.

Partindo desse princípio, vamos a alguns conceitos sobre o uso de controladores com a arquitetura:

Controladores que possuem relacionamento direto com entidade devem herdar diretamente de FluentController.

Vaja a hierarquia:

UserController < FluentController<User> < FluentSericeController < BaseController

A implementação fica da seguinte forma:

public class UserController : FluentController<User>
{
    public void Add(User user)
    {
        Service.Add(user);
    }
}

Note que para invocar os métodos do serviço referente ao controlador, deve-se fazer uso da propriedade Service Service.Add(user). É possível invocar vários métodos nativos de FluentService que é o tipo de serviço padrão de FluentController<T>.

Referência Quando um serviço customizado é criado para a entidade referenciada no controller (User), para ter acesso a esse serviço de forma fácil, pode-se fazer um cast da seguinte forma:

public class UserController : FluentController<User>
{
   public new UserService Service => base.Service as UserService;

   public void Add(string email, string name)
   {
        Service.Add(email, name);
   }
}

public class UserService : FluentService<User>
{
    public void Add(string email, string name)
    {
       var user = new User
       {
           Email = email,
           Name = name
       };

       base.Add(user);
   }
}

Note que a indicação public new UserService Service => base.Service as UserService; torna Service agora do tipo UserService. Dessa forma, torna-se possível acessar o método Service.Add(email, name);que é customizado de UserService. Independente desse cast, sempre que um serviço customizado é criado, esse passa a ser considerado como padrão dessa entidade. Isso é melhor detalhado no item Serviços.


Controladores que não possuem relacionamento direto com entidade devem herdar diretamente de FluentSericeController

Vaja a hierarquia:

RelatorioController < FluentSericeController<RelatorioService> < BaseController

A implementação fica da seguinte forma:

public class ReportController : FluentServiceController<ReportService>
{
    public int GetDataCount()
    {
        return Service.GetDataCount();
    }
}
public class ReportService : TransactionalService
{
    public int GetDataCount()
    {
        return 10;
    }
}

Pra prosseguir, veja o item Serviços

Clone this wiki locally