Olá,Gostaria de saber a opinião de vocês sobre a forma como foi implementada a validação no artigo bem legal do Andre Baltiere.Como podem ver ele removeu as validações da entidade (dataannotations) e levou para a camada de serviço atraves do metodo IsValid que será apresentado para cada entidade.O problema é que perdemos validação client-side via jquery.validation, como recuperar neste cenário? Além disso vocês conseguiram entender o valor em criar esta camada Service Pattern?Abraços!--
Você recebeu esta mensagem porque faz parte do grupo .Net Architects hospedado no Google Groups.
Para postar envie uma mensagem para dotnetar...@googlegroups.com
Para sair do grupo envie uma mensagem para dotnetarchitec...@googlegroups.com
Para mais opções visite o grupo em http://groups.google.com/group/dotnetarchitects?hl=pt-br
Acho que ele se expressou mal, Edmilson. Pela forma como ele fala, tudo leva a crer que ele coloca a validação no construtor. O que é exatamente o que eu faço.
Correto, na verdade a classe de domínio deve garantir que está sempre em um estado válido.
Um exemplo bem simples de validação no construtor:
public sealed class Produto
{
public String Nome { get; protected set; }
public Decimal Valor { get; protected set; }
public Produto(String nome, Decimal valor)
{
if (String.IsNullOrEmpty(nome))
throw new ArgumentOutOfRangeException("nome", "O nome do produto não pode ser vazio");
if (nome.Length > 50)
throw new ArgumentOutOfRangeException("nome", "O nome do produto não pode exceder 50 caracteres");
if (valor <= 0)
throw new ArgumentOutOfRangeException("valor", "O valor do produto deve ser maior que 0");
}
}
A ViewModel seria a representação da tela e pode sim conter os Data Annotation, nem sempre o formulário da apresentação é idêntico à classe de domínio, aí a grande vantagem da ViewModel.
Quanto ao Fluent Validation, não conheço, então não posso dar nenhuma opnião agora.
É um trade off que que dependendo do seu cenário é válido, com os annotations você barrará a maior parte das requests inválidas.
Apenas tome o cuidado de criar uma exception específica para validação e captura-la na apresentação, assim você exibe mensagens amigáveis em vez de estourar a tela de erro para o usuário.
Modelo rico ou anêmico não depende da utilização do DDD, a idéia é simples:
Modelo Rico apresenta comportamento, ou seja, métodos que representem seu comportamento real e as regras de negócio do seu sistema. (É fugir um pouquinho da idéia dos setters públicos e das classes com métodos CRUD).
Modelo Anêmico: Entidades não apresentam comportamento real apenas têm suas propriedades manipuladas por classes terceiras ou pela interface.
Aproveitando, as entidades não devem saber se persistir, isto deve ser responsabilidade de uma classe específica (normalmente um repositório).
Com exceção do padrão repositório, nada disso surgiu no DDD, então o mesmo não é requisito para chamar um modelo de “rico”. Alguns modelos podem ser ricos utilizando padrões como o Active Record (O Ruby on Rails é baseado neste padrão).
Vitor é exatamente assim que eu faço.
}
}
--
Você recebeu esta mensagem porque faz parte do grupo .Net Architects hospedado no Google Groups.
Para postar envie uma mensagem para dotnetar...@googlegroups.com
Para sair do grupo envie uma mensagem para dotnetarchitec...@googlegroups.com
Para mais opções visite o grupo em http://groups.google.com/group/dotnetarchitects?hl=pt-br