Atenção: esse artigo tem uma palestra complementar. Clique e assista!

Do que trata o artigo

O artigo demonstra os conceitos de arquitetura de projetos aplicando a modularização do desenvolvimento para que a aplicação final seja fácil de modificar, configurável e flexível. Também demonstra como fazer isto com o Visual Studio 2010 mostrando como se criar vários projetos relacionados. Alfiguns conceitos de arquitetura de aplicações serão expostos durante o mesmo para validar a abordagem que foi dada no exemplo.

Para que serve

A modularização procura separar cada aspecto ou funcionalidade da aplicação em uma parte bem definida e até onde é possível, independente das demais. Com isto, caso seja necessário fazer manutenção no programa, se houver uma baixa dependência entre os módulos (baixo acoplamento como será visto), será mais fácil de executar sem comprometer outras partes que não precisam ser alteradas.

Em que situação o tema é útil

O tema é útil caso seja necessário criar aplicações em que suas partes funcionais sejam independentes e reutilizáveis dentro do mesmo projeto ou dentro de outros. Também permite que se separe interface, acesso a bancos e regras de negócio em partes distintas sendo que os componentes mais estruturais como a comunicação com o banco de dados, possam ser aproveitados em outros tipos de projetos.

Resumo do DevMan

Sempre que uma aplicação nova é iniciada todos os envolvidos desejariam que esta fosse definitiva e que seus requisitos e limites fossem claramente estabelecidos e, uma vez concluída, nenhuma modificação fosse necessária permanecendo o código original intacto. No mundo real isto é raro – se não impossível – de se atingir. Todos os projetos precisam passar por modificações para adaptar-se às mudanças ou corrigir problemas encontrados.

Os princípios de arquitetura procuram servir de guias para se atingir um alto índice de modularidade das aplicações. Com a modularidade, o software passa a ser tratado como um produto no qual cada uma das partes é independente sendo que, do perfeito encaixe e integração entre as partes é que ao final, se tem um bom ou mau produto. Para atingir um alto grau de desacoplamento das partes, sendo que cada uma funciona independentemente sem precisar conhecer como outras partes funcionam, deve-se observar como as classes e os métodos são escritos. Como os dados estão estruturados e como isto estará acessível a outros módulos e projetos. O Visual Studio oferece facilidades para a implementação destes conceitos.

Aplicações e softwares precisam mudar. Sempre. E quanto mais rápido se adaptarem aos novos requisitos, maior será a sua longevidade visto que quanto mais flexível e adaptado para as necessidades dos seus usuários, melhor. Uma das formas de se conseguir isto é dar uma atenção contínua a excelência técnica e ao bom design. Desta forma se atinge um nível alto de agilidade no desenvolvimento e na resposta as mudanças necessárias.

Agilidade se atinge também separando o programa e partes menores que são chamadas de módulos. Um programa modular divide responsabilidades e funcionalidades em pequenas partes independentes conectadas entre si através de interfaces bem definidas enquanto que, em um programa monolítico, o menor componente é o programa inteiro.

Programas modulares devem possuir um baixo acoplamento o que representa o quanto uma classe depende da outra para funcionar. Quanto maior for esta dependência entre ambas, mais acopladas estarão. O forte acoplamento traz problemas. Uma aplicação modular é aquela dividida em um conjunto de unidades funcionais - chamados de módulos - que pode ser integrado em uma aplicação extensa.

Considerando por exemplo um sistema para emissão de pedidos de venda cujo código para acesso ao banco de dados está vinculado com a aplicação Windows que provê a interface para a edição de dados. Não raro, este código pode estar inserido inclusive dentro do próprio formulário que faz a edição.

Caso seja necessário mudar-se o gerenciador do banco de dados a aplicação Windows precisará também passar por mudanças. Mais problemático ainda é se esta aplicação for usada por vários clientes, e enquanto alguns usam um banco, outras, usarão outro.

Para poder implementar a modularização de maneira eficiente é importante conhecer alguns princípios de arquitetura de software.

Arquitetura de software

Arquitetura de software envolve decisões significativas sobre a organização do software incluindo a seleção de elementos estruturais e suas interfaces. Também envolve funcionalidade, usabilidade, resiliência (o quanto a aplicação é flexível), desempenho, capacidade de reuso dos componentes, compreensibilidade, limitadores econômicos e tecnológicos, conceitos estéticos e de mercado.

O risco de uma arquitetura mal elaborada pode tornar o software instável e incapaz de suportar requisitos existentes ou futuros do negócio para o qual é desenvolvido ou ainda, difícil de implantar ou gerenciar no ambiente de produção. Arquitetura cuida de como os principais elementos dentro do software são interligados.

Eis algumas das questões que a arquitetura do software leva em consideração:

· Como os usuários usarão a aplicação? Todos usarão o mesmo conjunto de hardware + software?

· Como a aplicação será implantada e gerenciada no ambiente de produção?

· Qual o nível de qualidade requerido pela aplicação quanto aos itens como: segurança, desempenho, concorrência, internacionalização e configuração?

· Como a aplicação pode ser desenvolvida para ser flexível e possa ser mantida ao longo do tempo?

· Quais são as tendências da arquitetura que poderão causar impacto na aplicação atualmente ou após ela ter sido implantada?

Com estes itens em mente já é possível começar a delinear como a aplicação deve ser escrita. Para auxiliar, alguns dos princípios da arquitetura também permitem estabelecer os padrões:

· Construa preparando para mudança em vez de desenvolver para manter como foi feito.

· Faça modelagem para analisar e reduzir riscos. A modelagem ajuda principalmente em casos onde existirá a possibilidade de usar vários meios para se gravar os dados. Ao se definir os nomes das colunas e os tipos de dados, já se começa a verificar limitações e riscos que poderão ser encontrados.

· Use os modelos e visualizações como ferramentas para comunicação e colaboração.

· Identifique as principais decisões de engenharia a serem tomadas.

Arquitetura é focada em organizar os componentes para suportar uma funcionalidade específica. Se estiver sendo escrita uma classe para armazenar dados, é isto o que a mesma deve fazer e somente isto. A classe não deve e nem precisa saber como estes dados são recuperados ou persistidos no disco, na rede ou mesmo na nuvem.

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