Pular para o conteúdo principal

Questão de TI - Desenvolvimento de Sistemas — Princípios SOLID — FCC 2026

TI - Desenvolvimento de SistemasPrincípios SOLID
Código
fc142093
Banca
FCC
Órgão
MPE SE
Ano
2026
Cargo
Ana ( )

Uma equipe de TI mantém um módulo de processamento de denúncias online em uma API ASP.NET Core. Atualmente, a classe DenunciaService possui um switch com ifs para cada canal de entrada (formulário web, aplicativo móvel, denúncia presencial digitalizada). Além disso, ela valida os dados, calcula prioridades, chama o repositório de denúncias e escreve logs. Sempre que um novo canal de recebimento é criado, DenunciaService cresce e exige mudanças no switch.

 

Para a equipe facilitar testes e adicionar canais sem alterar o serviço central, aderindo à Arquitetura Limpa e SOLID/DRY/KISS, a melhor abordagem é

  1. Ausar um Service Locator estático para resolver WebService ou AppMobileService por nome. Isso reduz dependências explícitas, mas cria acoplamento implícito e dificulta testes.
  2. Bcriar uma enum DenunciaChannel e aplicar Strategy dentro do próprio DenunciaService, selecionando via switch. Organiza melhor mantendo a exigência de editar a classe central a cada novo canal.
  3. Cmanter a lógica de decisão em um switch dentro de DenunciaService, mas extrair os blocos de cada canal para métodos privados. O código fica mais organizado e a classe continua centralizando toda a lógica, precisando ser alterada para novos canais.
  4. Ddefinir interfaces como ICanalDenuncia e IPrioridadeCalculator, implementar adaptadores separados para cada canal (exemplo: WebAdapter, AppMobileAdapter, PresencialAdapter) e registrar no container de Dependency Injection. O DenunciaService depende apenas de abstrações e recebe IEnumerable<ICanalDenuncia>, permitindo extensões sem alterar o núcleo.
  5. Ecriar uma classe base DenunciaServiceBase e herdar WebDenunciaService, AppMobileDenunciaService etc. O controller decide qual subclasse instanciar, o que distribui a lógica mantendo forte acoplamento com implementações concretas.
Revelar gabarito e comentário

GabaritoD — definir interfaces como ICanalDenuncia e IPrioridadeCalculator, implementar adaptadores separados para cada canal (exemplo: WebAdapter, AppMobileAdapter, PresencialAdapter) e registrar no container de Dependency Injection. O DenunciaService depende apenas de abstrações e recebe IEnumerable<ICanalDenuncia>, permitindo extensões sem alterar o núcleo.

Link permanente: /questoes/fc142093