|
|
Olá 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.
Olá 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.
Olá pessoal!
No meu primeiro post neste blog eu falei sobre um capítulo do livro “97 Things Every Software Architect Should Know”. O capítulo tratava de um comportamento bastante comum e, no entanto, bastante repugnável, a arrogância. Neste post eu falo sobre três capítulos deste mesmo livro, porém, desta vez o tema é relacionado às habilidades de programação de um arquiteto.
O livro citado é composto por diversos capítulos curtos, onde cada um deles traz conselhos e experiências de diversos arquitetos renomados, de diversos lugares do mundo. A ideia geral do livro é que cada capítulo trate de um assunto distinto, formando assim um conjunto de coisas distintas que todos nós deveríamos saber. No entanto, notei que três capítulos deste livro tratam de um mesmo tema, denotando a sua importância. Veremos então a seguir a ideia geral dos três capítulos e também algumas passagens.
Architects Must Be Hands On – página 38 – John Davies
Neste capítulo, John Davies diz que um arquiteto deve ser capaz de preencher qualquer posição em um time, desde o cabeamento de rede, até a configuração do processo de compilação e a execução de testes unitários, por exemplo. Para enfatizar, ele ainda diz: “Without a good understanding of the full range of technology, an architect is little more than a project manager”. Ele diz ainda que os desenvolvedores devem ver um arquiteto como um líder, capaz de dar exemplos que possam ajuda-los a se desenvolver. Arquitetos que não possuam conhecimento sobre uma determinada tecnologia empregada em um projeto não podem esperar que os desenvolvedores tenham confiança nele.
Before Anything, an Architect Is a Developer – página 126 – Mike Brown
Neste capítulo Mike Brown faz uma associação entre a carreira de um arquiteto e outras carreiras de outras áreas, porém, que requerem o mesmo nível de senioridade. Ele diz, por exemplo, que nenhum juiz nunca foi um advogado e que nenhum chefe de cirurgia nunca foi um cirurgião. Ele diz ainda que as pessoas que ocupam estas posições devem continuar a se atualizar e a se desenvolver em suas respectivas áreas. Isso não é diferente para nós arquitetos. Outro ponto bastante interessante colocado pelo Mike é que o código de um arquiteto é a sua moeda, sendo esta a forma mais eficiente para ganhar a confiança dos desenvolvedores. E para finalizar, Mike ainda diz: “Part of knowing what is feasible in a solution is having knowledge of the effort involved in developing the elements of the solution".
If You Design It, You Should Be Able to Code It – página 150 – Mike Brown
Neste capítulo Mike Brown diz que é muito tentador para nós arquitetos criarmos designs bem elaborados e abstrações que endereçam os problemas de forma bastante elegante. Ele diz ainda que é ainda mais tentador experimentar novas tecnologias em um determinado projeto. Porém, Mike diz que temos que pensar que no dia-a-dia, quem implementará o que ele chama de acrobacias arquiteturais, são os desenvolvedores e que isso normalmente traz impacto para o projeto. Mike ainda aconselha:
“Don’t use a pattern in your design that you haven’t personally implemented before. Don’t rely on a framework that you haven’t coded against before. Don’t use a server that you haven’t configured before. If your architecture depends on design elements that you haven’t personally used, there are a number of negative side effects:
- You will not have experienced the learning curve that your developers will have to face;
- You will not know the pitfalls to avoid when using the elements;
- You will lose the confidence of your developers;
- You will introduce unecessary risk.”
Olá pessoal!
Quem nunca se incomodou com o tempo levado para a recompilação de aplicações ASP .NET já publicadas? Pois é, cada vez que um arquivo “top-level” é alterado em sua aplicação ASP .NET, por padrão, toda a compilação do site feita no seu primeiro acesso é invalidada, causando uma recompilação no próximo acesso. São considerados arquivos “top-level” os arquivos global.asax e todos os arquivos da pasta bin e app_code. Isso pode se tornar um problema para grandes aplicações, pois, o tempo de recompilação pode se estender além do desejável, podendo chegar a mais de dez minutos, dependendo do tamanho da aplicação, conforme registrado na documentação da Microsoft (veja o link no final deste post).
Para contornar este problema, a Microsoft incluiu um recurso no .NET que nos permite habilitar o que é chamado de compilação otimizada. Esta compilação é um pouco mais inteligente do que a padrão, de forma que, ao invés de recompilar o site inteiro quando um arquivo top-level é alterado, apenas os arquivos afetados pela sua alteração são recompilados, diminuindo o tempo total da recompilação e por consequência, o tempo de espera do primeiro acesso após a modificação.
Para ativar a compilação otimizada, basta incluir a configuração a seguir dentro do elemento system.web do arquivo web.config da sua aplicação. O recurso já está disponível no Windows 7, Windows Server 2008 Service Pack 2 e Windows Server 2008 R2. Para o Windows Vista Service Pack 1 e Windows Vista Service Pack 2, é necessário instalar o seguinte hot-fix: http://code.msdn.microsoft.com/KB967535.
<compilation optimizeCompilations="true" />
Problema resolvido? Não totalmente. Com este recurso habilitado, é preciso ficar muito atento aos tipos de alteração que são feitas na aplicação. Isso porque, se apenas os arquivos afetados diretamente pela modificação são recompilados, podem ocorrer erros quando um arquivo da versão antiga precisar acessar algum recurso não mais compatível na versão nova. Por exemplo, imagine uma página que acessa um método de uma determinada classe, que teve sua assinatura alterada na modificação realizada. A classe publicada é recompilada, porém, a página não, o que causa um erro quando da sua execução.
Para mais detalhes sobre o assunto veja a documentação completa a respeito no artigo: Understanding ASP.NET Dynamic Compilation. Não deixe de considerar também a opção de utilização da pré-compilação: ASP.NET Precompilation Overview.
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.

Continue lendo Quick Dev: Behind LINQ to SQL
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: LINQ Overview
 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
 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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| 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 |
Por falar em arquitetura, neste post gostaria de registrar três e-books que devem fazer parte da biblioteca digital de todo arquiteto que trabalha com tecnologias Microsoft.
- Application Architecture Guide (v.2.0 – 2009): Com o próprio nome já sugere, trata-se de um guia de arquitetura criado pelo grupo Patterns e Practices e disponibilizado gratuitamente pela Microsoft. O e-book cobre três assuntos principais relacionados a arquitetura de software Microsoft e ainda conta com um apêndice. Os três assuntos são:
- Software Architecture and Design: Resumo de princípios e padrões para fundamentação de uma boa arquitetura. Também provê uma abordagem para criação do seu próprio modelo de arquitetura.
- Design Fundamentals: Um guia para definição de camadas, componentes e serviços. Também aborda o endereçamento de atributos de qualidade.
- Application Archetypes: Guias específicos para tipos de arquiteturas específicas, como por exemplo: Web, RIA, Rich Client, Mobile e Services.
- Performance Testing Guide for Web Applications (2007): O nome também já diz tudo. Também é um guia criado pelo grupo Patterns e Practices e disponibilizado gratuitamente pela Microsoft. Foi construído com base em experiências práticas aprendidas por diversos profissionais do ramo. O e-book abrange a inclusão do teste de performance em ambientes ágeis e estruturados (p. ex. CMMI), técnicas de teste de performance (p. ex.: teste de carga, teste de stress) e também atividades chave relacionadas (identificação de objetivos, design e execução dos testes, análise e report de resultados).
- ebook Arquitetura de Soluções (v.1.0.1 - 2009): Trata-se de uma compilação de diversos assuntos abordados pelo arquiteto de soluções Waldemir Cambiucci, da Microsoft, em seu blog ao longo de dois anos. Dentre os diversos assuntos, constam textos sobre SOA, SaaS, interoperabilidade, modelos de maturidade, recursos da plataforma Microsoft, frameworks de desenvolvimento, domain specific language e diversos outros.
 Leitura recomendada
Olá pessoal!
Hoje vou falar um pouco sobre um assunto que me parece estar um pouco fora de moda, a Enterprise Library, também conhecida como EntLib. Digo fora de moda, pois não tenho visto recentemente esse assunto em listas de discussão, artigos e revistas técnicas. Hoje falamos muito sobre tecnologias emergentes como o NHibernate, MVC e suas variantes, DDD, TDD, BDD, AOP, WWF, WCF, WPF, dentre diversas outras, e acabamos por nos esquecer desta que é uma ótima base para construção de sistemas.
A Enterprise Library consiste em um conjunto de componentes reutilizáveis, desenvolvidos pelo grupo de Patterns e Practices da Microsoft (veja o link no final do artigo), com o objetivo de nos ajudar em questões que nos deparamos em praticamente todas as nossas demandas de desenvolvimento. Ela é composta por blocos de aplicação (normalmente referenciado como application blocks) que tratam de diversos assuntos específicos, sendo eles: cache de dados, tratamento de exceções, segurança, validação de dados, criptografia, acesso a dados, log e injeção de políticas. Veja na figura a seguir como esses blocos se relacionam.
 Imagem retirada do blog do Luciano Condé, arquiteto de soluções Microsoft. Veja o link para o seu artigo no fim deste artigo.
Muito provavelmente você já precisou construir ao menos uma ou mesmo todas as funcionalidades providas pela EntLib ao longo da sua experiência. O objetivo em utilizar esta biblioteca é justamente aproveitarmos códigos já prontos, testados e desenvolvidos sob os melhores conceitos de design. Ou seja, além de embutirmos maior qualidade em nosso software, com a economia do tempo que levaria para construir estas funcionalidades ainda sobra um tempinho para se dedicar ao que realmente importa para o seu cliente: as funcionalidades que atendem ao seu negócio.
Falando em melhores práticas, é interessante saber que o time que desenvolveu a EntLib levou a sério quatro objetivos na hora de projetar o seu design, os quais são: consistência, extensibilidade, facilidade de uso e integração. Segundo sua documentação, a EntLib foi desenvolvida para cenários de aplicações corporativas com larga distribuição e complexidade. Também teve como base rigorosos requisitos de segurança, confiabilidade e performance. Porém, em minha opinião, isso não significa que ela não possa ser utilizada em aplicações menos complexas ou de menor escala. Me surpreendi com a facilidade de utilização de alguns blocos.
Desde janeiro de 2006 a EntLib já contou com quatro versões principais, estando no momento da escrita deste artigo em sua versão 5.0, o que deixa evidente a intenção de continuidade e evolução por parte da Microsoft. Isso nos dá uma certa segurança, pois, não é desejável que nossos sistemas dependam de bibliotecas obsoletas. Também é importante destacar que junto com as bibliotecas são providos os seus fontes, de forma que se esta tendência for por água abaixo, ainda nos sobra alguma alternativa.
Algumas boas notícias. A Enterprise Library pode ser baixada gratuitamente através do site da Microsoft. Encontram-se também disponíveis diversos materiais para estudo que não só são de ótima qualidade como também são muito didáticos. O time caprichou em hands-on labs que podem ser seguidos sem complicações e rapidamente. Para se ter uma idéia, alguns hands-on duram apenas cerca de quinze minutos e dão uma ótima visão do bloco de aplicação coberto. Portanto, não há desculpa para não dar uma estudada!
Nos próximos artigos falarei um pouco mais sobre cada bloco de aplicação. A seguir seguem alguns links sobre o assunto.
|
|