Array
(
)

MVC - Controller deve conter apenas actions?

Rachel Andrade
   - 05 set 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.

Moisés Gonçalves
   - 12 set 2013

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.

Rachel Andrade
   - 12 set 2013

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.

Moisés Gonçalves
   - 12 set 2013

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);
}

Rachel Andrade
   - 12 set 2013

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.

Moisés Gonçalves
   - 12 set 2013

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.