Recursos especiais neste artigo:
Artigo no estilo Curso Online
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).
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).
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.
Figura 1. Representação esquemática de um sistema com 3 camadas
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;
...Confira outros conteúdos:
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.