Usuário com melhor resposta
Dúvidas DTO -> DAL -> BLL

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]
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- Marcado como Resposta Robson Castilho ® terça-feira, 3 de novembro de 2009 02:10
-
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- Marcado como Resposta Robson Castilho ® terça-feira, 3 de novembro de 2009 02:11
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- Marcado como Resposta Robson Castilho ® terça-feira, 3 de novembro de 2009 02:10
-
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] -
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- Marcado como Resposta Robson Castilho ® terça-feira, 3 de novembro de 2009 02:11
-
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]