Order Manager é um sistema de gerenciamento de pedidos desenvolvido como projeto de evolução técnica em backend Java.
O foco principal do projeto é aplicar princípios de arquitetura, separação de responsabilidades e desacoplamento entre camadas. A aplicação iniciou como uma estrutura simples e foi refatorada para suportar crescimento sustentável, preparando o terreno para se tornar uma API usando Spring Boot e JPA.
Além do objetivo técnico, o projeto poderá evoluir para auxiliar no gerenciamento de pedidos da sorveteria da minha irmã, servindo como aplicação prática do que está sendo desenvolvido.
Este projeto tem como finalidade:
- Aplicar conceitos de orientação a objetos
- Aplicar princípios arquiteturais inspirados em Clean Architecture
- Praticar desacoplamento entre regras de negócio e infraestrutura
- Servir como ponte para aprendizado de JDBC, JPA e Spring Boot
- Evoluir gradualmente para uma API REST
O sistema começou como laboratório de estudo e está sendo evoluído de forma incremental.
O projeto está estruturado em camadas:
domain→ Entidades, regras de negócio, enums e exceçõesusecase→ Orquestração das ações do sistemarepository→ Interfaces que definem contratos de persistênciainfra→ Implementação de banco de dadosui→ Interação via console
- Separação clara de responsabilidades
- Dependência de abstrações (use cases dependem de interfaces)
- Regras de negócio concentradas no domínio
- Infraestrutura desacoplada da lógica principal
- Cadastro de clientes
- Validação básica de autenticação
- Criação de pedidos
- Associação de produtos ao pedido
- Salvar pedidos, produtos e clientes em banco de dados SQL
- Java 17
- Programação Orientada a Objetos
- Arquitetura em camadas
- JDBC
- MySQL
- JPA (Hibernate)
- Spring Boot
- PostgreSQL
- Testes unitários (JUnit)
- API REST
- Implementação com JDBC (MySQL)
- Migração para JPA
- API REST com Spring Boot
- Implementação de testes unitários
- Integração com frontend simples
- Implementação de desconto para clientes VIP
- Sistema de frete
- Evolução da autenticação
Persistência em MySQL para facilitar a implementação com JDBC.
Script SQL de criação do banco de dados para garantir que o sistema funcione em outras máquinas.
Uso de PreparedStatement para evitar SQL injection.
A geração de ID foi delegada ao banco de dados, e atribuida ao objeto após salvo no banco.
Foi criada uma BusinessRuleException para diferenciar falhas de regra de negócio de erros técnicos do sistema.
Durante o desenvolvimento, o projeto passou por uma mudança estrutural significativa.
Inicialmente, todas as classes estavam concentradas em uma única pasta, o que dificultava manutenção e crescimento. A reorganização em camadas marcou um ponto de virada, tornando o sistema mais previsível e sustentável.
Entre os principais aprendizados:
- Importância da separação de responsabilidades
- Benefícios do desacoplamento via interfaces
- Posicionamento correto das regras de negócio
- Diferença entre erro técnico e violação de regra
- Planejamento arquitetural antes do crescimento
O projeto representa uma transição de código funcional para código estruturado.
- JDK 17
- MySQL Server ou WAMP Server
git clone https://github.com/DaviSantos-Dev/order-manager.git Abrir o projeto na IDE (preferencialmente IntelliJ) e executar a classe Main. A aplicação é configurada automaticamente e inicia via console.
📌 Status
Projeto em evolução contínua, utilizado como laboratório técnico e futura aplicação prática.