Rodrigo Sendin

.NET Framework, C#, ASP.NET, Visual Studio, WPF, Silverlight, Expression Blend, Arquitetura de Sistemas, Desenvolvimento de Software e afins.

terça-feira, 27 de janeiro de 2009

db4o

Muita gente me faz a pergunta: “Que solução utilizar para persistência de dados?” Eu inclusive já abordei esse assunto aqui no Blog quando falei do futuro do LINQ to SQL:

Minha resposta na maioria das vezes é: Depende do Projeto.

Se você tem um projeto de pequeno ou médio porte ou de prazo apertado, eu sugiro as soluções que vão simplificar o trabalho e aumentar a produtividade. Particularmente eu uso os DataSets Tipados do ADO.NET que atendem bem a estes cenários.

Agora, se você tem prazo sobrando e vai desenvolver um projeto relativamente grande, vale a pena investir tempo em frameworks de mapeamento objeto/relacional, como nHibernate e ADO.NET Entity Framework. Vale também planejar sua aplicação em camadas, utilizando algum padrão de projeto que vise à reutilização de código. Certamente você terá ganhos a longo prazo.

Mas no geral eu sempre tive um pé atrás com soluções de mapeamento objeto/relacional, ou padrões que criam complexos mecanismos de gravação/recuperação de dados. Além de tornarem tudo mais trabalhoso, o mercado está inundado de soluções que visam resolver o problema de incompatibilidade entre a orientação a objetos e os bancos de dados relacionais. O que dá a entender que não existe “A solução definitiva”. O que temos são variadas formas de se driblar este problema, cada uma delas com seus benefícios e defeitos.

Recentemente eu tenho dado atenção a outro tipo de solução para este problema: Os Bancos de Dados Orientado a Objetos. Não vou entrar nos detalhes de siglas e definições deste tema, basta saber que há muita gente desenvolvendo databases ou frameworks que armazenam os dados na forma de Objetos, e não em estruturas relacionais.

Um deles que dou destaque neste post, é o db4o (sigla de db4objects) http://developer.db4o.com/. Este database orientado a objetos foi criado inicialmente para Java, mas hoje tem uma ótima versão para .NET. No link citado você encontra o download da última versão, logo na primeira página.

De forma bem resumida posso dizer que as principais características do db4o são:

• É simples de usar, basta usar uma única DLL para as operações básicas;
• Comporta soluções locais e também Client/Server;
• É Open Source, e GPL pra quem é GPL;
• Compatível com varias formas de Query, como QBE e o LINQ do .NET;
• Possuí ferramentas de gerenciamento e configuração para ambientes de servidor;
• Comporta ambientes de replicação;
• Possuí uma versão para o .NET Compact Framework e para o Projeto Mono;
• Tem uma comunidade de desenvolvedores e usuários muito ativa;

Hoje se alguém me faz a pergunta lá de cima, eu sugiro considerar essa opção também, principalmente se o uso de um Banco de Dados Relacional não é pré-requisito do projeto.

Com certeza é difícil vender essa idéia, afinal os bancos de dados relacionais tem dominado o mercado ja a algum tempo. Mas de modo prático pro cliente final não muda nada. O que certamente vai melhorar com o uso de uma ferramenta como o db4o, é a sua produtividade, e esse benefício pode ser repassado para o cliente final em forma de redução de custos.

Mas vale a pena ficar por dentro de como um banco de dados orientado a objetos funciona, e quais são os benefícios e problemas frente aos relacionais. É por isso que eu vou começar a abordar este assunto aqui em futuros posts, de forma mais detalhada e com demonstrações técnicas. Se você tiver interesse em conhecer mais, também começarei a publicar alguns artigos nas edições impressas da .NET Magazine sobre esse tema. E também vídeo-aulas no Portal da DevMedia (www.devmedia.com.br). Aguarde e confira!

Grande Abraço!

Marcadores: , , ,

terça-feira, 9 de setembro de 2008

LINQPad

Recentemente, na coluna .NET Brasil que escrevo na .NET Magazine falei um pouco sobre o dilema de se escrever queries em LINQ, e como podemos nos acostumar a essa nova forma de se fazer pesquisas no banco de dados.

Se você nunca ouviu falar do LINQ, segue uma breve definição: Esta é a sigla para Language Integrated Query que é uma linguagem integrada ao C# e VB.NET para a execução de queries. A idéia é substituir o uso da linguagem SQL por uma linguagem compatível, semelhante e integrada ao código gerenciado .NET.

A partir do momento em que você vai colocando em prática o LINQ em suas aplicações, surge um dilema sério: Como nos acostumar a escrever queries em LINQ, já que estamos tão acostumados a escrever comandos em SQL?

As diferenças não são tão grandes assim, mas há uma mudança considerável na ordem em que escrevemos os comandos. O que antes escrevíamos assim:

Agora escrevemos assim (C#):



Veja que primeiro vem o FROM, em seguida o WHERE e o ORDERBY e só no final é que vem a clausula SELECT. Com essa inversão das cláusulas, ganhamos o benefício do intelisense, na hora de escolher os campos que serão retornados pela consulta.

Não é fácil para quem está começando e já é acostumado com o jeito antigo. Uma ferramenta essencial nesse momento é o LINQPad, do Joseph Albahari. É uma ferramenta gratuita que você pode baixar a partir deste link: http://www.linqpad.net/

No LINQPad podemos criar conexões com nossos databases e executar consultas utilizando a linguagem LINQ. Seria o equivalente à ferramenta de queries que temos no SQL Server Management Studio. Veja na figura abaixo um exemplo de query executada no LINQPad:


Essa é sem dúvida uma ferramenta obrigatória para quem está começando no LINQ, não deixe de baixar e utilizar!

Grande Abraço e até a próxima!

Marcadores: , ,

domingo, 31 de agosto de 2008

C# 3.0 : Extension Methods

A versão 3.0 da linguagem C# nos trouxe muitas melhorias, que se deram principalmente pela viabilização do LINQ (Language Integrated Query). Muitas destas novidades podem ser aproveitadas no nosso dia a dia, e neste Post eu vou falar um pouco sobre uma delas: os Extension Methods.

Os Extension Methods ou métodos de extensão são muito parecidos com os métodos estáticos, que podem ser chamados sem a necessidade de instanciarmos um objeto da classe.

Porém o objetivo de um extension method, é “adicionar” métodos a um uma classe já existente, sem a necessidade de modificarmos esta classe. Legal né?


Um exemplo: Que tal seria se tivéssemos um método ToZeroLeft em objetos da classe int? Ajudaria bastante quando precisamos colocar zeros à esquerda de um valor, e gravá-lo em uma string.


Este é apenas um exemplo, com certeza você vai achar diversas outras aplicações para os extensions methods. Chega de conversa e vamos logo ver como isso funciona.


Os seus Extension Methods devem ser criados como métodos estáticos, de preferência em uma classe destinada apenas para estes tipos de métodos. O primeiro parâmetro do método deve ser precedido do modificador this. E o seu tipo define o tipo que será “modificado”, ganhando este novo método. Veja o exemplo abaixo:


Toda vez que importarmos este namespace ExtensionMethods em qualquer outra classe, as variáveis do tipo int “ganharão” o método ToLeftZeros, veja o exemplo abaixo:


Note que a variável numero do tipo int possuí agora o extension method ToLeftZeros. Veja que no intelisense este método aparece com uma pequena seta apontando para baixo, indicando que este é um método de extensão.

Para nós, “usuários finais do C#”, a impressão é que modificamos a classe int, adicionando a ela um novo método. Porém por de trás dos panos, o compilador irá transformar isso em uma chamada ao método estático que criamos.

Como disse no começo, esta é uma funcionalidade que veio no C# 3.0 para viabilizar algumas features do LINQ. Para comprovar isso é simples, adicione uma referencia ao namespace System.Linq e veja o que acontece à suas Arrays:


Note que elas vão “ganhar” uma série de métodos relacionados à linguagem LINQ, como por exemplo o OrderBy.

Espero que faça um ótimo uso dos Extension Methods. Abaixo coloco algumas ótimas referencias sobre este tema:

Grande Abraço e até a próxima!

Marcadores: , ,

segunda-feira, 24 de dezembro de 2007

ASP.NET Dynamic Data Controls

Olá a Todos!

Neste POST eu gostaria de falar um pouco de uma funcionalidade do ASP.NET que ainda está por vir, e que eu vi no TechEd 2007 em uma palestra do Ramon Durães.

Eu quero falar sobre o ASP.NET Dynamic Data Controls. Esta funcionalidade é apenas uma das features que estão no ASP.NET Futures (July 2007), que você encontra para download aqui neste link:


http://www.microsoft.com/downloads/details.aspx?FamilyId=A5189BCB-EF81-4C12-9733-E294D13A58E6&displaylang=en
O Dynamic Data Controls é um conjunto de controles que teremos no ASP.NET, que recuperam informações do database em tempo de execução e criam uma interface para exibição e até persistência de dados automaticamente.


Não deu pra entender? É mais ou menos assim: Pense no database da sua empresa. Lá vai ter uma tabela chamada Clientes, não vai?





Você cria uma conexão com o seu database na aplicação, em seguida cria uma página (usando um template Dynamic Data Web Form) com o mesmo nome da sua tabela, “Clientes” no caso.


O resultado é uma página já com todos os controles para exibição e manutenção dos dados da tabela clientes.


Na página já são criados e configurados em tempo de execução, um controle que lista todos os registros da tabela, com funcionalidades de exclusão e edição. E também um controle para inclusão de novos registros.

Se configurarmos um Theme com Skins, ainda podemos aperfeiçoar a formatação gráfica destes controles.

Com uma ferramenta deste tipo, bem configurada, imagine a produtividade que você pode ganhar! Essa é uma das novidades que está por vir, e com isso podemos ter uma idéia clara pra onde o ASP.NET está indo.

Não deixe de dar uma olhada mais a fundo nos Dynamic Data Controls do ASP.NET , você não vai se arrepender.

Grande Abraço e até a Próxima!

Marcadores: , ,