-
Notifications
You must be signed in to change notification settings - Fork 0
Controlador
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;tornaServiceagora do tipoUserService. Dessa forma, torna-se possível acessar o métodoService.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
Entidades | Controller | Serviço | Especificações | Propagação | Validação | Repositório