.NET - Apresentando o Subsonic - I (Gerando a sua Camada de acesso a dados)
Se você pretende desenvolver uma aplicação comercial usando a plataforma .NET nos dias atuais é quase certeza que vai ter que usar um banco de dados relacional. Além disso se você pretende que a sua aplicação seja fácil de manter e de migrar com certeza vai ter que trabalhar com no mínimo 3 camadas em sua aplicação.
Separar o seu trabalho em camadas facilita a organização do seu trabalho, a sua vida e a de que vai manter a aplicação. Então o básico será criar uma camada de apresentação, uma camada de negócio e uma camada de acesso a dados.
Esse assunto tem sido muito discutido e hoje em dia a maioria dos desenvolvedores sabem que têm que trabalhar dessa forma para ter produtividade, manutenabilidade, escalabilidade, etc.
Então por que muitos continuam fazendo o seu trabalho usando métodos improdutivos e não adotam o modelo em camadas ?
Simplesmente porque dá trabalho.
Você tem que planejar, tem que que gerar o script para gerar as tabelas, gerar a massa de teste, gerar as classes para a camada de acesso a dados, e, dependendo do tamanho do seu projeto, isso pode ser realmente uma tarefa muito tediosa.
Se essa for a desculpa que você usava você vai ter que mudar de atitude ou arrumar outra desculpa. Sabe porquê ?
E se eu dissesse que é possível realizar o trabalho de geração da camada de acesso a dados e dos scripts de suas tabelas sem fazer muito esforço ?
E se eu dissesse que existe uma ferramenta que faz tudo isso para você, é fácil de configurar, e, é grátis ?
Você acreditaria ???
Pois pode acreditar essa ferramenta existe e eu vou apresentá-la neste artigo.
Apresentando o Subsonic
Pois este artigo vai apresenta essa ferramenta e ela se chama Subsonic e pode ser obtida em : http://subsonicproject.com/ (clique em Download) ou http://www.codeplex.com/subsonic;
Nota: Quando eu escrevia este artigo a opção Download do site
http://subsonicproject.com/ trazia o projeto completo com os
fontes. Neste caso não há um instalador e você vai ter que descompactar o
projeto em uma pasta (eu descompactei em Arquivos
de Programas/Subsonic) , abrir o projeto e realizar um Build
para poder gerar o arquivo sonic.exe e os arquivos .dll que irão ser
referenciados no seu projeto. O arquivo
sonic.exe esta na pasta SubCommander\bin\Debug.
O segundo link http://www.codeplex.com/subsonic não estava disponível. |
O Subsonic é um projeto opensource que foi criado por Rob Conery e um grupo de desenvolvedores e tem o seu código fonte disponível no site http://subsonicproject.com/ (clique em Source e siga as instruções).
A versão atual disponível é 2.1 e como eu já disse seu principal objetivo é gerar as classes para a camada de acesso a dados dando atualmente suporte para os banco de dados SQL Server 2000/2005 (incluindo a versão Express), Oracle, MySQL e SQLite.
Nota: O Subsonic não da suporte ao banco de dados Microsoft Access.
Para gerar as classes da camada de acesso a dados o Subsonic lê a estrutura do seu banco de dados e cria as classes para cada tabela correspondente. O Subsonic gera então 3 classes para cada tabela do banco de dados da seguinte forma:
Podemos dizer que as classes geradas já possuem métodos para listar, inserir, alterar e excluir os registros da tabela correspondente.
Configurando o Subsonic
Toda a informação que você encontra nesta página foi obtida no site http://subsonicproject.com/ onde você pode encontrar também vídeos para ajudá-lo se houver alguma dúvida.
Basicamente você só precisa efetuar 3 procedimentos para poder usar o Subsonic:
á deu para perceber que a geração das classes é feita a partir do seu banco de dados, então ele deve ser primeiro item que deve estar providenciado. Lembrando que como outras ferramentas OR/M e de geração de código as suas tabelas devem estar normalizadas e todas (eu disse todas) definidas com uma Chave primária.
Eu estarei usando o Visual Web Developer 2008 Express para gerar o exemplo deste artigo mas podemos usar o Visual Studio 2008 ou até o VB 2008 Express.
1- Ajustando o seu ambiente para usar o SubSonic
A primeira coisa a fazer para poder usar o Subsonic é ajustar o arquivo de configuração da sua aplicação (Web.config ou App.Config). Fazemos isso incluindo as seguintes seções :
a- Declarar uma seção de configuração para o Subsonic
<configSections> <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/> </configSections> |
b- Definir a string de conexão com o seu banco de dados. Abaixo temos um exemplo para o conexão com o banco de dados Northwind.mdf;
<connectionStrings> <add name="Northwind" connectionString="Data Source=localhost\SQLExpress; Database=Northwind; Integrated Security=true;"/> </connectionStrings> |
c- Definir o provedor usado pelo Subsonic
<SubSonicService defaultProvider="Northwind"> <providers> <clear/> <add name="Northwind" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="Northwind" generatedNamespace="Northwind"/> </providers> </SubSonicService>
|
Abaixo segue um exemplo para um arquivo App.config usado por uma aplicação VB .NET:
<? xml version="1.0" encoding="utf-8" ?>< configuration>< configSections>< section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false" /></ configSections>< connectionStrings>< clear />< add name="Pubs" connectionString="Data Source=MAC\SQLEXPRESS;Initial Catalog=pubs;Integrated Security=True"/></ connectionStrings>< SubSonicService defaultProvider="Pubs">< providers>< clear/>< add name="Pubs" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="Pubs" generatedNamespace="Pubs"/></ providers></ SubSonicService></ configuration>
|
Feitas as configurações acima ao executar a linha de comando do Subsonic serão geradas os arquivos das classes em uma pasta definida no seu projeto e você terá acesso aos arquivos podendo inclusive alterá-los, embora isso não seja recomendável pois a cada nova execução da ferramenta os arquivos serão gerados novamente sobrepondo os arquivos anteriores. Se você realmente precisar fazer alterações nas classes geradas você pode estendê-las usando o recurso das Partial Classes visto que todas as classes geradas são do tipo partial.
Existe ainda uma opção de configuração que pode ser usada para gerar as classes da sua camada de acesso a dados 'por trás dos panos' ficando dessa forma ocultas no seu projeto, nesta opção você não terá acesso aos arquivos. Para usar este recurso você tem que declarar um BuildProvider.
Um BuildProvider é um processo que roda quando o Visual Studio compila uma aplicação ou quando um arquivo é incluído na pasta App_Code. No nosso caso vamos definir um BuildProvider para irá ser executado para cada arquivo na basta App_Code que tenha a extensão .abp, o que é feita sob a tab <compilation>.
Então para usar o recurso do buildprovider basta incluir a seguinte entrada no arquivo web.config:
|
Eu não vou usar este recurso no exemplo do artigo.
Com isso o ambiente da sua aplicação já esta preparado para usar o Subsonic e gerar as classes para a sua camada de dados com base no banco de dados usado pela sua aplicação.
2- Referenciando o Subsonic no seu projeto
Para referenciar o Subsonic no seu projeto clique com o botão direito sobre o nome do projeto ou no menu Web Site para aplicações Web ou Project para aplicações VB selecione a opção Add Reference;
A seguir clique na guia Browse e selecione a pasta onde você instalou o Subsonic e selecione o arquivo Subsonic.dll;
3- Executando o Subsonic a partir da linha de comando
Podemos usar o recurso das ferramentas Externas (External Tools) para gerar um script de comando que será executado a partir do menu Tools do Visual Web Developer (esta opção também existe no VS 2008).
Para isso selecione o menu Tools e clique em External Tools e defina as opções conforme a figura abaixo:
Com isso
estaremos criando um item no menu Tools chamado Subsonic DAL
que usa o arquivo sonic.exe para gerar as classes da nossa camada de
acesso a dados. Os argumentos usados são: generate /auto O diretório inicial será o diretório do projeto: $(ProjectDir) Marcamos as opções Use OutPut Window e Prompt for arguments para exibir uma janela onde poderemos fornecer mais argumentos como a pasta onde iremos gerar as classes. Um argumento de linha de comando muito importante é o argumento /lang vb que irá gerar as classe na linguagem Visual Basic. Se você não informar este argumento o padrão de geração das classes será a lingaugem C#. |
A seguir uma relação dos principais comandos que podem ser usados:
ObjectDataSource
para cada tabela;Um recurso muito importante e que poupará muito o seu trabalho é a geração dos Scripts para gera o banco de dados e as tabelas. Podemos criar esta opção usando o recurso das Ferramentas Externas da seguinte forma:
Selecione o menu Tools e clique em External Tools e defina as opções conforme a figura abaixo:
Conforme a
figura ao lado estaremos gerando os arquivos de scripts para criar o banco
de dados e as tabelas e o script para preencher as tabelas na pasta
ScriptsSQL.(Serão gerados dois arquivos de scripts.) O menu Tools estará exibindo os dois itens criados conforme abaixo: |
Recursos do Subsonic
Além de facilitar a sua vida gerando as classes para você o SubSonic traz também alguns controles muito interessantes , veja um resumo de cada um deles :
O AutoScaffold é um conceito baseado no
Ruby On Rails, onde você pode gerar as
operações básicas de manutenção de dados (CRUD) sem nenhuma linha de código.(tratarei
dessa assunto mais adiante)
O nome já diz, o objetivo deste controle é gerar
e apresentar os dados de uma tabela de forma simples e rápida , basta informar
qual tabela ou objeto você deseja exibir em sua página web. A vantagem
deste controle é que ele obtêm os dados da sua tabela e os exibe sem usar o
ViewState. Além disso você pode exibir as
colunas que você quiser. Para exibir os dados da tabela Products usando
o QuickTable e ainda exibir um link para
atualizar a página usamos a seguinte declaração no arquivo Default.aspx:
<ss:QuickTable ID="pTable" runat=server TableName="Products" ProviderName="Default"
ColumnList="ProductID:ID, ProductName:Name, UnitPrice:Price" PageSize=20
LinkToPage="default.aspx" LinkOnColumn="ProductName"/>
O resultado obtido será:
Para ativar o controle acima lembre-se de incluir no arquivo web.config a tag : <add tagPrefix="ss" assembly="SubSonic" namespace="SubSonic"/>
Este controle permite que você crie listas de buscas , basta você definir o nome da tabela e opcionalmente indicar o campo texto e o campo valor a ser exibido, feito isso você não precisa escrever nenhum código para carregar nem ordenar a lista de valores no seu dropdownlist.
Basta você usar o código : <ss:DropDown ID="pTable2" runat=server TableName="Products" ProviderName="Default" />
para exibir uma lista de produtos onde o Subsonic irá consultar apenas dois campos da tabela: a chave primária e o campo na posição ordinal 1(que por convenção deve ser a descrição)..
O resultado obtido será:
Para ativar o controle acima lembre-se de incluir no arquivo web.config a tag : <add tagPrefix="ss" assembly="SubSonic" namespace="SubSonic"/>
Este controle auxilia na criação de uma lista de
itens para exibir no estilo checkbox. Ele é adequado ao clássico
cenário onde você tem Produtos e Categorias onde um produto pode ter muitas
categorias e as categorias podem pertencer a muitos produtos..
Esta declaração irá gerar um CheckBoxList de todas as Categorias e irá marcar todas as categorias para produto com ID igual a 5.
O recurso Scaffolding
Vou dar detalhes de um dos recursos muito interessantes do Subsonic é o componente Scaffolding.
O Scaffolding gera em tempo de execução todo o código necessário para realizar as operações de inclusão, alteração, exclusão e listagem, as operações CRUD, sem você ter que digitar quase nenhuma linha de código.
Scaffolding é um termo em inglês de engenharia civil, que denota a colocação de andaimes e outras estruturas para suportar temporariamente trabalhadores de maquinário enquanto a construção definitiva não está pronta. Esse mesmo termo é usado em programação para indicar que o código a que se refere é apenas um esqueleto usado para tornar a aplicação funcional, e se espera que seja substituído por algoritmos mais complexos a medida que o desenvolvimento da aplicação progride. |
Para usar este recurso basta referenciar o componente na sua aplicação. Abaixo a direita temos a declaração genérica e a esquerda uma aplicação para a tabela Categories. Neste caso será criada uma estrutura para as operações CRUD nesta tabela para a página web em questão:
|
|
O resultado obtido será a seguinte página:
Para ativar o controle acima lembre-se de incluir no arquivo web.config a tag : <add tagPrefix="ss" assembly="SubSonic" namespace="SubSonic"/>
... < controls><!-- incluindo a tagprefix do SubSonic tagprefix aqui fica disponivel para todas as páginas.-->< add tagPrefix="ss" assembly="SubSonic" namespace="SubSonic"/></ controls>
... |
Com isso já sabemos como proceder para usar esta ferramenta fantástica que pode nos ajudar muito no trabalho do dia a dia. Existem mais recursos que não foram mencionados neste artigo. Para mais detalhes visite o site oficial : http://subsonicproject.com/
A seguir veremos um exemplo completo de uma aplicação web usando os principais recursos do Subsonic anunciados neste artigo.
Aguarde a continuação deste artigo em : .NET - Usando o Subsonic - II
Eu sei é apenas .NET mas eu gosto...
Referências:
José Carlos Macoratti