Inquiridor
Aplicacoes Multi-Camada

Pergunta
-
Tenho um projeto MVC multi-camadas:
1. MeuProjeto.DataAccess (Contendo EF e o context)
2. MeuProjeto.Model (Contendo as classes de objetos)
3. MeuProjeto.MVC (Contendo a aplicacao MVC em si com views, controllers)
4. MeuProjeto.Repository (Chamando o context e tenho metodos para trazer os dados)No entanto, seguindo o principio que View nao pode acessar Model diretamente, como eu configuraria meu controller pra receber dados da camada de repositorio ?
public ActionResult Index()
Ex:
{
ProductRepository pr = new ProductRepository();
List<Product> products = pr.GetProducts(); //Aqui e' o problema. Posso ter referencia direta a classe model Product apenas pra criar um objeto que sera trazido pelo repositorio ?
return View(products);
}
Todas as Respostas
-
AGA,
Acredito que você deveria criar uma camada "Business" que acessa o seu repositório. Além de chamadas às camadas de acesso a dados, seus objetos de negócios conteriam regras de negócio (cálculos, validações, verificações) que estariam isolados da base (o que facilitaria uma eventual mudança no mecanismo de acesso a dados ou, mesmo, no próprio banco utilizado).
Espero ter ajudado.
Abs
-
-
Entendo que vc acessaria o objeto de negócios e ele devolveria um ou mais objetos representando suas entidades. Basicamente é isso que faço e que muitos adotam numa aplicação multicamadas.
O link abaixo é um guia da própria Microsoft sobre o desenvolvimento multicamadas:
https://msdn.microsoft.com/en-us/library/ee658103.aspx?f=255&MSPPError=-2147217396
Não sei se vc assina as revistas da Devmedia, mas tenho 2 artigos publicados a respeito disto lá (usei como referência este material da Microsoft que te passei, inclusive):
http://www.devmedia.com.br/aplicacoes-multicamadas-em-net-parte-1/28685
http://www.devmedia.com.br/aplicacoes-multicamadas-em-net-parte-2/29164
- Sugerido como Resposta Renato GroffeMVP quarta-feira, 11 de março de 2015 22:30
-
Sou assinante e recomendo. Maravilhosa.
E parabens pelos artigos.
Seguinte, e' ai que quero chegar:[HttpGet]
public ActionResult Index()
{
ProfissionalBO bo = new ProfissionalBO();Neste momento que vc instancia um objeto bo.
Na verdade e' como se fosse o model. Um objeto que armazenara o retorno da business. -
Esse retorno da Business eu invoco sempre via Controller. Através do View Bag ou mesmo por meio da propriedade Model das Views eu manipulo o retorno.
Costumo dizer que o Controller é como um intermediário/orquestrador. Realiza chamadas a outros objetos e devolve o retorno para a View. Esta última em si, sempre trabalhará com retornos de Actions. No próprio exemplo que vc indicou eu fiz isto.
- Sugerido como Resposta Renato GroffeMVP quarta-feira, 11 de março de 2015 22:30