Arquivo da tag: .NET

Asp .Net MVC 3.0

ASP .NET MVC 3.0Olá pessoal!

Neste post gostaria de deixar registrada uma recomendação para quem quer começar a estudar o ASP .NET MVC 3.0 e que de quebra também quer aprender algumas novidades do Visual Studio 2010. Trata-se de um tutorial criado por Scott Hanselman no site ASP .NET (www.asp.net): Getting Started with MVC3, que traz um passo-a-passo para a criação do seu primeiro site MVC. O tutorial é bastante detalhado e contém diversos screenshots, tornando-se fácil de ser seguido por estudantes e profissionais de qualquer nível. Vejam só quantos assuntos bacanas são abordados:

  • O próprio ASP .NET MVC 3.0: O tutorial traz uma aplicação de listagem de filmes, onde é possível verificar a lista de filmes disponíveis na base de dados, incluir um novo filme, alterar, excluir e visualizar detalhes de um filme existente. Durante a criação desta aplicação, diversos conceitos do ASP .NET MVC são explorados, como por exemplo, a criação de Views e Controllers. o funcionamento e a composição das URL’s em uma aplicação MVC, dentre outros. Após concluir o tutorial você terá uma aplicação ASP .NET MVC que realiza todas as operações básicas em um banco de dados, já servindo como um bom exemplo para as suas necessidades futuras.
  • Razor: Veja na prática como funciona este novo view engine do ASP .NET MVC 3.0, onde é possível escrever os códigos das suas views na sua linguagem de preferência (C#/VB.NET), contando com o intellisense do Visual Studio 2010 e com a possibilidade de realizar testes unitários em views.
  • NuGet: O NuGet é uma ferramenta de gerenciamento de pacotes que é adicionada ao Visual Studio 2010 com a instalação do ASP .NET MVC 3.0. Com ele é possível pesquisar e instalar bibliotecas de terceiros em suas aplicações .NET de forma bastante simplificada. Para mais informações sobre o Nuget, visite seu site no codeplex.
  • Entity Framework, Code-First e POCO: O tutorial mostra como baixar o pacote EFCodeFirst através do Nuget, porém, atualmente já é possível baixar a última versão do Entity Framework que já contém o Code-First embutido. A ideia com o Code-First é que ao invés de criarmos modelos de dados e tabelas baseados neles, nós devemos primeiro modelar e criar as classes do nosso sistema, ou seja, partindo para o código primeiro, de forma que as estruturas em banco de dados sejam criadas por ele em tempo de execução. As classes criadas são realmente simples (também conhecidas como POCO, de Plain Old CLR Objects), de forma que sejam necessárias apenas propriedades correspondentes aos seus atributos para que todo o trabalho seja feito.
  • Validação de dados com DataAnnotations: Veja como é simples implementar validação em seu sistema, bastando para isso a decoração das suas classes de modelo de dados com atributos de validação. Ou seja, o framework se encarrega de gerar os códigos necessários para validação no client, de forma que sua aplicação não gere requisições desnecessárias ao servidor e ainda responda rapidamente. Tudo isso com pouquíssimas linhas de código!

Não perca tempo para beneficiar-se destas tecnologias que tornam os nossos códigos mais bem escritos e que nos proporcionam cada vez mais produtividade! Até o próximo post.

AppFabric Caching Services

Revista .net Magazine edição 82Olá pessoal,

Em fevereiro de 2011 foi publicado mais um artigo que escrevi para a revista .net Magazine, em sua edição de número oitenta e dois. Com o título “AppFabric Caching Services – Funcionalidades, instalação, configuração e utilização” o artigo complementa um outro artigo publicado anteriormente na edição sessenta e nove (veja o post aqui), onde falei sobre Aspect Oriented Programming e Cache. Nesta edição o artigo estende o componente para cache abordado anteriormente, incluindo agora a utilização do AppFabric Caching Services, que é a tecnologia mais recente disponibilizada pela Microsoft para cache de dados.

Como o próprio título já anuncia, o artigo fala sobre as funcionalidades e características do AppFabric – incluindo também uma introdução sobre o Hosting Services – sua instalação e configuração em um ambiente local e a utilização do seu módulo de cache (Caching Services), através de um componente facilmente plugável, que utiliza as API’s providas junto com o pacote de instalação do AppFabric.

A sua versão digital pode ser vista através do link a seguir e a versão impressa encontra-se nas bancas de jornais no mês de fevereiro de 2011.

http://www.devmedia.com.br/post-19319-AppFabric-Caching-Services.html

Obs: O artigo passou por um processo de edição feito pela revista, onde diversas alterações foram realizadas com relação a versão original enviada. Infelizmente, nesta edição alguns erros foram introduzidos e algumas passagens não ficaram de uma forma didática, em minha opinião.

Quick Dev: Behind LINQ to SQL

Olá pessoal!

Você que já utiliza o LINQ to SQL já deve ter tido a curiosidade de saber como as suas consultas LINQ são transformadas em comandos SQL e principalmente, qual a estrutura destes comandos SQL. Como o LINQ to SQL gera um comando SQL para atualizar apenas um registro em uma tabela? Ele utiliza sua chave primária na clausula WHERE? Acredito que estas sejam questões muito importantes para nos embasarmos quando tivermos que decidir pela sua utilização ou estabelecermos os cenários em que podemos aplicá-lo. No artigo anterior dei um overview sobre o LINQ. Neste artigo conceituo o provider LINQ to SQL e demonstro como suas consultas LINQ são transformadas em comandos SQL. Na imagem a seguir temos a tela da aplicação Windows Forms que será utilizada como exemplo. Nesta aplicação estou utilizando a tabela Customers da base de Northwind, disponível para download no site da Microsoft.

Aplicação de exemplo LINQ to SQL

Continue lendo

Quick Dev: LINQ Overview

Olá pessoal!   

Neste artigo temos uma visão geral sobre o LINQ, passando pela sua definição, pelos tipos de dados que o suportam, pelos LINQ Providers e pelos estágios da execução de uma consulta LINQ. Por fim, listo também alguns exemplos de consultas com LINQ em diferentes fontes de dados.

Definição

O LINQ (Language Integrated Query) já não é mais novidade, estando disponível desde a versão 3.5 do .NET Framework. Ele veio com o objetivo de adicionar capacidade de pesquisa nativa às linguagens .NET. Com ele podemos pesquisar, filtrar e navegar facilmente sobre coleções de dados, documentos XML, Datasets e até mesmo dados em base de dados SQL Server. Um dos pontos mais interessantes do LINQ é o fato de possibilitar a realização de consultas em todas estas diferentes fontes dados utilizando-se de uma sintaxe padrão. Veja abaixo um exemplo de como seria a recuperação de todos os botões de um determinado formulário (aplicação Windows Forms) através do LINQ e a exibição dos seus nomes em ordem alfabética em um controle ListBox.

        'Esta é a consulta LINQ. Note que a fonte de dados é a coleção de controles do
        'formulário corrente (Me.Controls) e que estou filtrando a consulta para obter
        'apenas os controles do tipo Button. Também estou ordenando a consulta por ordem
        'crescente do nome do controle, através da clausula Order By. Por fim, faço a seleção
        'do que quero que seja atribuído à variável qry.
        Dim qry As IEnumerable(Of Control) = _
            From buttons As Control In Me.Controls _
            Where TypeOf (buttons) Is Button _
            Order By buttons.Text _
            Select buttons

        'Neste ponto estou chamando a função Count, que passa a estar disponível em
        'objetos que implementam a interface IEnumerable
        Me.lblStatus.Text = String.Format("{0} botões encontrados", qry.Count)

        'Agora basta iterar sobre o resultado da consulta e exibir no ListBox
        Me.ltbLista.Items.Clear()
        For Each btn As Button In qry
            Me.ltbLista.Items.Add(btn.Text)
        Next

Continue lendo

Quick Dev: Connection Pooling

Como funciona um pool de conexões

Como funciona um pool de conexões. Fonte: http://download.oracle.com/docs/cd/B13789_01/appdev.101/a97269/pc_11thr.htm

Olá pessoal! 

Continuando a série Quick Dev, neste artigo vou falar um pouco sobre pooling de conexões em uma aplicação .NET. 

Para começar, a seguir temos uma definição simples de pool de conexões: trata-se de um cache de conexões de banco de dados, mantidas de forma que possam ser reutilizadas quando futuras requisições são necessárias. Em uma aplicação .NET onde sucessivamente abrimos conexões com a base de dados, realizamos as operações necessárias e por fim fechamos a conexão, o pool de conexões é extremamente importante, pois, poupa o tempo que seria necessário para a abertura de novas conexões a cada operação. 

O pool de conexões é dividido por processo, application domain e connection string. Ou seja, suas conexões serão reaproveitadas desde que sejam requisitadas por um mesmo processo, por um mesmo application domain (no .NET é possível criar diversos applications domains dentro de um mesmo processo) e por uma mesma string de conexão, sendo esta a mais importante. Se a sua aplicação utiliza conexão standard e varia o usuário de acordo com o usuário que a está utilizando, o pool de conexões será aproveitado apenas para aquele mesmo usuário, o que implica em ter um pool de conexão para cada usuário conectado. O mesmo vale para conexões windows integrated, pois, apesar da string de conexão ser a mesma, o usuário difere em cada conexão. O cenário que permite maior aproveitamento do pool é o de aplicações que utilizam conexão standard com usuário único. Note que cada abordagem possui implicações de segurança diferentes, não cabendo a este artigo o seu detalhamento. 

Conceituado o pool, vamos a algumas opções que temos para manipulá-lo via connection string (podem não ser aplicáveis a algumas bases de dados): 

  • ConnectionLifeTime: Tempo em segundos para que uma conexão permaneça ativa no pool;
  • MaxPoolSize: Número máximo de conexões presentes no pool;
  • MinPoolSize: Número mínimo de conexões presentes no pool. Esta configuração é interessante, pois, permite que você crie um determinado número de conexões ativas no pool na primeira abertura de conexão que sua aplicação realizar, de forma que outros usuários possam se beneficiar destas conexões no momento em que começarem a utilizarem a aplicação.
  • Pooling: Permite ativar ou desativar a utilização do pool. A boa notícia é que por padrão o valor desta configuração é true;

Além das opções via connection string, temos também alguns métodos que podem ser invocados através do objeto de conexão (SQLConnection, por exemplo), que são úteis quando se sabe que uma determinada conexão não será mais utilizada, e portanto, não precisa ser disponibilizada no pool: 

  • ClearAllPools: Limpa todos os pools de conexão para um provedor em específico;
  • ClearPool: Limpa o pool de conexão associado à conexão especificada;
  • ReleaseObjectPool: Indica que o objeto pode ser liberado do pool assim que a última conexão for finalizada;

E assim finalizamos mais um Quick Dev. Para mais informações a respeito deste assunto, consulte a documentação da Microsoft disponível em: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx 

Quick Dev: Formulários não-retangulares

Formulário não retangular em execução

Formulário não retangular em execução

Olá pessoal!

Este é o primeiro post de uma nova sessão denominada “Quick Dev”. O objetivo desta sessão é explorar rapidamente algumas abordagens de desenvolvimento simples, porém, úteis.   

Se você está se perguntando neste momento: porque estamos abordando questões de desenvolvimento em um blog de arquitetura? Eu recomendo ler o texto de John Davies (não errei na escrita, é Davies mesmo) no livro “97 Things Every Software Architect Should Know”, entitulado como “Architects Must Be Hands On”, onde ele brilhantemente afirma: “Without a good understanding of the full range of technology, an architect is little more than a project manager”.   

Sem mais explicações, vamos ao que interessa. Você sabia que é possível criar formulários não retangulares em uma aplicação windows forms? Pois é, você pode criar um formulário no formato que desejar. Veja a seguir como o código é simples e ao lado o resultado. Note que alterei a cor de fundo do formulário e que acrescentei um botão para fechar, uma vez que os controles padrão do formulário não aparecem neste formato.     

Public Class NonRetangularForm

    Private Sub NonRetangularForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Cria-se um objeto path
        Dim myPath As New System.Drawing.Drawing2D.GraphicsPath
        'Adiciona-se o formato desejado ao Path. Este formato pode ser um polígono,
        'formato de pizza, elipse, e diversos outros formatos interessantes.
        myPath.AddEllipse(0, 0, Me.Width, Me.Height)
        'Cria-se uma região com base no formato criado
        Dim myRegion As New Region(myPath)
        'Associa-se a região ao formulário, fazendo com que ele
        'assuma a região defina no objeto no seu carregamento.
        Me.Region = myRegion
    End Sub

    Private Sub btnFechar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles brnFechar.Click
        Me.Close()
    End Sub

End Class