O HealthSchedule é um sistema de agendamento de consultas médicas desenvolvido com o objetivo de estudar e aplicar os princípios da Clean Architecture (Arquitetura Limpa) e SOLID sem o uso de frameworks robustos (como Spring Boot).
O desafio deste projeto foi proposital: remover a "mágica" das anotações (@Autowired, @Service, @Entity) para implementar manualmente a Injeção de Dependência e entender, na prática, como o desacoplamento entre regras de negócio e infraestrutura funciona.
O projeto segue estritamente a divisão de camadas, garantindo que o núcleo do sistema não conheça o mundo externo:
- Domain (Entidades): Regras de negócio corporativas críticas (Ex: Validação de datas na
Consulta, integridade deMedicoePaciente). - Application (Use Cases): Regras de negócio da aplicação. Orquestra o fluxo de dados entre entidades e repositórios.
- Infrastructure (Interface Adapters & Frameworks): Implementações reais de bancos de dados (em memória), UI (Console) e serviços externos (Notificações).
Cada decisão de código foi guiada por um princípio:
- S (SRP): Classes com responsabilidade única. A Entidade
Consultanão se salva no banco; o Repositório faz isso. - O (OCP): Aberto para extensão, fechado para modificação. O sistema de notificações usa uma Interface
Notificador. Se quisermos mudar de Email para SMS, criamos uma nova classe sem tocar no Caso de Uso. - L (LSP): As implementações de repositório (Em Memória) podem ser substituídas por implementações reais (SQL) sem quebrar a aplicação.
- I (ISP): Interfaces segregadas para cada necessidade (
RepositorioDeMedico,RepositorioDeAgendamento). - D (DIP): Inversão de Dependência. Os Casos de Uso (alto nível) dependem de abstrações (Interfaces), não de implementações concretas (banco de dados).
src/
└── com/seusistema/healthschedule/
├── domain/ # Camada Central (Entidades)
│ └── entities/ # Ex: Consulta.java, Medico.java
│
├── application/ # Regras da Aplicação
│ ├── usecases/ # Ex: AgendarConsultaUseCase.java
│ ├── gateways/ # Interfaces (Portas de saída)
│ └── dto/ # Objetos simples de entrada/saída
│
├── infrastructure/ # Detalhes Técnicos
│ ├── persistence/ # Implementação dos Repositórios (HashMap)
│ ├── notifications/ # Implementação de Email/SMS
│ └── controllers/ # Interação com usuário (Console)
│
└── Main.java # Ponto de entrada e Injeção de Dependência
Pré-requisitos: Java 17 ou superior.
- Clone o repositório
git clone https://github.com/Demanxier/AgendamentoConsultas.git
- Compile e Execute
Como é Java puro, você pode rodar diretamente pela sua IDE (IntelliJ/Eclipse/VS Code) executando a classe
Main.java.
-
Cadastro de Médicos (com geração de ID único).
-
Cadastro de Pacientes.
-
Agendamento de Consultas com validação de:
-
Existência de Médico e Paciente.
-
Horário no passado.
-
Conflito de horários (médico já ocupado).
-
Sistema de Notificação simulado (Console Log).
-
Persistência em Memória (HashMap).
Desenvolvido por Demanxier como parte dos estudos em Arquitetura de Software.