Pergunta

Microsoft apresentou recentemente uma versão do framework seus Código dos Contratos em DevLabs com uma licença comercial. Nós estamos interessados ??em usá-los no nosso projeto (principalmente C #, alguns C ++ / CLI) para substituir gradativamente todo o código de validação personalizada, mas eu estou interessado em saber sobre a experiência outras pessoas tiveram com ele antes de se comprometer com ele, especificamente:

  • Você acha que o quadro é suficientemente maduro para projetos comerciais grandes e complexos?

  • Que problemas têm você tiver ao usá-lo?

  • Que benefícios você tem com isso?

  • É atualmente mais dor do que vale a pena?

Eu percebo que esta é uma pergunta um tanto subjetiva, pois requer opinião, mas dado que este quadro é uma parte muito significativa do .NET 4.0 e (potencialmente) mudar a forma como todo o código de validação de escrita, espero que esta questão será deixada em aberto para recolher experiência sobre o assunto para me ajudar a tomar a decisão de um específico, pergunta responde:

deveríamos estar começando a usá-lo no próximo mês?

Note que não enviamos uma API de código, apenas um serviço web, portanto, para a maioria dos código de quebrar a compatibilidade em termos do tipo de exceção gerada não é uma preocupação. No entanto, como eu estou esperando que mais pessoas do que apenas me vai beneficiar a partir deste post e suas respostas, nenhum detalhe em torno desta área é mais do que bem-vindos.

Foi útil?

Solução 2

Eu fui brincar com os contratos de código alguns mais me em um pequeno, mas moderadamente complexo projeto autônomo, que precisa herdar de algumas classes BCL e utilizar outros.

A coisa contratos parece ótimo quando você está trabalhando em um ambiente completamente isolado com apenas seus próprios tipos de código e primitivas, mas assim que você começar a usar as classes BCL (que até .NET 4.0 não têm os seus próprios contratos) a verificador não pode verificar se eles vão violar qualquer dos requer / garante / invariantes e assim você terá um monte de avisos sobre restrições potencialmente insatisfeitos.

Por outro lado, ele faz encontrar algumas restrições inválidos ou potencialmente insatisfeitos que poderiam ser erros reais. Mas é muito difícil encontrar estes porque há muito barulho que é difícil descobrir quais você pode corrigir. É possível suprimir os avisos das classes BCL utilizando o mecanismo de assumir, mas isso é um pouco auto-destrutivo como essas classes terão contratos no futuro e suposições irá diminuir o seu valor.

Assim, a minha sensação é que, por agora, porque em 3,5 estamos tentando construir sobre um quadro que o verificador não suficientemente compreender, que é provavelmente vale a pena espera por 4,0.

Outras dicas

A última resposta madura para isso foi em 2009 e .NET 4 está fora. Eu acho que estamos devido para uma atualização:

contratos de código poderia muito bem ser maduro o suficiente para os seus lançamentos de depuração.

Sei que isso é um pouco de um upgrade de “inofensivo” para “Praticamente Inofensiva”.

O Contratos home page links para documentação bastante completa em formato PDF. As diretrizes de uso contornos de documentação na seção 5. Para resumir, você pode escolher como bravo você sente sobre as ferramentas contrato re-escrever seu IL em seu lançamento constrói.

Estamos usando o modo “não reescrever meu IL Release”.

Até agora, eu estou mais gostando disso benefício inesperado: há menos código, assim menos código para teste . Todas as suas cláusulas guarda derreter.

if(arg != null) { 
    throw new ArgumentNullException("arg"); 
}
// Blank line here insisted upon by StyleCop

torna-se:

Contract.Requires(arg != null);

As suas funções são mais curtos. A sua intenção é clara. E, você não tem que escrever um teste chamado ArgumentShouldNotBeNull apenas para atingir 100% de cobertura.

Até agora, eu correr em dois problemas:

  • Eu tinha um teste de unidade que contou com uma falha contrato para ter sucesso. Você pode argumentar a existência do teste foi um erro, mas eu queria documentar esta proibição especial sob a forma de um teste. O teste falhou no meu servidor de compilação porque eu não tinha as ferramentas instaladas. Solução:. Instalar as ferramentas

  • Estamos usando duas ferramentas que reescrever IL: contratos de código e PostSharp . Eles não se dão muito bem. PostSharp de 2.0.8.1283 corrigiu o problema. Eu cautelosamente avaliar como qualquer duas ferramentas IL-reescrita se dar bem, no entanto.

Até agora, os benefícios são superam os riscos.

Responder às preocupações out-of-date levantadas em outras respostas:

  • documentação do contratos de código é bastante completo, embora, lamentavelmente, em PDF.
  • Há pelo menos um fórum Código dos Contratos organizada pela Microsoft.
  • Código dos Contratos Standard Edition é livre se você tem qualquer licença VS2010.
  • .NET 4 está fora. Já corri em contratos da Microsoft na implementação de interfaces de coleção genérica.

A julgar pelo esta discussão eu diria que não é bastante maduro o suficiente para usar para um projeto de nível empresarial. Eu não usei isso mesmo, mas as pessoas ainda estão correndo para bugs que traria o seu projecto-contrato crítica a um impasse. Parece realmente um grande quadro e os vídeos de exemplo que eles fornecidos ter sido emocionante, mas eu esperaria para:

  • Existência de um fórum da comunidade. Você vai querer ser capaz de discutir os problemas inevitáveis ??que você correr para com outros desenvolvedores, e você quer saber que há um decentemente forte base de desenvolvedores fora lá para discutir soluções com o.
  • Um lançamento de sucesso do projeto piloto. Geralmente, quando a Microsoft Research libera algo que eles acham que é maduro o suficiente para ser usado em um projeto comercial, eles vão trabalhar com uma organização para piloto, e então liberação esse projeto de código aberto como uma prova de conceito e julgamento-por-fogo de todas as principais características. Isso daria muita confiança que a maioria dos cenários de contratos comuns são cobertos e de trabalho.
  • documentação mais completa. Puro e simples, em algum momento você vai querer fazer algo com contratos que você não pode fazer ainda usando contratos de código Microsoft. Você quer ser capaz de raciocinar de forma rápida e claramente que o cenário é ainda não é suportado. A documentação atual está indo para mantê-lo adivinhar e tentar coisas diferentes, embora, na minha opinião, o que resultará em um monte de tempo perdido.

Não é maduro o suficiente.

Será assim que Microsoft libera-lo com as edições acessíveis de VS, mas sem a análise estática de código não é utilizável em tudo.

As edições de VS, que tem, são tão insanamente caro que apenas um punhado de pessoas nunca vai ser capaz de pagá-lo.

É uma vergonha Microsoft matou essa idéia incrível com sua política de preços. Desejo contratos de código iria se tornar mainstream, mas eles não vão.

épico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top