.NET - Desenvolvimento de software com uma abordagem corporativa


É quase sempre a mesma coisa: começamos o desenvolvimento de uma aplicação e no princípio ela começa pequena e com requisitos limitados e parece que vai permanecer assim no futuro. Mas logo vemos que novos requisitos e novas funcionalidades são adicionadas à aplicação e ela começa a crescer e a crescer e a ficar fora do controle. Então começamos a refletir sobre o fato de que se soubéssemos que a aplicação iria se tornar tão importante e crescer tanto a teríamos construído de uma forma diferente levando em conta a extensibilidade e escalabilidade mas agora temos que correr atrás do prejuízo.

Por que será que essa história tem se repetido anos a fio no processo de desenvolvimento de software ?

Porque não tomamos uma decisão de mudar a forma de encarar o problema e de por em prática princípios que achamos que somente em aplicações corporativas devem ser aplicados ?

Neste artigo eu apresento os princípios básicos para que o desenvolvimento de software seja feito levando em conta as boas práticas visando sempre a extensibilidade e escalabilidade e sem perder de foco a simplicidade.

O objetivo é mostrar que isso é mais simples do que imaginamos e, que embora pareça mais complexo trás um ganho de produtividade.

Não é preciso ser um mestre ou ter muitos anos de experiência para aplicar tais princípios basta apenas querer fazer um bom trabalho: um trabalho de qualidade.(ISO 9126)

Princípios básicos no desenvolvimento de software

Ao projetar e desenvolver um produto de software devemos aderir a certos princípios básicos de arquitetura que permitirão que os alicerces de nosso projeto esteja bem fundamentado.

Modularidade e baixo acoplamento

Ao projetar e desenvolver um software procure sempre dividir as funcionalidades relacionadas em vários módulos e faça isso de uma forma que não exista interdependências entre os módulos ou que ela seja a mais baixa possível.

Em projetos orientado a objetos, que é nosso foco, temos que os objetos são interligados trocando mensagens uns com os outros. O termo baixo acoplamento indica que as classes de um projeto sestão pouco interligadas e têm apenas o conhecimento sobre o que devem fazer. Isso facilita o entendimento, a reutilização e evita a propagação de mudanças.

Separação de responsabilidades

Ao projetar e desenvolver um software procure sempre aplicar a separação de responsabilidades que é o processo de dividir sua aplicação em unidades específicas de funcionalidades de tal forma que cada unidade atenda somente às necessidades de sua responsabilidade tendo o mínimo de sobreposição possível com outras unidades em termos de funcionalidade; ou seja, nenhum elemento do sistema deve compartilhar as responsabilidades de outro ou abranger responsabilidades não relacionadas.

Isto é alcançado estabelecendo limites, onde um limite é qualquer restrição lógica ou física que delimita um determinado conjunto de responsabilidades.

Extensibilidade

Ao projetar e desenvolver um software procure sempre construir a maior parte da aplicação de forma extensível para que se for necessário possamos substituir partes da funcionalidade sem ter que recompilar ou redesenhar a aplicação inteira.

Desenvolva sempre pensando no futuro de forma que o sistema possa ser estendido(extendido) sem traumas.As extensões podem ser feitas através da adição de novas funcionalidades ou através da modificação de funcionalidades existentes. O objetivo central é estar preparado para mudanças e ao mesmo tempo minimizar o impacto que isso poderá ter nas funções já existentes do sistema.

Arquitetura em camadas

Uma das maneiras de obtermos a separação das responsabilidades é dividir as principais áreas da aplicação em camadas. Na maioria das aplicações essa divisão pode ser feita criando 3 camadas as quais são :

  • camada de apresentação
  • camada da lógica de negócios
  • camada de acesso a dados

A organização em camadas é a chave para a independência entre os componentes e esta independência é que vai atingir os objetivos de eficiência , escalabilidade , reutilização e facilidade de manutenção.

obs: É importante deixar claro que estamos falando em camadas lógicas e não em necessariamente em camadas físicas quando uma ou mais camadas estão hospedadas em locais distintos.

A separação em camadas lógicas torna os sistemas mais flexíveis permitindo que as partes possam ser alteradas de forma independente. As funcionalidades da camada de negócio podem ser divididas em classes e essas classes podem ser agrupadas em pacotes ou componentes reduzindo as dependências entre as classes e pacotes ; podem ser reutilizadas por diferentes partes do aplicativo e até por aplicativos diferentes. O modelo em 3 camadas tornou-se a arquitetura padrão para sistemas corporativos com base na Web.

A modelagem orientada a objetos ajuda a promover a modularidade pois os objetos encapsulam seus dados (propriedades, estados) e oferecem funcionalidades através de seus métodos. Projetando-se de forma adequada os objetos podem ter reduzidas as dependências entre si ficando assim fracamente acoplados e serão mais fáceis de manter e evoluir.

Essa abordagem é adequada para a maioria das aplicações de baixa e média complexidade. Para aplicações mais complexas talvez haja a necessidade de acrescentar outras camadas levando-nos a uma arquitetura em n-camadas.

Camada de apresentação : Esta camada normalmente esta relacionada com a interface do usuário de sua aplicação incluindo itens como: botões, links, e outros controles com os quais o usuário interaja enquanto estiver usando o aplicativo.

Camada de negócios : Esta camada é o local onde estão as regras do negócio de sua aplicação. O objetivo da camada de negócios é implementar a lógica da aplicação,
expondo esta lógica para a camada de apresentação.

Camada de Acesso a dados : A camada de acesso a dados é responsável pelo acesso e interação com uma fonte de dados a qual poderia ser: um banco de dados, arquivos XML, arquivos de texto,um serviço web, etc.

Nas referências existem implementações que levam em contas esses princípios e que podem ser consideradas como uma introdução básica da aplicabilidade dos mesmos na prática.

Eu procurei ser bem objetivo e o mais simples possível sem entrar em detalhes que deverão ser considerados para quem desejar se aprofundar no tema.

Veja neste link um ebook grátis que serve como um guia para melhorar o desempenho de sua aplicação: Improving .NET Application Performance and Scalability

Marcos 13:5-6 Então Jesus começou a dizer-lhes: Acautelai-vos; ninguém vos engane; muitos virão em meu nome, dizendo: Sou eu; e a muitos enganarão.

Referências:


José Carlos Macoratti