Disponível ASP.NET Dynamic Data Preview

4/10/2008 12:07:00 PM By Felipe Pessoto

A meses atrás foi liberado um Preview do ASP.NET 3.5 Extensions que continha novas funcionalidades que estão por vir este ano (incluindo melhorias no ASP.NET AJAX, ASP.NET MVC, Suporte ao ASP.NET Silverlight e ASP.NET Dynamic Data).

O ASP.NET Dynamic Data adicionou várias novas funcionalidades que permitem que você construa rapidamente uma página de acesso a dados que funcionam com LINQ to SQL ou LINQ to Entities. ASP.NET Dynamic Data permite que você automaticamente tenha uma página totalmente funcional de entrada de dados e relatórios que são dinamicamente construídas a partir dos meta-dados do seu modelo ORM. Além disso, você pode opcionalmente sobrescrever e customizar qualquer um dos templates usando HTML ou o código que você quiser, dando um controle total ao desenvolvedor.

ASP.NET Dynamic Data Preview

Hoje foi liberado uma atualização do ASP.NET Dynamic Data Preview. Para saber mais e fazer o download clique aqui.

Este novo dynamic data preview agora funciona com os controles de dados padrão do ASP.NET (GridView, ListView, FormView, DetailsView, etc). O suporte ao Dynamic Data permite que esses controles possam manipular automaticamente relacionamentos com chave-estrangeira. Por exemplo, um gridview irá automaticamente mostrar o nome do registro na coluna de chave estrangeira em vez do código dela:

 

O novo dynamic data também suporta validações automáticas (tanto no lado cliente quanto no servidor) levando em consideração as constraints que você tem no seu modelo de dados. Por exemplo, se uma coluna no banco de dados é limitada em 50 caracteres, e está marcada como non-nullable, controles de validação apropriados serão aplicados à página para garantir que essas regras serão seguidas. Se você mudar as constraints dentro das suas classes LINQ to SQL ou LINQ to Entities, a interface gráfica irá automaticamente fazer essas mudanças na próxima vez que for chamada, para garantir que as novas constraints serão obedecidas.

Todas as funcionalidades acima estarão presentes para o LINQ to SQL e LINQ to Entities.


Visual Studio Dynamic Data Project Wizard

Outra novidade foi adicionada ao ASP.NET Dynamic Data, o "Time de Ferramentas Web do VS" também terminou um primeiro preview de um novo assistente para projetos usando dynamic data que permite criar rapidamente um site para manipular dados. O assistente permite que você selecione um banco de dados, e então as tabelas, views e sprocs que você deseja construir no seu modelo LINQ to SQL:



Depois de criar um modelo de dados, o assistente deixa você escolher facilmente o template das páginas para manipular os dados:



Você pode então escolher qual tipo de interface é suportada em cada página:

Covariância e Contravariância em C#, Parte Quatro: Variância de Delegate Real

4/1/2008 2:49:00 PM By Felipe Pessoto

Nos dois últimos artigos da série falei sobre dois tipos de variância que o C# suporta - covariância de array e covariância (nos tipos de retorno) e contravariância (nos tipos dos argumentos) na conversão de grupo de membros para delegate.

Hoje vamos generalizar este último tipo de variância.

Hoje no C# 3.0, embora seja válido atribuir um grupo de membros sem tipo para uma função que retorne uma Girafa para uma variável do tipo Func<Animal>, não é válido atribuir uma expressão tipada do tipo Func<Giraffe> para uma Func<Animal>. Tipos Generic do delegate são são sempre invariantes no C# 3.0. Isso parece fraco.

Suponha que nós temos a possibilidade de declarar os tipos dos parâmetros dos tipos generic do delegate como sendo covariante ou contravariante. Para simplificar (e manter a consistência com a notação existente nas especificações da CLR) iremos escrever os parâmetros de tipo covariante com um + e os parâmetros de tipo contravariantes com um -.

Esta não é uma notação muito atraente. Mas por enquanto vamos usá-la. A forma de se lembrar o que o + significa é "este tipo aceita tipos maiores na atribuição", e menores para o -.

Considere, por exemplo a nossa função padrão:

delegate R Func<A, R>(A a);

Desde que R apareça somente no retorno e A apareça somente na lista de parâmetros, podemos fazer do R covariante e o A contravariante:

delegate R Func< -A, +R >(A a);

Então novamente, você pode pensar nisto como "você pode fazer o A menor ou o R maior" (ou, é claro, ambos). Por exemplo:

Func<Animal, Giraffe> f1 = qualquer;

Func<Mammal, Mammal> f2 = f1;

Normalmente no C# esta atribuição será inválida porque os delegates são parametrizados por tipos diferentes. Mas desde que nós temos Func variante em ambos tipos de parâmetros, esta atribuição deveria se tornar válida para adicionar este tipo de variância à uma futura versão do C#.


Será que isto faz sentido até agora?

Esta regra nem sempre é correta! Algumas vezes o parâmetros de entrada precisa ser de um tipo de parâmetro covariante (no nosso exemplo A é contravariante). Iremos discutir isto somente no próximo artigo.

Chamar métodos static por tipo variável é ilegal - Parte II

3/13/2008 2:14:00 PM By Felipe Pessoto

Na primeira parte vimos que os métodos static não sempre determinados em tempo de compilação, e usamos este fato para justificar o porque dos métodos static não poderem ser chamados em tipos passados por parâmetro. Mas os argumentos de tipos das Generics não são determinados em tempo de compilação?

No lado de quem os chama, sim. Mas para quem é chamado, o código enviado em tempo de compilação para um método genérico é inteiramente genérico. E assim continuará até que o jitter encontre o código em tempo de execução e faça a substituição dos tipos por argumento pelos tipos passados por parâmetros.

Considere a seguinte Generic:

public class C<T> { public string M() { return typeof(T).ToString(); } }


Quando você a compila, o compilador enviará uma definição de classe genérica que diz apenas que nós temos uma classe, que tem um tipo por parâmetro, e um método que chama o ToString(). Este é todo o código que é enviado para esta classe em tempo de compilação.

Para deixar mais claro, quando você diz:

void N() { C<int> c = new C<int>(); string s = c.M(); //...

O compilador não cria uma cópia da classe no código IL com o T substituído por int.

Em vez disso, o que acontece é que quando seu método N é jittado, o jitter diz, Hey, Eu preciso traduzir C<int>.M. Neste ponto o jitter consome o IL genérico emitido pelo C<T>.M e cria um novo código x86 (ou o que for) com int substituindo T.

Diferentemente dos templates no C++ que não definem tipos genéricos. Em vez disso, templates C++ são basicamente um atalho em tempo de compilação, como um complexo buscar-e-substituir. Se você dizer C<int> no C++, então em tempo de compilação, o compilador C++ textualmente irá substituir int pelo T e enviar o código como se você tivesse escrito a classe usando o int.

Se o C# tivesse templates em vez de macros então um método static chamado em um template realmente seria determinado em tempo de compilação, porque a classe inteira seria processada em tempo de compilação. Este sentido de templates é um mecanismo mais poderoso que generics – você pode fazer coisas loucas com templates porque eles não são "type safety" imposto sobre o modelo como um todo. Pelo contrário, o "type safety" só está marcado para cada construção do template efetivamente no programa.

Mas tipos genéricos no C# não são templates, eles devem ser "typesafe" dada qualquer possível construção a qual satisfaça as regras, não somente sobre um conjunto que está atualmente construído em um programa em particular.

Microsoft abre código do Singularity

3/5/2008 12:56:00 PM By Felipe Pessoto

A Microsoft anunciou um novo sistema operacional nesta terça-feira: o Singularity. Mas não se empolgue muito: ele é um "carro-conceito em forma de SO", disse Rick Rashid, diretor geral do Microsoft Research.

A Microsoft está disponibilizando o protótipo desse sistema operacional gratuitamente para comunidades acadêmicas e pesquisadores na esperança de que eles o usarão para desenvolver novos tipos de arquiteturas para computadores.

É difícil para a comunidade acadêmica fazer experiências com arquiteturas de computadores, disse ele. O Singularity foi criado para tornar fácil para os pesquisadores testarem como sistemas operacionais e aplicações podem interagir entre si.

"É um novo sistema criado do zero, com o objetivo específico de ser mais confiável", disse Rashid. O Singularity foi desenvolvido em C# e a Microsoft espera que ele ajude a melhorar a confiabilidade do software e acelerar as pesquisas com linguagens de programação e ferramentas.

O Singularity está disponível no site Microsoft CodePlex. Ele foi apresentado nesta terça-feira durante a TechFest, evento anual onde a Microsoft exibe projetos da sua divisão de pesquisas.

Mais: Projeto Singularity

MSDN Magazine - Março 2008 - Launch 2008

3/4/2008 12:05:00 PM By Felipe Pessoto

Está disponível a edição de Março da MSDN Magazine, este mês especialmente chamada de Launch 2008, devido aos lançamentos que teremos este mês, Windows Server 2008, SQL Server 2008 e do Visual Studio 2008. Engraçado que nenhum deles será realmente lançado este mês...

O Visual Studio 2008 está disponível em versão final desde Novembro de 2007, o Windows Server 2008 desde Fevereiro de 2008 e o SQL Server sofreu um atraso e chega só no final do ano.

Assuntos de capa:

  • WCF móvel: Escreva um aplicativo IM com o .NET Compact Framework.
    O .NET Compact Framework 3.5 fornece um subconjunto da funcionalidade do Windows Communication Foundation (WCF) que você pode utilizar para se comunicar entre os dispositivos Windows Mobile e computadores desktop. Mostraremos a você como fazer isso. Andrew Arnott


  • IIS 7.0: Construa soluções de servidor Web com extensibilidade ponta a ponta
    Mike Volodarsky demonstra o modelo de extensibilidade do IIS 7.0 ao estender a Modificação de resposta a um módulo de servidor Web configurável e uma página de gerenciamento personalizado para o Gerenciador do IIS. Mike Volodarsky


  • VSTO 3.0: Desenvolvendo aplicativos comerciais de escritório com o Visual Studio 2008. Com as regiões de formulário personalizadas no Outlook, você pode receber dados de fontes de dados designadas e personalizar verdadeiramente a experiência do Outlook 2007 dos seus usuários. Steve Fox


  • Teste de unidade: Aplique o desenvolvimento controlado por testes aos projetos de banco de dados.
    Jamie Laflen exalta as vantagens do TDD quando aplicado ao desenvolvimento de banco de dados – e também fornece algumas técnicas úteis. Jamie Laflen


  • F# Primer: Uso de técnicas de programação funcionais no .NET Framework
    Vamos apresentar aqui alguns dos conceitos por trás da nova linguagem F#, que combina elementos de linguagens .NET funcionais e orientadas a objeto. Em seguida, ajudaremos você a começar a escrever alguns programas simples. Ted Neward

Download - Download dos Códigos