.NET
- Arquitetura de um projeto de software
![]() |
Neste artigo veremos uma introdução aos conceitos de arquitetura de um projeto de software usados na plataforma .NET. |
Vamos iniciar definindo o que é arquitetura de um projeto de software ou seja arquitetura de uma aplicação.
Existem muitas definições de arquitetura de software :
Uma arquitetura de software envolve a descrição de elementos arquiteturais dos quais os sistemas serão construídos, interações entre esses elementos, padrões que guiam suas composições e restrições sobre estes padrões.GARLAN, 2000
"A arquitetura de software define o que é o sistema em termos de componentes computacionais e os relacionamentos entre estes componentes." VAROTO, 2002
"A arquitetura de software de um sistema consiste na definição dos componentes de software, suas propriedades externas, e seus relacionamentos com outros softwares. O termo também se refere à documentação da arquitetura de software do sistema. A documentação da arquitetura do software facilita: a comunicação entre os stakeholders, registra as decisões iniciais acerca do projeto de alto-nível, e permite o reuso do projeto dos componentes e padrões entre projetos." http://pt.wikipedia.org/wiki/Arquitetura_de_software, acessado em 2012
Na verdade essa tarefa não é tão simples
como parece realmente não é fácil encontrar uma definição exata para
arquitetura de um aplicativo.
Pode-se argumentar que é um subconjunto da arquitetura de software que se
concentra principalmente em aplicativos individuais em contraste com, por
exemplo, a arquitetura corporativa, que abrange todo o software dentro de uma
empresa, incluindo as interações entre diferentes aplicativos.
Podemos dizer então que a arquitetura do aplicativo é responsável pela estrutura
de alto nível de um aplicativo que serve como uma diretriz ou um projeto para
todo o trabalho de desenvolvimento nesse aplicativo.
Freqüentemente, as pessoas comparam isso à arquitetura de construção. No
entanto, existe uma diferença muito importante entre os dois.
Ao contrário dos edifícios, o software muda muito e nunca está realmente "pronto".
Isso se reflete em sua arquitetura, que também precisa se adaptar constantemente
às mudanças de requisitos e ao desenvolvimento.
Assim, a arquitetura de um aplicativo deve sempre ser baseada nos requisitos
conforme especificado pelas partes interessadas (proprietários de negócios,
usuários, etc.).
É importante que isso não inclua apenas os requisitos funcionais (ou seja, o
que o aplicativo precisa fazer), mas também os não funcionais. Este último
está preocupado com o desempenho do aplicativo, confiabilidade, capacidade de
manutenção e outros aspectos que não afetam diretamente sua funcionalidade,
mas têm um impacto em como o aplicativo é experimentado por seus usuários,
desenvolvedores e outras partes interessadas.
Aspectos da arquitetura de uma aplicação
As decisões com relação a arquitetura são feitas em diferentes níveis de um projeto:
Normalmente, a arquitetura do aplicativo
começa com a escolha do tipo de aplicativo a ser desenvolvido.
Será um aplicativo web ou será executado localmente em um dispositivo
(móvel ou desktop)?
A escolha dependerá de vários fatores:
- O aplicativo
será usado em um computador, em um telefone celular ou em ambos ?
- Os usuários sempre terão conectividade com a Internet ou também a usarão no
modo off-line ?
- O aplicativo aproveita ou mesmo exige a utilização de serviços e sensores
disponíveis nos aparelhos, como notificações, geolocalização, câmera
fotográfica, etc.
A tecnologia usada esta relacionada com o tipo de aplicativo e mesmo que você já
tenha decidido sobre a pilha de tecnologia .NET, ainda há muitas opções para
todos os tipos de aplicativos: desktop, celular e web.
Depois de decidir sobre o tipo de aplicativo e a pilha de tecnologia, é hora de examinar os padrões de arquitetura.
Padrões de Arquitetura
Os padrões de arquitetura têm uma função semelhante aos padrões de projeto,
apenas que são aplicáveis em um nível superior. Eles são soluções
reutilizáveis comprovadas para cenários comuns na arquitetura de software.
Vejamos a seguir os principais padrões de arquitetura :
1- Arquitetura
em Camadas
Na arquitetura multicamadas, os aplicativos são estruturados em várias camadas
que têm responsabilidades separadas e, geralmente, também são fisicamente
separadas.
Provavelmente, a aplicação mais comum deste padrão arquitetônico é a arquitetura
em três camadas que consiste em uma camada de acesso a dados (incluindo
armazenamento de dados), uma camada de negócios (implementando a lógica de
negócios) e uma camada de apresentação (ou seja, a interface de usuário do
aplicativo).
2- Arquitetura
Orientada a Serviços
Na arquitetura orientada a serviços (SOA), os componentes do aplicativo são
implementados como serviços autônomos independentes que se comunicam por meio de
um protocolo de comunicação padronizado.
Um contrato de serviço padronizado descreve a funcionalidade exposta por cada
serviço. Isso permite um acoplamento fraco entre os serviços e alto nível de
reutilização. Quando o padrão de arquitetura foi introduzido pela primeira vez,
o protocolo de comunicação mais comumente usado era o SOAP.
3- Microsserviços
Os microsserviços são um subconjunto mais moderno ou uma evolução da arquitetura orientada a serviços (SOA). Como o nome indica, eles geralmente são mais leves, incluindo os protocolos de comunicação que geralmente são REST e gRPC.
Cada serviço pode usar qualquer tecnologia que funcione melhor para ele, mas todos devem ser implementados de forma independente com um alto nível de automação.
Os Microsserviços prometem uma maneira melhor de gerar um impacto nos negócios de forma sustentável. Em vez de uma única unidade monolítica, as aplicações construídas usando microsserviços são compostas de serviços fracamente acoplados e autônomos.
A figura abaixo mostra uma típica arquitetura em camadas de uma aplicação monolítica:
Ao construir serviços que fazem bem uma coisa, você pode evitar a inércia e a
entropia de grandes aplicações. Mesmo em aplicativos existentes, você pode
progressivamente extrair funcionalidades em serviços independentes para tornar
todo o seu sistema mais sustentável.
Quando começamos a trabalhar com microsserviços, percebemos rapidamente que
construir serviços pequenos e auto-suficientes é apenas uma parte da execução de
uma aplicação de negócio critica.
Abaixo temos uma figura que mostra como podemos dividir uma aplicação em microsserviços:
4- Arquitetura orientada
a Eventos
Na arquitetura orientada a eventos, há
ainda mais ênfase no acoplamento fraco e na comunicação assíncrona entre os
componentes. Embora não seja um requisito, o sistema ainda pode ser distribuído,
ou seja, pode consistir em serviços independentes (ou microsserviços).
O principal fator de distinção é que os componentes não se comunicam com
chamadas imperativas. Em vez disso, toda a comunicação ocorre por meio de
eventos (ou mensagens) que são postados por componentes e, em seguida,
ouvidos por outros componentes que têm interesse neles.
O componente que publica o evento não recebe nenhuma resposta direta a ele. No
entanto, ele pode receber uma resposta indireta ao ouvir uma mensagem diferente.
Isso torna a comunicação mais assíncrona quando comparada com os outros padrões.
Decisões dentro de uma arquitetura
Dentro de um padrão de arquitetura de alto nível selecionado, ainda existem muitas decisões de arquitetura de nível inferior a serem feitas que especificam como um código de aplicativo será estruturado, com ainda mais detalhes.
Existem outros padrões disponíveis para essas decisões, como o padrão Model-View-Controller (MVC) para aplicativos da web e o padrão Model-View-Viewmodel (MVVM) para aplicativos de desktop.
À medida que o escopo desses padrões se torna ainda menor, às vezes os chamamos de padrões de projeto em vez de padrões arquitetônicos. Exemplos desses padrões são injeção de dependência, Singleton, Factory, e outros.
Após a definição da arquitetura inicial do aplicativo, é necessário avaliar como ela atende à lista de requisitos em que se baseia. Isso é importante porque, na maioria dos casos, não há uma única escolha correta para os requisitos fornecidos.
Sempre há compromissos e cada escolha tem seu próprio conjunto de vantagens e desvantagens.
Uma certa escolha de arquitetura pode, por exemplo, melhorar o desempenho do aplicativo, mas também aumentar os custos operacionais e reduzir a capacidade de manutenção. Dependendo da importância relativa dos requisitos afetados, essa escolha de arquitetura pode fazer sentido ou não.
A arquitetura de um projeto não é imutável
A arquitetura do aplicativo nunca é imutável.
Ela precisa evoluir conforme o aplicativo está sendo desenvolvido e novos conhecimentos e experiências são reunidos. Se um determinado padrão não funcionar conforme o esperado nas circunstâncias dadas, ele deve ser reavaliado e considerado para uma mudança.
Os requisitos (funcionais e não funcionais) podem mudar e afetar decisões arquitetônicas anteriores também. Claro, alguns padrões arquitetônicos são mais fáceis de mudar do que outros.
Por exemplo, é muito mais fácil introduzir injeção de dependência em um aplicativo ou alterar sua implementação do que alterar o tipo de aplicativo ou padrão arquitetônico central, como MVC.
Arquitetura de projeto na plataforma .NET
Se você está se concentrando na pilha de
tecnologia da plataforma .NET e Azure, a Microsoft oferece muitos recursos
oficiais para ajudá-lo a começar a arquitetar aplicativos.
O site
.NET Architecture Guides é o melhor ponto de partida. Os recursos do site
são organizados com base no tipo de aplicativo que você deseja desenvolver.
Depois de selecionar um (por exemplo, aplicativos ASP.NET ou aplicativos de
desktop UWP), você obtém uma lista de e-books gratuitos para baixar que são
aplicáveis ao tipo de aplicativo selecionado.
O mesmo e-book pode ser listado em vários tipos de aplicativos se a orientação que ele contém se aplica a mais de um.
Em geral, os e-books seguem uma
abordagem semelhante e fazem um bom trabalho ao apresentar ao leitor o tópico
que cobrem.
Normalmente, eles incluem o seguinte:
- Uma introdução às tecnologias envolvidas.
- Uma visão geral dos subtipos de aplicativos disponíveis (por exemplo, MVC vs.
aplicativos da web de página única) e o raciocínio por trás da escolha de um.
- Uma lista de padrões de arquitetura comuns para o tipo de aplicativo com
explicação.
- Um tutorial que cobre as principais partes de um aplicativo, incluindo código
de amostra.
Os livros visam principalmente leitores sem experiência anterior no assunto que
cobrem. Seu conteúdo é adequado para arquitetos e desenvolvedores de software.
Eles ainda podem ser uma leitura valiosa, mesmo se você tiver algum conhecimento
prévio.
Nesse caso, você pode pular algumas partes do livro ou folheá-las, mas mesmo assim você pode pegar algumas coisas ou obter uma visão geral mais completa do tópico.
Com isso você têm disponível um material de qualidade e gratuito para te ajudar no seu desenvolvimento pessoal.
E estamos conversados...
"Cheguemos, pois, com confiança ao
trono da graça, para que possamos alcançar misericórdia e achar graça, a fim de
sermos ajudados em tempo oportuno."
Hebreus 4:16
Referências: