quarta-feira, 4 de fevereiro de 2009

Snippets

Olá Pessoal, desculpem ter passado janeiro em branco, mas os trabalhos aqui tem ficado cada vez mais pesados. :-)

Semana passada saíu no blog do scott'gu o seu tão esperado post sobre o release candidate do MVC. Como eu esperava, houveram alguns breaking changes, mas a estrutura quase não foi alterada. Essa versão trouxe integrado com o visual studio uma maneira muito legal de basear a construção de views em templates que são usadas com certa frequência. Pra ficar melhor, ainda podemos criar nossas próprias views.

É lógico que algumas ferramentas como o codesmith há tempos faziam o mesmo trabalho. Mas a integração dessas ferramentas com o visual studio nunca foi lá grande coisa.

Mas com base nessa tecnologia, fiz um comentário no blog do scott'gu sobre a possibilidade de fazer visual studio snippets atenderem a esse mesmo padrão. Pois isso é uma porta se abrindo para termos snippets que suportam parâmetros de entrada e até snippets genéricas integradas com o visual studio.

Exemplo:
Imaginem a classe produto:

class Produto{

[IdKey] //estou chutando aqui um atributo relevante para o snippet
public int Id { get; set; }
public string Nome { get; set; }
public decimal Preco { get; set; }
}


e você está escrevendo um model no MVC e decide elaborar as rotinas de validação.

Então você digita dentro da classe:

ModelValidation (e bate duas vezes no tab. Than!)

Poderia resultar numa validação padrão baseada num template, como a classe abaixo:

public class ProdutoModelValidation{

public class ValidateInput(Produto p){

//em funcao do key ID, a validacao aqui é desse jeito
if ( p.Id > 0 && p.Id != null ) ...

//o snippet sabe o que fazer quando trata tipos padrão string, como num template
if ( p.Nome != null) ...

//o snippet tem ciência dos tipos que ele está tratando, pois ele está acessando a
// classe produto através de reflection
if ( p.Preco != 0 ) ...

}


}


Bom, fica registrada aqui a idéia :-) vou encaminhar alguma coisa pro time do VS2010