none
Dúvida com arquitetura de projetos ASP.NET MVC em NCamadas RRS feed

  • Pergunta

  • Caros, 

    Tenho uma dúvida sobre a arquitetura de um projeto em ASP.NET MVC em NCamadas.

    Geralmente em nossos projetos, temos a ViewModel.cs e a Models.cs

    Na ViewModels.cs criamos nossas propriedades co objetos a qual retorna um objeto ou um list utilizando em nossas controlles para passar na View.
    Já a Models são classes de modelos para por exemplo preencher um dropdownlist a qual não precise de uma comunicação com o banco ou simplesmente um objeto que será utilizado na passagem de parâmetros da View para Controller, exemplo: Quando você possui um BeginForms com Html Helpers e precisa passar esses valores para ActionResult. 

    A minha dúvida é a seguinte, Quando meu objeto chega na Controller, eu preciso passar este mesmo objeto para BLL onde respectivamente para DAL, para realizar uma consulta. O problema é que como o projeto MVC (UI) já referência a BLL, minha BLL não pode fazer referência com a UI, pois vai dar referência cruzada. Digo isto, pq minha idéia, era colocar este objeto como parametro de recebimento também no na BLL, assim não colocar N parametros e a manutenção e organização ficaria mais fácil.

    Então, eu mudei meu projeto.
    Em vez de eu usar a pasta Models, eu criei um projeto novo do tipo Class Library chamado Model, onde eu deixo minhas classes de modelos. Assim eu posso utilizar tanto na View como também na BLL e DAL.

    Vocês acham que essa forma está errada?
    Achei a solução mais viável.

    Se alguém não entendeu, eu posso colocar um exemplo de código.

    • Tipo Alterado Rodrigo Epic terça-feira, 15 de janeiro de 2013 15:47
    terça-feira, 15 de janeiro de 2013 12:39

Todas as Respostas

  • Bom.

    As classes de Modelo devem ser um espelho dos campos da tabela do banco de dados.

    Cria um projeto somente para os Modelos.

    Ex.

    Tabela de Funcionario:

    public class Employee {

    public int id {get; set;} public string name {get; set;} public string cargo {get; set;}

    }

    Cria um projeto com seu Context ou Data.

    Onde ficara seu Context de acesso ao banco, com o(s) DbSet(s).

    Cria um projeto de Repository nesse projeto cria-se uma classe para cada tabela com os métodos de Insert, delete, Update e Select.

    Ex.:EmployeeRepository.cs

    Cria um Projeto de Businnes

    As regras dos casos de uso serão escritas aqui.

    Será criada uma classe para cada funcionalidade do sistema, não necessariamente será uma para cada tabela do banco de dados.

    Ex. public Employee getEmployeeById(int id)

    No controller é utilizado a chamada dos métodos do projeto Business.

    A ideia é que exista apenas um método do Business sendo chamado em cada Action do controller.

    Não deve ser implementado regras de negocio dentro dos métodos do controller. Eles devem estar no Business.

    No seu projeto Web será feito referência para o Modelo e para o Business.

     




    • Sugerido como Resposta Al.Simões segunda-feira, 21 de janeiro de 2013 20:25
    segunda-feira, 21 de janeiro de 2013 20:25