Category Archives: C#

Criando Atributos de Validação Customizados no ASP.NET MVC

Andei estudando um pouco de ASP.NET MVC, e para quem conhece, sabe que um dos recursos básicos que se vê logo de início é como usar atributos para validação dos modelos.

As validações básicas como campos requeridos, tamanho, expressão regular entre outros, já existem no próprio framework. Então para você determinar que um campo é requerido por exemplo, você decora a propriedade desta forma:

public class Pessoa
{
    [Required]
    public string Nome { get; set; }
}

Mas eu estava interessado em criar alguns customizados, pois seria bem prático poder decorar campos como CNPJ, CPF, CEP  e obter a validação específica direto no modelo.

Felizmente isso é muito fácil. Basta criar uma classe derivada de System.ComponentModel.DataAnnotations.ValidationAttribute e sobrescrever o método IsValid retornando true ou false. Veja como ficaria para o atributo CPF:

public class CPFAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var cpf = Convert.ToString(value);

        if (String.IsNullOrEmpty(cpf))
            return true;

        return CPF.Validate(cpf); // Aqui chamada para sua função de validar CPF
    }
}

Feito isso, basta decorar a propriedade específica da classe:

public class Pessoa
{
    [Required]
    public string Nome { get; set; }
    [CPF]
    public string CPF { get; set; }
}

O único detalhe é que essas validações ocorrem apenas no servidor, e não no cliente, como é o padrão (pelo menos no MVC3) da maioria das validações já presentes no framework. Então você vai precisar verificar o ModelState.IsValid no controller.

Esse código foi testado no ASP.NET MVC 3, então não sei se funciona em versões anteriores.

Visual Studio 2008 Versão Final

Já está disponível para download no MSDN a versão final do Visual Studio 2008. Não estou com muita pressa pra pegar minha cópia, mas devo pegar nos próximos dias para brincar um pouco enquanto me preparo para o TechEd Brasil.

Mais informações no blog do Soma e do Cezar.

Livro .NET for Delphi Programmers

Algum tempo atrás comecei a ler esse livro mas acabei deixando de lado porque na ocasião não estava tendo tempo de usar C#. Agora estou retomando e recomendo pra quem está indo do Delphi para .NET.
.NET for Delphi Programmer aborda .NET 2.0 para desenvolvedores Delphi que desejam usar C#. Ele é muito interessante porque compara classes da RTL/VCL do Delphi com as classes do .NET. Ele mostra funções que estamos acostumados no Delphi e quais são suas equivalentes em .NET. Mostra as diferenças entre forms da VCL e WinForms, etc.

O autor Jon Shemitz, que também já escreveu um livro sobre Kylix, tem uma linguagem objetiva e fácil de entender. O revisor técnico é o fera Hallvard Vassbotn, amplamente conhecido pela comunidade Delphi e escritor de vários artigos.

Enfim, é um livro que, na minha opinião, todo desenvolvedor Delphi indo para .NET deveria ler.

Microsoft Innovation Days: LINQ

Hoje participei do Innovation Days na Microsoft em SP, um evento que promete ser mensal para parceiros Microsoft. Foram 4 horas de palestras com desenvolvedores da Microsoft apresentando o LINQ (Language Integrated Query) e as novidades do C# 3.0. Palestras avançadas com conteúdo realmente muito interessante e com palestrantes competentes.

É satisfatório ver a evolução do C# e do .NET framework e ao mesmo tempo frustrante por não ser minha plataforma principal de desenvolvimento. Já estou começando a invejar os desenvolvedores que podem tirar proveito de todas essas novidades no dia-a-dia e sempre torcendo para que minha ferramenta principal evolua mais rapidamente.

Em .NET não tenho mais dúvida, é Visual Studio e C# mesmo e não tem pra ninguém. Os caras estão levando muito a sério isso e tanto a IDE como a linguagem estão ficando (ou já são) imbatíveis. Eu acho que até existem linguagens melhores que o C#, como o Chrome por exemplo, mas o C# é de fato o padrão em .NET. Praticamente tudo que se encontra na Internet está em C#. Componentes, exemplos, livros, etc, e isso queira ou não, acaba pesando na escolha da linguagem.

Se você ainda não conhece o LINQ, vale a pena dar uma pesquisada. Eu já sabia bem do que se tratava antes do evento, mas não tinha testado pessoalmente. Ele permite usar comandos muito parecidos com SQL direto no código em qualquer coleção de objetos .NET, banco de dados ou arquivo XML. Você poderia por exemplo consultar no seu banco de dados todos os clientes da cidade de Americana usando o sequinte comando:

var q = from c in Clientes where c.Cidade == "Americana" select c;

Isso seria traduzido para SQL, enviado para o banco e retornada uma coleção de objetos Cliente contendo somente os clientes que forem de Americana. Veja que tudo isso é verificado pelo compilador, com Intellisense e tudo o que temos direito. É realmente algo fantástico.

Alguns dos próximos Innovation Days devem falar de WCF (que me interessa muito) e WWF.

C#

Propriedades Simples em C# 3.0

Algum tempo atrás eu comentei sobre as propriedades implícitas que o Chrome oferece. É uma mão na roda.

Na nova versão do C#, poderemos declarar propriedades simples da seguinte forma:

class Pessoa
{
public string Nome { get; set; }
public int Idade { get; set; }
}

O que gera um código muito menos poluído do que o código em C# 2.0:

class Pessoa
{
private string nome;
public string Nome
{
get { return nome; }
set { nome = value; }
}

private int idade;
public int Idade
{
get { return idade; }
set { idade = value; }
}
}

Me parece que o nome desse recurso é auto-implemented properties. Gostei.

Migrando Win32 para .NET com RemObjects Hydra

A RemObjects está trabalhando na versão 3 do seu framework de plugins e a principal novidade é a integração absurdamente fácil de módulos Win32 e .NET. Você pode por exemplo, desenvolver módulos do seu aplicativo em .NET e usá-los sem nenhum esforço nos aplicativos Win32. E isso funciona inclusive para componentes visuais!

Se você não tem idéia do que estou falando, dê uma olhada neste aplicativo Delphi Win32:

Tá vendo esse ListBox, o Edit e o botão Add? Então, eles são componentes WinForms .NET, desenvolvidos em Chrome usando Visual Studio. Mas poderia ser Delphi .NET usando BDS mesmo, C# ou até VB.NET. Detalhe, eles estão dentro de um TForm comum, da VCL Win32 do Delphi.

Show de bola, não? Então dê uma olhada neste artigo da RemObjects que explica melhor como isso é possível. Pra quem deseja migrar os aplicativos para .NET aos poucos, o Hydra 3 parece ser uma ótima solução.

ModelMaker Tools sorteando licenças

A ModelMaker Tools estará sorteando licenças gratuitas de seus produtos. É uma ótima chance de ganhar o fabuloso CodeExplorer (para Delphi, C# ou Chrome) ou um dos outros produtos da empresa.

DPack para Visual Studio

Se você tem usado Visual Studio, não deixe de conhecer o DPack. Um plugin gratuito que tem recursos que facilitam nossa vida.

Dentre eles o que mais uso é o Code Browser, muito parecido com o Procedure List do GExperts do Delphi. Com um atalho de teclado ele abre uma tela com com todas os métodos presentes no código fonte, e conforme você vai digitando ele vai filtrando. Com um Enter ele te leva direto para o código do método selecionado. No Delphi eu não consigo programar sem isso há muitos anos!

Ele suporta C#, VB.NET, J#, C++ e também Chrome!

ASP.NET 1.1 e 2.0 lado a lado

Hoje precisei pela primeira vez colocar um aplicativo ASP.NET 2.0 em produção. Foi um pequeno aplicativo que usa Mobile WebForms, ou seja, para ser acessado por celulares e PDAs. Fiz com o Visual Studio 2005 com C#, pois no Delphi tentei usando Intraweb e só quebrei a cara. O interessante é que este aplicativo consome um WebService de um outro aplicativo meu, ASP.NET 1.1, feito em ECO no Delphi 2006, acessando Firebird.

Tudo isso rodando no mesmo servidor. Parece uma salada, não? Pois bem, quando coloquei tudo no servidor, comecei a receber a mensagem de erro:

It is not possible to run two different versions of ASP.NET in the same IIS process. Please use the IIS Administration Tool to reconfigure your server to run the application in a separate process.

A mensagem diz que preciso rodar aplicativos de diferentes versões do ASP.NET em processos diferentes. Acho que isso só acontece no IIS 6.

Recorri ao nosso amigo Google, e encontrei aqui passo a passo como criar um Pool diferente para meu aplicativo ASP.NET 2.0 e tudo funcionou. Fica a dica, caso alguém enfrente o mesmo problema.

try..except..finally vs. try..catch..finally

Isso é possível no C#:

try
{
  ...
}
catch
{
  ...
}
finally
{
  ...
}

No Delphi, eu preciso de dois blocos try. Um para o except e outro para o finally:

try
  try
    ...
  except
    ...
  end;
finally
  ...
end;

Taí uma coisa simples que seria muito legal se fosse suportado no Delphi. Ficaria mais simples:

try
  ...
except
  ...
finally
  ...
end;
C#

Aprendendo C#

Meu amigo Juliano Carvalho está blogando sobre OO, .NET e principalmente C#. Uma boa referência para quem está interessado nesta poderosa linguagem.

Papers BorCon 2003 e 2004

Muito conteúdo interessantíssimo da BorCon americana (2003 e 2004), disponibilizado gratuitamente no site da Borland.

Mais conversão Delphi para C#

Logo após conhecer o conversor Delphi – C# indicado pelo Facunte, me deparo com este post do Julian sobre um parâmetro do próprio compilador Delphi .NET que também converte código Delphi Language em C#.

Será que o futuro de tudo é C#? Caramba.. ;)

Conversor Delphi para C#

Meu amigo Facunte indicou em seu blog um conversor Delphi para C#, Delphi2CS!

Test-Driven Development com C#

Esse foi o tema da minha apresentação no evento de sábado realizado no Centro XML, dentro da USP em São Paulo. O ppt da minha apresentação pode ser baixado aqui, e o código fonte dos demos aqui.

Update: Sem querer achei aqui as fotos que alguém tirou do evento.

C#

C# Coding Guidelines

Você é desenvolvedor C# ou pretende usá-lo? Pode ser uma boa dar uma olhada nestas recomendações para estilo de código usadas internamente na Microsoft, publicadas por Brad Adams em seu blog.

Em Delphi, veja este meu post anterior.