Skip to content

Demanxier/AgendamentoConsultas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

HealthSchedule - Clean Architecture & SOLID em Java Puro

🎯 Sobre o Projeto

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.

🧠 Conceitos Aplicados

1. Clean Architecture (A Cebola)

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 de Medico e Paciente).
  • 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).

2. Princípios SOLID

Cada decisão de código foi guiada por um princípio:

  • S (SRP): Classes com responsabilidade única. A Entidade Consulta nã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).

📂 Estrutura do Projeto

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

🚀 Como Rodar

Pré-requisitos: Java 17 ou superior.

  1. Clone o repositório
git clone https://github.com/Demanxier/AgendamentoConsultas.git
  1. Compile e Execute Como é Java puro, você pode rodar diretamente pela sua IDE (IntelliJ/Eclipse/VS Code) executando a classe Main.java.

🛠️ Funcionalidades

  • 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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages