Artigo do tipo Tutorial
Recursos especiais neste artigo:
Artigo no estilo Curso Online
Aplicações multicamadas em .NET - Parte 1
Independentemente da finalidade a que se prestam as mais variadas aplicações, algumas das preocupações centrais dos envolvidos em projetos de software giram em torno da busca por um código bem estruturado, de fácil compreensão e, principalmente, flexível diante da necessidade de mudanças. A separação das diferentes partes de um sistema em camadas é um tipo de prática que procura atender a tais demandas, baseando-se em uma série de conceitos e ideias bastante populares dentro da área de desenvolvimento. Ao longo deste artigo serão discutidos os principais conceitos relativos ao desenvolvimento de sistemas em camadas. A partir disso será iniciada a construção de uma aplicação multicamadas, com a implementação desta última sendo concluída numa edição futura.


Em que situação o tema é útil
Priorizando a implementação de aplicações organizadas em diferentes partes lógicas (camadas), o desenvolvimento multicamadas procura fornecer diretrizes para a construção de soluções de software melhor estruturadas. Diversos são os benefícios decorrentes deste tipo de arquitetura, podendo-se destacar uma maior facilidade na realização de modificações no código, além da possibilidade de reutilização de módulos de uma aplicação em outros projetos.

O desenvolvimento de novas soluções de software está associado, na esmagadora maioria dos casos, à construção de aplicações com interfaces gráficas que interagem com algum tipo de base relacional. Independentemente de ter sido implementada como uma página Web ou estando voltada ao ambiente desktop, tais interfaces costumam realizar ações que envolvem a manipulação de informações a partir de softwares como SQL Server, Oracle, Firebird, PostgreSQL, dentre outros sistemas gerenciadores de bancos de dados (SGBDs). Estas operações são conhecidas popularmente como CRUD (BOX 1).

A criação de interfaces gráficas em aplicações visuais pode ser simplificada de maneira significativa através do uso de softwares como o Visual Studio. Ferramentas deste tipo são baseadas em um conjunto de conceitos conhecidos como RAD (sigla do inglês “Rapid Application Development”). Partindo da utilização em larga escala de componentes visuais, além de técnicas de orientação a objetos e programação orientada a eventos, a metodologia RAD tem como principal objetivo tornar mais ágil e flexível o processo de desenvolvimento de novos sistemas.

Apesar de todos os benefícios que as ferramentas RAD oferecem, é bastante comum que programadores releguem a um segundo plano a importante tarefa de implementar aplicações de uma maneira bem estruturada. Com isto, todo esse trabalho costuma ser focado apenas na construção de interfaces gráficas com uma boa aparência. Estes descuidos podem ser motivados por vários fatores, tais como a falta de um maior conhecimento a respeito de boas práticas de desenvolvimento ou, mesmo, pressões para a entrega de projetos dentro de prazos extremamente curtos.

Uma alternativa bastante comum para garantir um mínimo de organização no código de um sistema é a divisão do mesmo em partes lógicas, com estas últimas sendo popularmente conhecidas como camadas. A meta deste artigo é fornecer uma descrição conceitual de como funciona o desenvolvimento de aplicações em camadas e, a partir disso, iniciar um exemplo prático de implementação de um projeto com base neste tipo de técnica (a ser continuado numa próxima edição).

BOX 1. CRUD

CRUD (sigla do inglês “Create, Retrieve, Update and Delete”) é um termo que se refere a interfaces gráficas construídas com fins de inclusão (Create), consulta (Retrieve), atualização (Update) e exclusão (Delete) de registros em uma base ou outro tipo de repositório de dados.

Desenvolvimento de aplicações em camadas: uma visão geral

Conforme já mencionado, o desenvolvimento multicamadas consiste na construção de aplicações divididas em partes lógicas, as quais são conhecidas como “camadas”. Por mais que englobem diferentes funcionalidades, cada camada conta com classes e outras estruturas que possuem um tipo de comportamento semelhante. Em termos práticos, isto significa que os diversos elementos que formam uma camada executam um conjunto de ações similares (validações, acessos a bancos de dados, dentre outras operações).

No caso de soluções criadas na plataforma .NET, as camadas que irão compor uma aplicação podem ser implementadas das seguintes formas:

· Como partes de um mesmo projeto;

· Como diferentes projetos, os quais podem pertencem a uma mesma Solution (ou então serem referenciados em outras soluções).

Ao agrupar os vários componentes de um sistema com base nas tarefas que cada um destes desempenha, o desenvolvimento em camadas torna viável o reuso de partes de uma aplicação. Isso pode acontecer em outros pontos do software considerado (evitando assim a duplicação de código) ou, até mesmo, com outras soluções que venham a depender de uma funcionalidade específica.

Este tipo de prática também favorece a obtenção de um código mais organizado, em que é possível se observar uma clara separação de responsabilidades (BOX 2) entre os diferentes elementos que constituem cada camada do sistema. Com uma aplicação bem estruturada, torna-se mais simples a realização de atividades de manutenção ou, mesmo, visando a evolução de tal produto, uma vez que se espera que a solução apresente um comportamento mais flexível diante da necessidade de mudanças (praticamente certas ao longo do ciclo de vida de um software).

BOX 2. Separação de Responsabilidades

Separação de Responsabilidades (ou em inglês “Separation of Concerns”) é um princípio de desenvolvimento de sistemas que busca fornecer, através de uma série de recomendações, diretrizes que conduzam à obtenção de aplicações formadas por componentes mais bem estruturados e mais coesos.

O conceito de coesão, por sua vez, deve ser compreendido como a medida com a qual uma estrutura de software (classe ou componente) atende o objetivo inicial para o qual foi concebida. Uma alta coesão indica que o item que se está considerando não acumula responsabilidades/tarefas além daquelas para as quais o mesmo foi inicialmente projetado, sendo esta uma característica perseguida por todos os projetos de software.

Ao se levar em conta o cotidiano de muitas equipes de desenvolvimento, o comum é que sistemas em conformidade com os princípios aqui descritos sejam implementados em três camadas:

· Camada de Apresentação: corresponde às interfaces gráficas a partir das quais os usuários interagem com a aplicação;

· Camada de Negócios: regras específicas do ramo de negócios ao qual o sistema em questão está relacionado;

· Camada de Acesso a Dados: envolve a interação com repositórios de informações (bancos de dados relacionais, na grande maioria dos casos).

Na Figura 1 está a representação esquemática de uma aplicação com três camadas. Iniciada a partir da interação de um usuário com um elemento da camada de apresentação, a comunicação entre os objetos de diferentes camadas acontece por meio de um mecanismo conhecido como delegação (BOX 3).

Maiores detalhes a respeito de cada uma dessas camadas serão discutidos nas próximas seções deste artigo.

img

Figura 1. Representação esquemática de um sistema com 3 camadas

BOX 3. Delegação

O princípio da delegação estipula que um componente (como um objeto que faz parte de uma camada de um sistema) repasse/delegue, sempre que necessário, a responsabilidade da execução de uma determinada funcionalidade a outro recurso. Isto acontece, normalmente, quando o elemento inicial depender do resultado do processamento de uma operação que pertence ao segundo item presente neste contexto.

Camada de Apresentação

Na camada de Apresentação (também conhecida em inglês como “Presentation Layer”) estão os componentes e instruções empregados na implementação das interfaces gráficas de uma aplicação.

Do ponto de vista prático, estes componentes nada mais são do que controles visuais utilizados para o preenchimento de dados por usuários de um sistema ou, mesmo, na exibição de informações em algum formato pré-definido. Já as instruções presentes na camada de Apresentação têm como objetivo efetuar o tratamento de ações disparadas por estes usuários, a fim de gerar com isto algum resultado específico. Normalmente, o código escrito nesta camada de um sistema envolve a manipulação de controles visuais (incluindo validações simples, como a checagem do tipo de dado que poderá ser inserido em um campo), além de chamadas endereçadas a recursos definidos na camada de Negócios.

Algumas considerações precisam ser feitas durante o desenvolvimento da camada de apresentação:

· O primeiro ponto a ser analisado é para qual ambiente a aplicação a ser construída está voltada. Atualmente, grande parte do desenvolvimento de soluções visuais está focado na construção de sites, mas ainda existem demandas para a implementação de aplicativos desktop, por exemplo;

...
Quer ler esse conteúdo completo? Tenha acesso completo