Eu estava querendo encontrar uma resposta sólida para a questão de ter ou não verificações em tempo de execução para validar as entradas com o objetivo de garantir que um cliente permaneça no final do contrato, conforme o design por contrato. Por exemplo, considere um construtor de classe simples:
class Foo
{
public:
Foo( BarHandle bar )
{
FooHandle handle = GetFooHandle( bar );
if( handle == NULL ) {
throw std::exception( "invalid FooHandle" );
}
}
};
Eu argumentaria neste caso que um usuário não deve tentar construir um Foo
sem um válido BarHandle
. Não parece correto verificar se bar
é válido dentro do Foo
construtor. Se eu simplesmente documentar que Foo
o construtor requer um válido BarHandle
, não é suficiente? Essa é uma maneira adequada de impor minha pré-condição no projeto por contrato?
Até agora, tudo o que li tem opiniões contraditórias sobre isso. Parece que 50% das pessoas diriam para verificar se bar
é válido, os outros 50% diriam que eu não deveria fazê-lo, por exemplo, considere um caso em que o usuário verifique se BarHandle
está correto, mas uma segunda verificação (e desnecessária) também está sendo feito dentro do Foo
construtor.