Pular para o conteúdo

Lista de Exercícios 011: Facade

Analise cada situação e diga se o padrão Facade é ou não uma boa escolha. Em cada caso, classifique como adequada ou não adequada e justifique brevemente.

  1. Situação 1: um módulo de pagamentos precisa coordenar autenticação com gateway, cálculo de frete, emissão de cobrança e confirmação da transação por meio de uma única operação de checkout.
  2. Situação 2: uma classe simples possui apenas dois métodos triviais e nenhum fluxo de integração com outras partes do sistema.
  3. Situação 3: um controlador web repete em vários endpoints a mesma sequência de chamadas para validar aluno, verificar vagas e registrar matrícula.
  4. Situação 4: uma biblioteca externa possui dezenas de classes, mas a aplicação usa sempre o mesmo pequeno subconjunto delas.
  5. Situação 5: uma regra matemática isolada precisa apenas trocar o algoritmo de cálculo em tempo de execução.

Leia o código abaixo, identifique o problema conceitual relacionado ao acoplamento com o subsistema e sugira como melhorá-lo em alto nível usando Facade.

class ControllerMatricula {
public void matricular(int alunoId, String disciplina) {
AlunoRepository alunoRepository = new AlunoRepository();
FinanceiroService financeiroService = new FinanceiroService();
DisciplinaRepository disciplinaRepository = new DisciplinaRepository();
MatriculaService matriculaService = new MatriculaService();
NotificacaoService notificacaoService = new NotificacaoService();
if (!alunoRepository.alunoExiste(alunoId)) {
System.out.println("Aluno nao encontrado");
return;
}
if (!financeiroService.situacaoRegular(alunoId)) {
System.out.println("Aluno inadimplente");
return;
}
if (!disciplinaRepository.haVagas(disciplina)) {
System.out.println("Sem vagas");
return;
}
matriculaService.matricular(alunoId, disciplina);
notificacaoService.enviarConfirmacao(alunoId, disciplina);
}
}

Uma equipe utiliza uma biblioteca de conversão de vídeo com muitas classes técnicas. A aplicação precisa apenas converter arquivos de entrada para um formato final, sempre seguindo a mesma sequência de passos. Qual alternativa descreve melhor a solução mais adequada?

a. Usar Facade para encapsular a sequência de chamadas da biblioteca em uma interface simples de conversão.

b. Usar Decorator para adicionar novos formatos de vídeo sem depender da biblioteca.

c. Usar Singleton para garantir que exista apenas um codec no sistema.

d. Usar Composite para organizar os codecs em forma de árvore.

e. Usar Strategy para escolher dinamicamente o algoritmo de conversão sem criar uma fachada.

Implemente uma solução simples usando Facade para representar o processo de abertura de chamado em um sistema de suporte acadêmico.

  • Crie classes internas como AlunoService, CategoriaService, ChamadoService e EmailService.
  • Faça cada classe ter uma responsabilidade pequena e separada.
  • Crie uma fachada chamada AberturaChamadoFacade.
  • Na fachada, implemente um método abrirChamado(int alunoId, String categoria, String descricao).
  • Dentro desse método, valide o aluno, registre o chamado e envie uma confirmação.
  • No main, use apenas a fachada para executar o fluxo completo.