Questão de Arquitetura de Software — MVC (Model-view-controller) — FCC 2022
Arquitetura de Software›MVC (Model-view-controller)
Código
fc062333
Banca
FCC
Órgão
PGE-AM
Ano
2022
Cargo
Técnico em Gestão Procuratorial Especialidade Engenharia de Software
Um Técnico observou que o padrão MVC define regras de como seus componentes devem se comunicar. Assim, está correto que
AControllers não podem interagir com Views e Views podem interagir diretamente com o Model.
BControllers não podem se comunicar com Models e Views podem interagir diretamente com outras Views.
COs usuários não podem interagir diretamente com o Model e Controllers podem se comunicar com o Model.
DOs usuários podem interagir diretamente com os Controllers e Views podem interagir diretamente com o Model.
EControllers não podem interagir com Views e Controllers podem se comunicar com o Model.
Revelar gabarito e comentário▾
GabaritoC — Os usuários não podem interagir diretamente com o Model e Controllers podem se comunicar com o Model.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Padrão MVC — Comunicação entre componentes
Gabarito: letra C. No padrão MVC, os usuários interagem exclusivamente com a camada Controller, nunca diretamente com o Model; já o Controller se comunica livremente com o Model para enviar comandos e atualizar dados. Essa é a divisão de responsabilidades clássica do MVC.
Contexto do padrão MVC
O MVC separa a aplicação em três componentes interconectados:
Model: gerencia os dados e a lógica de negócio. Não interage diretamente com o usuário.
View: exibe os dados do Model e encaminha as ações do usuário para o Controller.
Controller: recebe as entradas do usuário, interpreta-as e as envia ao Model e/ou à View para atualização.
As regras de comunicação são bem definidas:
O Controller pode se comunicar com o Model (enviando comandos) e com a View (alterando apresentação).
O Model notifica a View e o Controller sobre mudanças de estado, mas a View não invoca o Controller diretamente.
O usuário não interage diretamente com o Model; sua interação é sempre via Controller.
Análise das alternativas
Componente
Pode interagir com Model?
Pode interagir com View?
Pode interagir com usuário?
Observação
Controller
Sim (comandos/atualização)
Sim (alterar exibição)
Sim (recebe entradas)
Intermediário entre usuário e Model
View
Sim (consulta/notificação)
Não (no MVC clássico)
Sim (exibe dados, encaminha ações)
Não invoca Controller diretamente
Model
—
Sim (notifica mudanças)
Não
Gerencia dados/lógica; não interage com usuário
Usuário
Não
Sim (via View)
—
Interage exclusivamente via Controller
MVC — Comunicação: Usuário (Interage com Model, Interage com Controller); Controller (Comunica com Model, Comunica com View); Model (Notifica View e Controller, View invoca Controller)
Alternativa A — ❌ Incorreta
Afirma que "Controllers não podem interagir com Views" — falso, pois o Controller pode sim enviar comandos para a View (ex.: alterar a exibição). Além disso, a parte sobre Views interagirem diretamente com o Model é controversa: embora a View possa consultar o Model, a comunicação padrão ocorre por notificação do Model, não por chamada direta da View.
Alternativa B — ❌ Incorreta
"Controllers não podem se comunicar com Models" é falso — o Controller é justamente o componente que comanda o Model. Quanto a "Views podem interagir diretamente com outras Views", isso não é previsto no MVC clássico; Views são independentes e só se comunicam via Controller/Model.
Alternativa C — ✅ Correta ⟵ GABARITO
Dois acertos:
Usuários não podem interagir diretamente com o Model — a interação do usuário é sempre mediada pelo Controller, que recebe as ações (cliques, teclas) e as repassa ao Model ou à View.
Controllers podem se comunicar com o Model — é a função primária do Controller: enviar comandos para atualizar o estado do Model.
Portanto, a alternativa reflete exatamente as regras de comunicação do padrão MVC.
Alternativa D — ❌ Incorreta
"Usuários podem interagir diretamente com os Controllers" é verdadeiro, mas "Views podem interagir diretamente com o Model" é uma meia-verdade: a View pode consultar o Model, mas a interação direta não é o fluxo principal; o Model notifica a View passivamente. A alternativa é menos precisa que a C, que destaca a restrição correta.
Alternativa E — ❌ Incorreta
"Controllers não podem interagir com Views" é falso (como visto na A). A segunda parte "Controllers podem se comunicar com o Model" é verdadeira, mas o erro na primeira torna a alternativa incorreta.