Israel Aéce

Microsoft MVP, MCP, MCAD, MCTS, MCPD e MCT

My Links

Blog Stats

Archives

Post Categories

Links

Login

O tipo de dado também é um validador

Analisando o projeto de um terceiro me deparei com um código que, ao meu ver, está errado (o exemplo não segue o padrão de nomenclatura encontrado lá):

public void DefinirDataDePagamento(DateTime? data)
{
    if(data == null)
        throw new ArgumentNullException("data");

    //executa a tarefa
}

Pelo que aparenta, a data que é passada como parametro para o método DefinirDataDePagamento é obrigatória e, caso seja nula, uma exceção do tipo ArgumentNullException é disparada. Se essa regra existe (não permitir que data seja nula), então porque o parametro data é criado como sendo um Nullable<DateTime> ao invés de apenas DateTime? Se fosse definido como DateTime, obrigatoriamente, o desenvolvedor deverá passar uma data (seja DateTime.MinValue, DateTime.MaxValue, DateTime.Now ou um DateTime customizado) ao utilizar o método.

posted on Thursday, September 11, 2008 10:03 PM

Feedback

# re: O tipo de dado também é um validador 9/11/2008 11:07 PM Felipe Fujiy

Tem gente que gosta de complicar =)

Vai ve o cara aprendeu o que era Nullable e quis usar hehehe

# re: O tipo de dado também é um validador 9/11/2008 11:52 PM Fabio Centenaro

Também concordo que não faz sentido, mas sempre existe a possibilidade de ser compatível com algum código já existente, o qual não pode ser alterado, e a solução encontrada foi disparar a exceção ao invés de quebrar o código removendo a função ...

# re: O tipo de dado também é um validador 9/12/2008 8:01 AM Marcos Dell Antonio

Esse tipo de código normalmente aparece quando os requisitos não estão completamente definidos (eles nunca estão!).

Então a primeira versão, aquela de testes, vai aceitando null.

Aí numa bela sexta feira de sol o cliente liga e diz: ou vocês tornam a data é obrigatória ou não terão final de semana!

Aí o pobre desenvolvedor faz o quê? Ao invés de refatorar o código inteiro atrás das chamadas do método, vai lá e faz este tipo de coisa.

Funciona aqui, estoura lá. O que importa é que agora posso ir pra casa. :)

Ótimo exemplo Israel.

Até +.

# re: O tipo de dado também é um validador 9/19/2008 7:45 PM Marcelo M. Maciel

Aqui usamos de uma forma parecida no projeto, pois o campo data pode não ser informado na inserção e ele é fundamental em alguns calculos de ponto de função, então se ele é nulo, pegamos um outro parâmentro para o calculo ;)

# re: O tipo de dado também é um validador 9/19/2008 8:33 PM Israel Aece

Boas Marcelo,

Eu usaria overload neste caso:

public decimal CalcularComissao()
{
return CalcularComissao(DateTime.Now);
}

public decimal CalcularComissao(DateTime database)
{
//....
}

Title  
Name  
Url
Box Code
Protected by FormShield
Comments