.NET - Definindo um infra-estrutura baseada em camadas
Nunca se discutiu tanto sobre qual a melhor arquitetura para desenvolvimento de software como hoje. Basta você procurar no Google sobre o assunto e vai encontrar toneladas de referências e links que remetem ao tema. Isso é muito bom pois quanto maior a troca de informações mais subsídios temos para tomar uma decisão neste sentido.
Neste artigo eu procuro abordar o tema da criação de uma infra-estrutura baseada em camadas para desenvolvimento de aplicações na plataforma .NET com base em minha experiência e nas inúmeras referências encontradas na web com o objetivo de contribuir de alguma forma para que você possa compreender os conceitos envolvidos nesta questão.
Como o assunto é extenso pretendo tratar dos seus fundamentos de uma forma clara e objetiva para depois , em futuros artigos, avançar para tópicos mais avançados; como eu sempre digo: "primeiro o arroz com feijão, depois o camarão..."
Mas quais os problemas que envolvem esta celeuma ?
De forma resumida podemos enumerá-los da seguinte forma:
Nos anos mais recentes o termo desenvolver em camadas tornou-se muito familiar para quem trabalha com desenvolvimento de software; fala-se geralmente em desenvolvimento em n-camadas, em 3-camadas, camada de acesso a dados, camada de negócios, camada de apresentação, etc.
Mas afinal o que vem a ser isso ?
De forma bem simples o desenvolvimento em camadas procurar dividir a funcionalidade , componentes e o código para uma aplicação, seja para web ou para desktop, em camadas distintas que podem ser delineadas da seguinte forma:
Nota: Na literatura encontram-se com frequência os termos tiers e layers, em inglês, que geralmente são traduzidos como camadas. Olhando com atenção, embora a diferença seja bem sutil, compreende-se que tiers refere-se a uma separação física dos componentes (diferentes Assemblies, DLLs, arquivos), enquanto layers aponta para uma separação lógica dos componentes com classes distintas e diferentes espaços de nomes.
No Visual Studio, podemos ter os dois tipos de separação em aplicações Web ou Windows Forms:
1- Criação de projetos distintos em uma solução - Separação física de componentes em assemblies distintos com deploy em locais distintos:
Vemos aqui uma solução e 3
projetos distintos: 1-
Projeto Web Obs: Para criar projetos distintos crie uma solução usando o template Blank Solution (Other Project Types -> Visual Studio Solutions) e no menu File selecione Add -> New Project para incluir novos projetos.
|
2- Criação de um projeto em uma solução - Separação lógica de componentes em pastas e sub-pastas distintas com utilização de namespaces para organizar as classes:
Vemos aqui uma solução com um
projeto web e diversas pastas contendo código e recursos usados no projeto. As pastas App_Code , App_Data, App_Themes e App_LocalResources são pastas especiais do sistema. |
A utilização de projetos distintos em uma solução com a separação dos componentes em assemblies distintos parece ser mais indicada para grandes projetos pois se torna mais difícil e trabalhoso tratar com diversos projetos distintos e gerenciar as suas dependências e relacionamentos.
Para projetos de pequeno e médio porte a separação lógica dos componentes parece ser a forma mais produtiva e adequada de infra-estrutura a ser adotada, ainda mais com ao advento da versão 2.0 da plataforma .NET que trouxe diversas melhorias que incentivam este tipo de infra-estrutura e modelo de distribuição.
Nota: Você pode usar a separação física dos componentes criando projetos distintos em projetos de pequeno porte mas isso não traria nenhuma vantagem extra.
Para aplicações web a pasta especial chamada App_Code faz com que qualquer código que seja nela colocada (e também em suas sub-pastas) seja compilado automaticamente em tempo de execução e referenciado pelo resto da aplicação. Esta compilação automática e sob demanda torna mais fácil e rápido testar a sua aplicação pois você pode realizar qualquer alteração no código da aplicação enquanto ela esta rodando que as alterações serão compiladas na próxima requisição.
Ainda para aplicações web, a pasta App_Data pode ser usada como repositório para o banco de dados, e, no caso do SQL Server, mesmo a versão Express, basta você copiar o seu arquivo .mdf para esta pasta e anexá-lo de forma dinâmica pela definição do caminho na string de conexão usando o novo atributo AttachDBFnomedoarquivo que estará apto a realizar o deploy do seu projeto apenas copiando a estrutura do seu projeto para o servidor remoto sem ter que realizar nenhuma configuração adicional. (XCOPY deploy).
Na continuação deste artigo irei abordar a definição da camada de acesso a dados ou Data Access Layer (DAL); conceitos, definições e formas de implementação.
Eu sei é apenas .NET , mas eu gosto...
referências:
José Carlos Macoratti