none
CRUD com arquitetura em 4 camadas. RRS feed

  • Pergunta

  • Olá,

    Levando em conta o seguinte cenário:

    Camadas

    • Aplicacao.Entidades
    • Aplicacao.AcessoDados
    • Aplicacao.Negocio
    • Aplicacao.Interface

    Camada de acesso a dados:

    public interface IRepositorio<T> where T : class, new() { void InserirOuAtualizar(T entidade); T SelecionarPorId(int id); List<T> SelecionarTodos(); }   

        public interface IRepositorioPaciente : IRepositorio<Entidades.Paciente>
        {
    Entidades.Paciente SelecionarPorEmail(string email);
        }

      class RepositorioPacientesAccess : IRepositorioPaciente
        {
            public void InserirOuAtualizar(Entidades.Paciente entidade)
            {
                throw new NotImplementedException();
            }

            public Entidades.Paciente SelecionarPorId(int id)
            {
                throw new NotImplementedException();
            }

            public List<Entidades.Paciente> SelecionarTodos()
            {
                throw new NotImplementedException();
            }

     public Entidades.Paciente SelecionarPorEmail(string email)
            {
                throw new NotImplementedException();
            }

        }

    class RepositorioPacientesSqlServer : IRepositorioPaciente
        {
            public void InserirOuAtualizar(Entidades.Paciente entidade)
            {
                throw new NotImplementedException();
            }

            public Entidades.Paciente SelecionarPorId(int id)
            {
                throw new NotImplementedException();
            }

            public List<Entidades.Paciente> SelecionarTodos()
            {
                throw new NotImplementedException();
            }

    public Entidades.Paciente SelecionarPorEmail(string email)
            {
                throw new NotImplementedException();
            }

        }

    Duvida:

    Como ficariam os metodos CRUD na camada de negocio? Terei que repetir a assinatura de cada metodo e delegar a operação à camada de acesso a dados?

    Acredito que isso seja redundancia. 

    segunda-feira, 16 de dezembro de 2013 17:10

Respostas

  • Vinicius, eu normalmente sempre uso a mesma assinatura, pois, se trata de um único caminho que você estará percorrendo até o acesso ao banco. 

    Vamos dar um exemplo simples, digamos que futuramente um outro programador pegue seu código para dar manutenção. Quando se utiliza assinaturas dessa maneira o cara vai bater o olho e saber que elas estão entrelaçadas, isso cabe a você mesmo, daqui a alguns anos você já não vai mais lembrar direito do que é o que no seu código. 

    Você pode claro utilizar assinaturas diferentes, apenas passando o parâmetro nada te impede. 

    Espero que ajude.


    Voce pode encarar um erro como uma besteira a ser esquecida, ou como um resultado que aponta uma nova direcao by Steve Jobs

    terça-feira, 17 de dezembro de 2013 11:57
  • Olá Vinicius isso mesmo as vezes o que é feito é sua camada DAO ser genérica então o parametro na sua DAO seria (T entity) por ex, mas qndo vc enviar na sua regra de negócio vc tem q passar a entidade e assim fazer as regras por ex se sua entidade passada na BLL não for nula e assim sempre q enviar para a DAO vc terá a certeza de que seu CRUD será realizado com sucesso ! 

    Eu utilizo este modo passo no BLL por ex BLL(ENTIDADETESTE) a DAO espera DAO(T entidade), pq ela está feita como genérica mas ao compilar é basicamente a mesma coisa só evita de reescrever codigo.

    terça-feira, 17 de dezembro de 2013 12:14

Todas as Respostas

  • Supondo q vc tenha sua DAO feita ok ! sua camada de negocios vai somente fazer as regras de negocio mesmo ou seja p inserir vc precisa do nome e numero entao vc valida na sua Business e chama a DAO q vai executar seu metodo !  Ou seja regras e validações pois a camada DAO so vai executar ! Espero q tenha entendido.
    segunda-feira, 16 de dezembro de 2013 18:27
  • Bom dia Daniel,

    Tudo bem, isso eu já entendi. A questão é que terei todas as assinaturas repetidas em duas camadas.

    Ex:

    AcessoDados.Paciente.InserirOuAtualizar(Entidades.Paciente p);

    E na camada de negocio a mesma coisa:

    Negocio.Paciente.InserirOuAtualizar(Entidades.Paciente p);

    ou 

    Negocio.Paciente.Salvar(Entidades.Paciente p);

    Não existe uma maneira melhor de se fazer isso?

    terça-feira, 17 de dezembro de 2013 11:47
  • Vinicius, eu normalmente sempre uso a mesma assinatura, pois, se trata de um único caminho que você estará percorrendo até o acesso ao banco. 

    Vamos dar um exemplo simples, digamos que futuramente um outro programador pegue seu código para dar manutenção. Quando se utiliza assinaturas dessa maneira o cara vai bater o olho e saber que elas estão entrelaçadas, isso cabe a você mesmo, daqui a alguns anos você já não vai mais lembrar direito do que é o que no seu código. 

    Você pode claro utilizar assinaturas diferentes, apenas passando o parâmetro nada te impede. 

    Espero que ajude.


    Voce pode encarar um erro como uma besteira a ser esquecida, ou como um resultado que aponta uma nova direcao by Steve Jobs

    terça-feira, 17 de dezembro de 2013 11:57
  • Olá Vinicius isso mesmo as vezes o que é feito é sua camada DAO ser genérica então o parametro na sua DAO seria (T entity) por ex, mas qndo vc enviar na sua regra de negócio vc tem q passar a entidade e assim fazer as regras por ex se sua entidade passada na BLL não for nula e assim sempre q enviar para a DAO vc terá a certeza de que seu CRUD será realizado com sucesso ! 

    Eu utilizo este modo passo no BLL por ex BLL(ENTIDADETESTE) a DAO espera DAO(T entidade), pq ela está feita como genérica mas ao compilar é basicamente a mesma coisa só evita de reescrever codigo.

    terça-feira, 17 de dezembro de 2013 12:14