Arquitetura Monolítica Modular: Organização Modular de Pastas
Quando você está a desenvolver uma Aplicação Empresarial que será utilizada apenas pela empresa e os seus funcionários. Você não está a construir uma aplicação de escala global, ou não tem um caso para escalabilidade. Você não precisa de Micro-serviços e de todas as complexidades de infraestrutura que resultam destes.
Ainda assim, você precisa ter boas bases para a sua aplicação. E se chegar o momento, você pode facilmente dividir as partes em serviços separados.
Este artigo pretende expandir a proposta apresentada em Componentes do Software Empresarial: Caso Prático, relativamente a organização de pastas segundo os conceitos de Clean Architecture e Hexagonal Architecture.
Aqui irei propor uma estrutura de pastas mais elaborada da que foi apresentada no artigo anterior.
Devo ressalvar que as arquiteturas Clean e Hexagonal não se referem à organização das pastas, mas sim uma abstração lógica dos componentes de software, das suas responsabilidades, e das relações de dependência entre si.
Aspectos Fundamentais a Considerar
A organização de pastas deve estar alinhado com os conceitos de design de software, e uma das qualidades mais importantes terá a ver com a manutenção da aplicação ao longo prazo, e com a capacidade de evoluir, ou escalar, com o mínimo de esforço necessário.
Separação de Responsabilidades: A estrutura de pastas deve refletir o princípio de separação de responsabilidades, em que diferentes componentes ou camadas do sistema são agrupados com base em suas responsabilidades.
Arquitetura em Camadas: Organizar com base nas diferentes camadas, como por exemplo a camada de apresentação, a camada de negócios e a camada de dados.
Módulos Funcionais: Identificar os módulos funcionais da aplicação e organizar as pastas de acordo. Cada módulo deve ter sua própria pasta com os seus componentes, como por ex. controllers, serviços, models e views.
Reutilização de Código: Estrutura de pastas que promova a reutilização de código. Identificar os componentes comuns ou utilitários que podem ser compartilhados em diferentes partes da aplicação e colocá-los em pastas ou módulos separados.
Escalabilidade e Crescimento: Considere a escalabilidade e o crescimento futuro do projeto. A estrutura de pastas deve ser capaz de acomodar novos recursos, componentes ou camadas sem se tornar excessivamente complexa ou confusa. Ela deve facilitar a adição ou modificação de funcionalidades à medida que o projeto evolui.
Convenções de Nomenclatura: A estrutura deve seguir convenções claras e consistentes de nomenclatura para pastas e ficheiros. Facilitando na navegação do código e na compreensão do propósito de cada pasta ou ficheiros.
Configuração e Recursos: Separar arquivos de configuração, recursos estáticos (como imagens ou ficheiros de estilo) e outros ficheiros não relacionados ao código-fonte em pastas apropriadas.
Colaboração e Estrutura da Equipa: Considerar a estrutura da equipa de desenvolvimento e como eles colaboram no projeto. A estrutura de pastas deve estar alinhada com o fluxo de trabalho da equipe e facilitar o desenvolvimento simultâneo, controle de versão e processos de revisão de código.