Arquitetura de Software – Organização em Camadas com Java 9

onionNa arquitetura de software, a divisão em camadas é umas das principais estratégias de organização da estrutura de um futuro software. Uma das dúvidas bem frequentes no nosso curso de arquitetura é como na prática fazer tal operação. A dica de hoje é uma explicação bem completa de como fazermos isso usando Java:

1. Separação por Pacotes

Em projetos de pequeno e médio porte é muito comum separarmos as camadas da solução em simples pacotes, no qual cada pacote estabelece o limite de cada camada. É a forma mais básica e fácil de fazer. Sempre inicie um projeto fazendo isso.

2. Separação por Projetos

Acontece quando você começa separando as camadas em pacotes mas chega um ponto do projeto que as camadas começam a ficar muito grandes, os pacotes passam a se tornar”gordinhos” e o projeto começa a pesar. É nesse  ponto que precisamos parar e melhorar. Assim, refatoramos cada camada para um projeto separado, movendo todos os recursos e testes para dentro de projetos individuais. Teríamos um projeto para GUI, Regras de Negócio, Relatórios, Persistência e etc. Cada projeto passa então a gerar um JAR que corresponde aquela determinada camada que é integrado ao projeto principal, normalmente o projeto que implementa a camada de GUI. Nesse ambiente, é necessario o uso de ferramentas de gerenciamento de dependências como Maven ou Gradle para geração dos jar, amarração de dependência e build do software final.

3. Separação por Contextos de Negócio

Quando um projeto começa a fica muito grande, mesmo com a divisão de camadas por projetos separados, algumas camadas podem se tornar muito grandes ao longo do tempo. É ai que uma camada/projeto pode ser divido em contextos de negócios. É o que chamamos de Bounded Context. Veja nesse link uma breve explicação. É exatamente aqui que começa o assunto de microservices, no qual você tem a opção de fazer deploy de cada camada ou contexto de negocio em servidores separados. E assim, você passa a dividir cada camada em contextos individuais , gerando seus respectivos jar’s da mesma forma que na opção 2 ou fazendo uso da estratégia de microservices.

4. Separação por Módulos Java 9

Com a o lançamento do Java 9, teremos mais uma opção agora fundamentada na especificação  Java que são os módulos. Nessa opção, cada camada ou contextos de negócios da solução poderá ser organizada em um módulos declarando seus limites, classes expostas e dependências internas. Depois do lançamento seria o opção mais indicada. Lembrando que mesmo usando o módulos, ainda sim podemos fazer dentro de um mesmo projeto ou em projetos separados.

Você gostaria de aprender mais sobre o assunto? Faça nosso curso de Introdução a Arquitetura de Software com Java. Estarei la para te atender🙂 !

“Quem teme o SENHOR e é humilde consegue riqueza, prestígio e vida longa.” Provérbios 22:4