Calcula os divisores possíveis para um número inteiro positivo.
O projeto e estruturado com as seguintes camadas
- Entrypoint: É o ponto de entrada do sistema, deve ser o projeto a ser executado para que a aplicação seja executada.
- Application: Corresponde a camada aonde ocorre a orquestração dos fluxos das funcionalidades do sistema.
- Domain: Contém o core da aplicação, nela as regras de negócios são definidas.
- CrossCutting: É a camada que conté códigos que podem ser utilizados por todas as outras camadas do projeto.
- Ioc: É a camada que resolve as dependências necessárias para que seja possível usar as injeçoes de dependências.
- Tests: Contém os testes de unidade.
- O foco deste projeto é resolver um problema em específico. Caso seja necessário gerar um serviço para que sejam realizados processamentos em grande escala é recomendável que seja feito um projeto que execute essas regras em segundo plano com uma abordagem que torne a execução performática. Um exemplo seria uma estratégia com o uso de filas de mensageria (RabbitMQ, Apache Kafka, etc...) usando cluster de preferência em uma plataforma cloud (AWS, Azure) para otimizar a execução e garantir principalmente resiliência, disponibilidade e escalabilidade.
- Uma estratégia também interessante é o uso de cache para os números já calculados, isso economiza recursos de processamento e aumenta significativamente o ganho de performance.
O projeto foi desenvolvido de forma opcional em inglês. Somente estão em português as mensagens de retorno e interação com o usuário.
Neste projeto, utilizei o conceito de design por contratos (Desing By Contracts), e para isso, foi usada a biblioteca Flunt.