Questão de TI - Desenvolvimento de Sistemas — Princípios SOLID — FCC 2026
- 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 é
- 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.
- 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.
- 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.
- 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.
- 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.