Questão nº 9
Questão de Tecnologia da Informação · FGV CVM 2024 (nº 9)
A analista Raquel foi designada para refatorar o código de um sistema à luz da Arquitetura Limpa. Raquel iniciou a tarefa assimilando os princípios de design utilizados pela arquitetura. A analista seguiu determinando a camada apropriada da Arquitetura Limpa para cada módulo do sistema. Logo após, Raquel revisou a implementação dos módulos A e B, que encapsulam regras de negócio específicas à aplicação. A analista removeu as referências diretas aos módulos A e B no código da camada interior adjacente, aplicando o princípio de design que garante a não violação da Regra da Dependência ao longo das camadas, durante o fluxo de controle.
Raquel removeu as referências diretas aos módulos A e B da camada de:
- Aentidades, aplicando a segregação de interface;
- Bentidades, aplicando a inversão de dependência; (alternativa correta)
- Ccasos de uso, aplicando a segregação de interface;
- Dadaptadores, aplicando a segregação de interface;
- Eadaptadores, aplicando a inversão de dependência.
Resposta comentada
Gabarito Alternativa B
A Arquitetura Limpa organiza o código em camadas concêntricas, onde as camadas internas contêm as regras de negócio mais importantes e as camadas externas lidam com detalhes de implementação (como interface de usuário ou banco de dados). A Regra da Dependência exige que as dependências sempre apontem para dentro, ou seja, as camadas internas nunca devem depender das camadas externas. Para garantir isso, usa-se o Princípio da Inversão de Dependência (DIP), que faz com que módulos de alto nível (camadas internas) e módulos de baixo nível (camadas externas) dependam de abstrações, e não de implementações concretas.
- (A) Incorreta: Embora a camada de entidades seja a "camada interior adjacente" aos casos de uso, o princípio primário para inverter dependências e garantir a Regra da Dependência é a Inversão de Dependência (DIP), não a Segregação de Interface (ISP).
- (B) Correta: Os módulos A e B, que encapsulam "regras de negócio específicas à aplicação", são os Casos de Uso. A "camada interior adjacente" aos Casos de Uso é a camada de Entidades. Se a camada de Entidades possuía referências diretas aos Casos de Uso (A e B), isso violava a Regra da Dependência (camadas internas não devem depender de camadas externas). Raquel removeu essas referências aplicando o Princípio da Inversão de Dependência (DIP), onde a camada de Entidades (módulo de alto nível) define uma abstração (interface) e a camada de Casos de Uso (módulo de baixo nível) a implementa, invertendo a dependência.
- (C) Incorreta: Se A e B são os Casos de Uso, a "camada interior adjacente" não seria a própria camada de Casos de Uso, mas sim a de Entidades. Além disso, o princípio correto para essa inversão de dependência é o DIP, não o ISP. A armadilha aqui é confundir a camada que contém as regras de negócio (Casos de Uso) com a camada que depende delas de forma incorreta.
- (D) Incorreta: A camada de adaptadores é exterior à camada de Casos de Uso, não "interior adjacente". As dependências da camada de adaptadores devem apontar para dentro (para os Casos de Uso), então remover referências diretas de adaptadores para Casos de Uso seria uma refatoração válida, mas não se encaixa na descrição de "camada interior adjacente".
- (E) Incorreta: Embora o Princípio da Inversão de Dependência (DIP) seja o correto, a camada de adaptadores é exterior aos Casos de Uso (que são A e B), não "interior adjacente". A armadilha aqui é que o princípio está correto, mas a camada indicada está errada em relação à descrição "camada interior adjacente".
Fonte: FGV CVM 2024 Analista CVM - TI Sistemas e Desenvolvimento (Perfil 8) (Caderno Tipo 1). Reproduzida para fins de estudo.