Este projeto é uma aplicação Java que simula a loteria Mega Sena, usando conceitos avançados de POO, princípios SOLID e padrão MVC. O código segue boas práticas e é extensível. Primeiro, usei arrays para manipular os dados, devido a limitações impostas ao desafio (Código da versão entregue do desafio), mas depois mudei para listas e conjuntos, que são mais flexíveis e rápidos.
- Geração de números aleatórios para simular o sorteio da Mega Sena.
- Interação com o usuário para escolha dos números desejados.
- Apresentação dos números sorteados e resultados da simulação.
O projeto está estruturado utilizando o padrão de arquitetura MVC:
MegaSena
: Define as funcionalidades para manipulação dos números escolhidos e sorteados.Drawn
: Interface para geração dos números sorteados.
MegaSenaView
: Interface para exibição das mensagens e resultados.MegaSenaViewImpl
: Implementação da interface para interação com o usuário.
MegaSenaController
: Define as operações disponíveis no controller.MegaSenaControllerImpl
: Implementação das operações do controller.
InputDAO
eOutputDAO
: Interfaces para entrada e saída de dados.- Implementações correspondentes (
InputDAOImpl
eOutputDAOImpl
).
DefaultInput
eDefaultOutput
: Implementações padrão para entrada e saída de dados.Input
eOutput
: Interfaces SPI (Service Provider Interface) para entrada e saída de dados personalizáveis.- Classes relacionadas às extensões do
ControllerLifecycleHooks
.
ControllerLifecycleHooks
: Define os pontos de extensão do ciclo de vida do controller.- Implementação (
ControllerLifecycleHooksImpl
) e classes SPI associadas.
O projeto foi arquitetado levando em consideração a extensibilidade, empregando a API Service Loader do Java para ampliar o Princípio Aberto-Fechado (OCP). As interfaces foram utilizadas para definir os Hooks de ciclo de vida do controlador, possibilitando a adição de novos comportamentos sem a necessidade de alterar o código já existente. Adicionalmente, a substituição de I/O pode ser realizada sem qualquer modificação no código-fonte, reforçando a flexibilidade e adaptabilidade do projeto.
Gostaria de expressar minha gratidão ao Vai na Web, e aos professores Samuel e Leno, cujo as orientações contribuiu significativamente para o desenvolvimento deste projeto. Além disso, a inspiração e base de conhecimento para a aplicação dos princípios SOLID foram obtidas através do livro Desbravando SOLID: Práticas avançadas para códigos de qualidade em Java moderno.
Este projeto visa demonstrar boas práticas de desenvolvimento em Java e serve como base para aplicações futuras, promovendo a manutenibilidade, extensibilidade e qualidade do código.