none
Dúvidas DTO -> DAL -> BLL RRS feed

  • Pergunta

  • Olá pessoal,

    Até o presente momento vinha trabalhando da velha forma DTO->DAL->BLL->User Interface

    Porém, já li por aqui que separar o comportamento da classe não é o mais correto por quebrar o paradigma de OO.

    Ou seja, algo assim:

    class ClienteDTO
    {
          public int Codigo { get; set; }
          public string Nome {get; set;}
          .......
    }

    class ClienteDAL
    {
          public void Incluir(ClienteDTO cliente)
          {}
          // demais metodos de atualizacao/consulta
    }

    Deveria ficar assim:

    // classe unificando DTO + DAL
    class Cliente
    {
           // propriedades
           public int Codigo { get; set; }

           // construtor
           public Cliente(int codigo, string nome.....
           {
                 Codigo = codigo;
                 ......
           }

           // metodos Incluir, Alterar, Excluir, Listar ....
           public void Incluir(....
    }

    Estou correto?


    Se sim, como faria minha BLL? Hoje minha BLL funciona assim:

    class ClienteBLL
    {
          public void Incluir(ClienteDTO cliente)
         {
               // VALIDO PREENCHIMENTO DOS CAMPOS DO OBJ. CLIENTEDTO

              // CHAMO METODO INCLUIR DA DAL
         }
    }

    Como fazer as validacoes agora antes de chamar um dos métodos de acesso a dados?

    Exemplificando:

    Cliente cli = new Cliente(codigo, nome);

    cli.Incluir(); // aqui, antes da inclusao, devo fazer a validacao dos campos, mas onde?

    Não sei se consegui ser claro.
    Fico no aguardo.
    Obrigado.

    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    quarta-feira, 10 de junho de 2009 20:01

Respostas

Todas as Respostas

  • Robson,

    Sim, separar comportamento de dados te leva a programação procedural. Não é OO. DTOs não são Os, não são objetos. O "O" lá não devia existir.

    Ainda assim, você está propondo juntar código de negócio (dados de um cliente), com comportamento de acesso a dados. São coisas diferentes. Eu manteria separado. O padrão que você está apresentando é muito parecido com um padrão ActiveRecord.
    Na sua classe cliente, você deve ter métodos de negócio do cliente (SolicitarDesconto, Notificar, etc...). E evite chamar a entidade cliente de ClienteDTO. Cliente é cliente e acabou.

    Quanto a validação, a entidade cliente deve se validar. Dê uma olhada no modelo de validação do Enterprise Library, que usa atributos e classes de auxílio. É bem legal.
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    quinta-feira, 11 de junho de 2009 03:45
    Moderador
  • Olá Giovanni

    Quando voce diz "Ainda assim, você está propondo juntar código de negócio (dados de um cliente), com comportamento de acesso a dados. São coisas diferentes. Eu manteria separado" , como seria? Não ficou muito claro.

    Eu teria minha classe Cliente com os dados (atributos) do cliente e os metodos de negocio. E os metodos de acesso a dados (consultar clientes - geral, por nome, etc, incluir, alterar, excluir) ?? Se puder me dar um exemplo ou um artigo onde isso esteja mais "visual", agradeço.

    Obrigado.

    []s


    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    quinta-feira, 11 de junho de 2009 04:05
  • Oi Robson,

    Você pode usar o padrão repositório ou um Data Access Object (DAO) diretamente para fazer suas consultas e operações de contato no banco de dados.
    Alguns posts para ler:
    http://unplugged.giggio.net/post/Repositorios-e-a-abstracao-do-acesso-aos-dados.aspx
    http://unplugged.giggio.net/post/DDD-Repositorios-nao-sao-DAOs.aspx
    http://unplugged.giggio.net/post/ASPNet-MVC-DDD-e-Entity-Framework-na-capa-da-Net-Magazine-58.aspx
    Nesse último vai ter um link para baixar o projeto de exemplo no site da Devmedia.

    Se DDD interessar, veja esse vídeo:
    http://video.google.com/videoplay?docid=-7056786168177403020&hl=en
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    quinta-feira, 11 de junho de 2009 04:11
    Moderador
  • Qta informação!!
    Vou estudar os posts passados e tbem olhar a questao de validacao no Enterprise Library.
    Quero começar pela forma mais simples. Não quero dar um passo maior que a perna.

    Obrigado.



    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    quinta-feira, 11 de junho de 2009 04:17