none
Aplicacoes Multi-Camada RRS feed

  • 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 ?

    Ex:

    public ActionResult Index()
            {
                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);
            }

    terça-feira, 10 de março de 2015 15:44

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

    terça-feira, 10 de março de 2015 16:10
  • Ok, mas mesmo assim dentro da camada controller, eu nao teria que instanciar um objeto do model pra receber o retorno da business ?
    terça-feira, 10 de março de 2015 16:45
  • 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
    terça-feira, 10 de março de 2015 16:48
  • 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.

    terça-feira, 10 de março de 2015 16:57
  • 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
    terça-feira, 10 de março de 2015 17:15