MVC - Controller deve conter apenas actions?

05/09/2013

Olá, pessoal.
Estou estudando MVC e fazendo alguns projetinhos para fixar o conteúdo.
Hoje surgiu a seguinte dúvida: os controllers deve conter apenas Actions? Assim, sempre que eu precisar de um método seu, devo fazer uma chamada a uma action?
Ou eu posso usar um controller como outra classe qualquer, tipo um DAO?

Obrigada.

Rachel Andrade

Respostas

12/09/2013

Moisés Gonçalves

Seguindo o padrão MVC, o Controlador não é pra ser utilizado em nenhuma situação a não ser pelas rotinas automáticas do sistema nas respostas HTTP.
Sugiro que você crie seus próprios objetos de negócio se precisar de lógicas que irão ser compartilhadas.
Responder Citar

12/09/2013

Rachel Andrade

Obrigada pela resposta, Moisés.
Onde você acha que eu deveria colocar essas classes? Em uma camada (pasta) DAL ou BLL?
Eu dei uma olhada no modelo DAL, mas não consigo "misturar" com MVC.
Responder Citar

12/09/2013

Moisés Gonçalves

Existem diversas formas, mas também depende do escopo do objeto.
Se o objeto for de uso comum, como uma consulta de cep no site dos correios, ou uma validação de strings, eu crio um projeto chamado Utils e adiciono uma referência ao projeto MVC.
Se for um acesso a dados eu utilizo o entity framework para o mapeamento das minhas tabelas do banco. Porém não crio muitas camadas para isso, apenas crio um projeto de entidades, contendo o descrito das entidades e o DbContext referente, depois crio um projeto chamado Models, e nele adiciono objetos de negócio com o sufixo Model.
Uma classe de estoque, por exemplo:
public class Estoque
{
public int Id {get;set;}
public Produto Produto {get;set;}
public int Quantidade {get;set;}
}

E crio um objeto para manupulá-lo.
public class EstoqueModel
{
void AdicionarEstoque(Estoque est);
void DeduzirEstoque(Estoque est);
}
Responder Citar

12/09/2013

Rachel Andrade

Ah, boa ideia essa de criar um outro projeto. Vou estudar isso e criar projetos separando as classes por funcionalidade.
Obrigada mais uma vez, Moisés.
Podem fechar o tópico, por favor.
Responder Citar

12/09/2013

Moisés Gonçalves

Eu crio em projetos separados, pois uma vez precisei utilizar a mesma DLL em uma aplicação forms e em outro webservice.
Assim você ganha mais portabilidade.
Responder Citar