|
As novidades do Framework 2.0 e do VB.NET
A Microsoft acabou de disponibilizar os Beta 1 das versões Express de vários softwares. A idéia das versões Express é serem softwares com recursos reduzidos, voltados para estudantes e para a programação como Hobby. O grupo devASPNet já tem agendado, agora para Julho, um grande evento de 3 dias sobre a tecnologia .NET e um dos 3 dias será todo de demonstrações das ferramentas que ainda estão por vir. Confira detalhes em http://www.bufaloinfo.com.br/techConference
As seguintes versões Express estão disponíveis :
- VB.NET Express
- C# Express
- J# Express
- C++ Express
- Web Development Express
- SQL Server Express
Para fazer o download acesse : http://lab.msdn.microsoft.com/vs2005/
Uma das características mais interessantes, no meu ponto de vista, sobre essas versões Express, é que elas são baseadas na versão 2.0 do framework e na versão 2005 do SQL Server (code nome Yukon). Isso nos permite estar estudando as novidades do Framework 2.0 e do novo SQL Server a partir de hoje mesmo.
Outra característica a ser notada é o fato de que o SQL Server Express tem por objetivo substituir o MSDE. Portanto, conforme confirmado no site da Microsoft, o SQL Server Express será gratuito. O limite de tamanho de banco foi expandido para 4GB e agora temos gerenciamento gráfico do banco a disposição.
Veja as novidades sobre a versão Express, que, na verdade, são novidades do framework 2.0 :
Criação de projetos sem solução
No Visual Studio .NET hoje, quando criamos um projeto automaticamente é criada uma solução junto com esse projeto. No VB.NET Express o projeto pode ser criado sem uma solução, de forma independente.
Além disso hoje, quando criamos um projeto, o projeto é imediatamente salvo em disco. No VB.NET Express o projeto apenas será salvo em disco quando isso for solicitado. Enquanto isso estará utilizando diretórios temporários do próprio visual studio.
Edit-And-Continue
Sem dúvida o recurso de Edit-And-Continue é valioso para o processo de desenvolvimento e todos os desenvolvedores ficarão felizes em te-lo de volta. Fico imaginando quantas voltas tiveram que dar no processo de compilação do VS para poder trazer de volta este recurso, que em um ambiente compilado normalmente seria inviável.
Provavelmente isso tem alguma ligação com o background compiler, compilador em background que compila o código enquanto o produzimos e nos da dicas para corrigirmos o código.
Novos arquivos no projeto
Se observarmos os arquivos ocultos no projeto, veremos uma nova pasta, "My Project" e neste pasta encontraremos vários novos arquivos que não eram antes utilizados.
Basicamente, o processo de inicialização de uma aplicação se tornou mais complexo, cheio de detalhes e, seguindo o padrão que iniciaram na versão anterior (ainda bem!), tudo que configuramos nas janelas da ferramenta vira código, agora nestes arquivos ocultos.

Então vejamos os principais :
MyApplication.VB : Contém a definição da classe MyApplication, que estará representando a aplicação que estamos construindo. Interessante observar que apenas metade da definição da classe MyApplication encontra-se neste arquivo. A classe MyApplication herda características da classe System.Windows.Forms.WindowsFormsApplicationBase
MyEvents.VB : Contém a outra parte da definição da classe MyApplication - Eventos de aplicação, que podem ser programados por nós.
MyResources.VB : Gera um namespace chamado Resources, dentro do namespace My. Neste namespace é criado um ResourceManager para realizar a globalização do projeto. Podemos acessar o ResourceManager gerado usando My.Resources.ResourceManager.
MySettings.VB : Contém a definição de uma classe MySettings. Essa classe permite acesso aos settings de nível de projeto
Namespace My
Nos arquivos que citei acima é feita a definição em código de um namespace chamado My (ótimo que seja em código, menos coisas "automáticas"). Este NameSpace contém as seguintes classes :
- Application
- Computer
- Forms
- User
- WebServices
e um namespace Resources.
My, traduzido do inglês, significa "Meu", portanto estamos falando de um acesso direto a minha aplicação, computador, Forms (temos a coleção forms de volta ?!!), usuário conectado e webServices.
Veremos mais detalhes em seguida, mas como um NameSpace, compilado junto com a aplicação, vale citar que o My fica acessível para todo o código que estaremos produzindo.
Separação de classes em múltiplos arquivos
Podemos encontrar esta síntaxe nos arquivos MyApplication.vb e MyEvents.vb, nos dando uma idéia de quantos recursos novos iremos encontrar na orientação a objetos do framework 2.0.
Nestes arquivos, a classe MyApplication aparece dividida em 2 partes. São duas declarações Class/End Class, com o mesmo nome, fazendo com que as duas partes se tornem uma classe única. A declaração que permite isso é a palavra chave "Partial", da seguinte forma :
Partial Class MyApplication
End Class
Janela de configuração do projeto
Esta sofreu mudanças drásticas. A primeira coisa que notaremos é que, ao ser aberta, ao invés de aparecer como uma janela popup esta janela aparece como uma aba adicional na área de trabalho do Visual Studio. Bem enfeitada, possui 6 divisões cheias de novidades :
Application
Além de configurações já conhecidas de todos, temos neste ponto muitas novidades. As configurações realizadas nesta tela são codificadas dentro do arquivo MyApplication.VB, no constructor da aplicação.
Make Single Instance Application : Faz com que a aplicação se torne uma aplicação single instance, ou seja, apenas uma cópia pode ser aberta. Antes tinhamos que fazer isso por código. Essa configuração se refere a propriedade isSingleInstance da classe MyApplication. Desta forma esta configuração vira código diretamente no arquivo MyApplication.VB . Em nosso código temos acesso a mesma propriedade através do namespace My (My.MyApplication.isSingleInstance).
Set My.User to Logged-On Windows User : Faz com que o usuário windows logado seja atribuido a propriedade User, do objeto My. Continua sendo um IPrincipal, mas antes, no framework 1.1, tinhamos que fazer uma configuração no AppDomain para que isso acontecesse.
ShutDown Mode : Determina como será o fechamento da aplicação - se a aplicação será fechada automaticamente quando o form principal fechar ou apenas quando todos os forms fecharem. Corresponde a propriedade ShutDownStyle do objeto MyApplication. Em nosso código temos acesso a mesma propriedade através do namespace My (My.MyApplication.ShutDownStyle).
Splash Screen : Isso mesmo, podemos montar um formulário e configurar a aplicação que exiba este formulário como uma splash screen no inicio da execução.
Compile
Na tela Compile vemos que o tratamento de erros e warnings ficou bem mais aprimorado. Podemos controlar o que desejamos que a ferramenta verifique em nosso código e como a ferramenta nos avisará de problemas, se com warnings ou com mensagens de erro.
Veja algumas das configurações disponíveis :
- runtime binding
- Declaration requires 'As' clause
- Possible null reference exception
- Function/Operator without return value
- Unused local variables
- Access to shared member through instance var
- Recursive operator/Property Access
- Duplicate/Overlapping catch blocks

Resources
Já temos por default um arquivo de resources para todo o projeto (antes era por form). Este arquivo é controlado pela classe contida em MyResources.vb (vide arquivos de projeto acima).
O editor de resources agora aceita facilmente vários diferentes tipos de resource, tal como imagens.
Isso tudo significa que nossos projetos windows já iniciam "pré-organizados" para implementarmos globalização

Settings
O controle de settings de aplicação é uma grande novidade deste ambiente de desenvolvimento. Normalmente temos Configurações de nível de aplicação que gostaríamos que fossem compartilhadas, acessíveis por todo o código da aplicação. Pois então, como fazer ?
No Framework 1.1 tinhamos o recurso das propriedades dinâmicas. Mas a configuração ainda era um pouco complexa, diretamente no app.config as vezes. Agora temos uma tela para configurarmos estes settings, e o que chamávamos de propriedades dinâmicas passou a ser chamado de ApplicationSettings.
O acesso a estas informações também ficou muito mais simples, veja um trecho de código gerado no CodeBehind :
WindowsApplication1.MySettings.Value.testando
A classe MySettings, definida no arquivo MySettings.vb, permite o acesso aos settings definidos no arquivos de manifesto com facilidade.

Eventos de Aplicação
Ainda no item Application das propriedades de projeto, encontramos um botão chamado "View Code". Este botão nos permite editar eventos de nível de aplicação. Esses eventos são gravatos no arquivo MyEvents.vb .
Temos os seguintes eventos de nível de aplicação disponíveis :
- NetworkAvailabilityChanged : Permite identificarmos quando a rede estiver ou não disponível.
- ShutDown : Identifica o término da aplicação
- StartUp : Identifica o início da aplicação
- StartUpNextInstance : Identifica o início de uma nova instância da aplicação
- UnHandledException : Identifica uma excessão não tratada

Novo conceito de DataSource
Ao lado do solution explorer temos agora a janela "Data Source", que nos permite definir origens de dados que podem ser compartilhadas por todo o projeto. Mas a primeira dúvida que surge é o que é uma origem de dados compartilhada por todo o projeto.
Inicialmente pensei que fosse uma conexão, mas estava enganado. Trata-se dos dataSets, com um novo nome e um novo visual.
Antes que se assustem, imaginando que todos os conceitos de dataSet mudaram, devo dizer que os datasets estão lá, firme e fortes. Mas para simplificar o gerenciamento dos dataSets na aplicação surgiu o conceito da janela de data Source, que ao mesmo tempo que nos permite gerenciar nos dataSets nos permite preparar o desenho da tela. Podemos definir como desejamos que cada campo apareça na tela e, em seguida, apenas arrastamos a tabela para o formulário e voilá! temos um formulário com todos os campos prontos.
Neste ponto encontramos uma das limitações da versão Express : apenas acessa bancos locais. Ao iniciar a criação de uma nova origem de dados, porém, tive uma surpresa : Sugeriu que eu poderia escolher tanto arquivos .MDB como arquivos .MDF (.MDF!!!).
Os arquivos .MDF são arquivos de banco do SQL Server e a principio não poderiam ser acessados sem que os dados fossem requisitados a um servidor SQL Server ativo. Mas parece que este principio está caindo, aparentemente os arquivos MDF serão diretamente acessíveis pelas versões Express do VS. Nos meus testes não funcionou (por enquanto), mas aparentemente trata-se disso.
Novas ferramentas de conexão ao banco
Vendo o que citei acima, muitas perguntas surgem : E o dataAdapter ? E a conexão ?
O que observamos é que os objetos que conhecemos hoje (adapter, conexão, commands), foram encapsulados dentro de outros objetos que simplificam ainda mais o processo de desenvolvimento, que já era simples.
Ao criar um dataSource, conforme expliquei acima, é gerado automaticamente o dataSet e o adapter! A ferramenta de edição dos .XSD, os schemas dos dataSet tipados, foi adaptada para para editar também o adapter. Assim sendo, o adapter fica vinculado a dataTable do dataSet.
Dentro do dataset podemos ver o adapter, vinculado com a tabela, os 4 commands do adapter, mas não vemos conexão. Ao expandirmos as propriedades dos commands nem ao menos encontramos uma propriedade de conexão.

Criação de Forms via drag-and-drop
Quando arrastamos a tabela da janela Data Source para o formulário, os seguintes objetos são gerados : CustomersDataNavigator, CustomersDataConnector, NorthwindDataSet, CustomersTableAdapter.
Identificamos claramente ai o DataSet e o DataAdapter. O DataNavigator é um novo objeto visual que facilita a navegação dos dados, faz todo o trabalho pesado de edição, inclusão, exclusão, etc.
Já o DataConnector atua como um intermediário entre o dataSet e os objetos visuais. Observando a propriedade DataSource de um objeto DataGridView, gerado automaticamente quando arrastamos a tabela, vemos que o DataGridView é vinculado ao DataConnector, não ao dataSet. Pela janela do dataSource vemos que podemos vincula-lo ao dataSet se desejarmos.

in-place property editing
O recurso de edição das propriedades dentro do próprio formulário é uma novidade, provavelmente se tornará uma novidade polêmica. Algumas documentações que li citam esse recurso como sendo mais intuitivo do que a janela de propriedades. Bem, depois de anos trabalhando com a janela de propriedades é discutível dizer que uma mudança a essa altura possa se tornar mais intuitiva.
Clicando com o botão direito em qualquer componente no form encontramos a opção "Property Editing View". Ao selecionar essa opção surge uma barra superior, que nos auxilia no processo de edição dos valores das propriedades. Podemos selecionar um componente no form, selecionar a propriedade que desejamos editar nesta barra superior e editar o valor da propriedade diretamente no form


Separação do código de design
Cada Windows Form gera agora 2 arquivos : Form1.Design.vb e Form1.vb
Esses arquivos permitem uma separação do código gerado automaticamente pelo designer e o código da aplicação em si. Ao invés de ficarem em um mesmo arquivo, separados apenas pelas tags #Region, tais códigos ficam agora em arquivos separados, facilitando a visualização do código da aplicação.
Não existe uma ligação rígida entre os dois arquivos, nada que vincule um ao outro além do próprio nome. Imagino que a ferramenta de desenvolvimento faça um processo de herança, a classe que encontra-se em Form1.vb herde as características da classe que se encontra em Form1.Design.vb , mas nem mesmo um inherits é visível, até porque as duas classes tem o mesmo nome.
Isso nos dá a impressão que a ferramenta de desenvolvimento encontra-se fazendo bastante coisa automaticamente por nós.
Conclusão
As mudanças sem dúvida irão melhorar muito a produtividade do desenvolvimento de software, arrisco dizer que uma evolução como nunca se viu desde o inicio do desenvolvimento para windows.
O Framework 1.1 foi, digamos, um passo intermediário para chegarmos agora no framework 2.0. Me sinto um felizardo por ter estudado .NET ainda no framework 1.1, pois muitos conceitos e muitos objetos que conhecemos agora estão sendo encapsulados por objetos mais simples, mais "RAD". Desta forma quem estudou o framework 1.1 a fundo terá a vantagem de saber como as coisas estão funcionando por baixo dos panos, no framework 2.0, e isso, no meu ponto de vista, facilita o entendimento e o aprendizado, além de garantir um melhor uso da ferramenta.
Isso é apenas o começo. Os grupos de usuários irão distroçar em muitos detalhes estas novas ferramentas de desenvolvimento e um dos primeiros eventos sobre o assunto será a II devASPNet Technical Conference, nos dias 27, 28 e 29. Um dos dias desta conferência será inteiramente dedicado a apresentação dos novos recursos destas ferramentas que estão surgindo, então inscreva-se já e não perca este grande evento : http://www.bufaloinfo.com.br/techconference
Dennes Torres
MCAD,MCSD,MCSE,MCDBA
|