4
respostas

Boas Práticas Dúvidas

Bom dia, na aula /task/27061/ o professor criou o método UpdateCadastro dentro da classe Pedido.cs

Foi criado apenas para fins de estudo ? ou realmente estes tipo de método CRUD é melhor criar nas classes que representam o banco ?

Mas ai, como ficaria nossa classe DAO ? não existiria mais ? ou existira mesmo assim ?

Pergunto mais voltado para Boas Práticas e Design Patterns (Que me assola a muito, muito tempo)..

Obrigado...

Ps.. Sua explicação é muito didática, conseguimos compreender muito bem o por que das coisas.... :)

4 respostas

Hum.. nosso DataServices já seria a nossa DAO (igual do post anterior na dúvida enviada)...

mas mesmo assim , qual melhor opção ?

  1. Implementar o CRUD somente na DataServices ?
  2. Implementar o CRUD na classe
  3. Nos dois... e mantendo os set como privados

Olá Jose,

quando se trata de orientação a objetos uma das coisas que nos preocupamos é a separação de responsabilidades. Imagina a sua classe de Pedido com todos os métodos referentes ao acesso aos dados também dentro dela? Esta classe ficaria um pequeno monstrinho. Fora outros problemas, como por exemplo se você precisar fazer um select e teria que instanciar um pedido só para fazer a busca pela lista de pedidos.

Por isso que em geral o que fazemos é separar tudo referente a dados em uma classe a parte. No caso do curso o Marcelo preferiu usar a estratégia do DataServices, que lembra um pouco da pegada no design pattern do DAO.

O único perigo de colocar tudo referente a acesso a dados numa única classe é ela virar um monstrinho também quando a quantidade de modelos do sistema crescer. Por isso que em geral no DAO também separamos em classes ainda mais específicas como o ProdutoDAO que só tem o trabalho de mexer com os dados de Produto, o PedidoDAO que é apenas do Pedido e assim por diante.

OK, só paara finalizar,

Imagine um cenário que temos uma classe Cadastro.cs que representa uma tabela no Banco de Dados, ok ?

Para cada classe teríamos...:

public class Cadastro.cs
{
 public int Id {get;set;}
public string Nome {get;set;}
  1. Classe CadastroDAO (que trataria o CRUD desta classe)
  2. Uma Interface da CadastroDAO para assinar os métodos
  3. Uma ViewModel desta classe (se necessário)

O que mais tenho que ter para esta classe ?, por exemplo Interface para assinar metodos padrão ...

Onde ficaria a seguinte regra de negócio, Só cadastrar Cliente com mais de X anos ? implementaria no DAO ? ou um outra classe ..

Olá Jose,

provavelmente você ainda vai precisar de algum controller que vai ser a ponte entre tudo isso, dado que ele chama as classes Model e depois determina qual a View será usada.

Já uma regra de negócio como você exemplificou de cliente precisa ter mais do que x anos é uma regra de validação. Para este caso, o mais indicado no .net é criar sua classe de validação herdando de ValidationAttribute e usá-la para anotar a propriedade da idade. Aqui um link que mostra como criar sua custom validation.