Vinnicius Gomes
  • Articles
  • About
  • Reading
  • Projects
  • Companies
  • Stack
  • Contact
Menu

February 08th, 2025 · 1yr ago

Passive View: Simplificando a separação entre lógica e interface no desenvolvimento de interfaces

Written by Vinnicius Gomes · 4 min read

main image
Foto de Daniel Tseng na Unsplash

No desenvolvimento de software, uma das maiores dificuldades é manter a interface do usuário (UI) desacoplada da lógica de negócios. Quando esses dois aspectos estão misturados, o código pode se tornar difícil de manter, testar e evoluir. Para resolver esse problema, Martin Fowler propôs o padrão Passive View, que promove uma separação clara entre a lógica de apresentação e a interface do usuário.

Neste post, vamos explorar o que é o Passive View, porque ele foi criado, como implementá-lo e quais são os benefícios de usá-lo em seus projetos. Bora lá?!

O que é Passive View?

O Passive View é um padrão de design pertencente à família Model-View-Presenter (MVP). Ele foi criado para reduzir o acoplamento entre a interface do usuário (UI) e a lógica de negócios. A ideia central é que a View (interface) seja o mais "burra" possível, ou seja, não contenha nenhuma lógica de negócios ou de apresentação. Toda a lógica é delegada a um Presenter, que atua como intermediário entre a View e o Model (camada de dados).

Características principais:

View passiva: A View apenas exibe dados e repassa interações do usuário para o Presenter.

Presenter ativo: O Presenter contém toda a lógica de apresentação e coordena a interação entre a View e o Model.

Separação clara: A View não conhece o Model, e o Model não conhece a View.

Problemas de não usar o Passive View

Quando não utilizamos o Passive View (ou padrões semelhantes, como MVP ou MVVM), alguns problemas comuns podem surgir:

1. Acoplamento excessivo

Problema: A lógica de negócios e a interface do usuário ficam misturadas no mesmo componente (por exemplo, em uma Activity no Android ou um ViewController no iOS).

Consequência: Alterações na interface podem exigir mudanças na lógica de negócios e vice-versa, tornando o código frágil e difícil de manter.

Exemplo: Em uma tela de login, a validação das credenciais pode estar diretamente no código da Activity, misturada com a lógica de exibição de erros e carregamento.

2. Dificuldade de teste

Problema: Interfaces com lógica embutida são difíceis de testar de forma isolada.

Consequência: Testes automatizados se tornam complexos e frágeis, pois é difícil simular interações do usuário e verificar o comportamento da lógica de negócios.

Exemplo: Se a validação de um formulário está diretamente na View, você precisará criar testes de UI, que são mais lentos e menos confiáveis do que testes unitários.

3. Falta de reutilização

Problema: A lógica de apresentação está acoplada à interface, dificultando sua reutilização em diferentes telas ou plataformas.

Consequência: Caso seja necessário utilizar a mesma lógica em outra tela, será preciso duplicar o código ou criar soluções improvisadas.

Exemplo: Uma lógica de paginação de dados pode estar diretamente em uma RecyclerView no Android, impossibilitando sua reutilização em uma UITableView no iOS.

4. Complexidade crescente

Problema: À medida que o projeto cresce, a mistura de lógica e interface torna o código cada vez mais complexo e difícil de entender.

Consequência: Novos desenvolvedores terão dificuldade para compreender o código, e a manutenção se tornará um pesadelo.

Exemplo: Uma Activity com centenas de linhas de código, misturando lógica de negócios, chamadas de API, manipulação de UI e navegação.

5. Dificuldade de evolução

Problema: Alterações na interface ou na lógica de negócios podem gerar efeitos colaterais imprevisíveis.

Consequência: O custo de implementar novas funcionalidades ou corrigir bugs aumenta significativamente.

Exemplo: Alterar o layout de uma tela pode quebrar a lógica de negócios embutida na View.

Como o Passive View resolve esses problemas?

O Passive View aborda esses problemas promovendo uma separação clara de responsabilidades:

  1. Separação de responsabilidades:
  • A View é responsável apenas pela interface.
  • O Presenter cuida da lógica de apresentação.
  • O Model gerencia os dados e a lógica de negócios.
  1. Facilidade de teste:
  • A View pode ser testada isoladamente, verificando apenas a exibição de dados e a captura de interações.
  • O Presenter pode ser testado de forma unitária, sem depender da UI.
  1. Reutilização:
  • A mesma lógica de apresentação pode ser usada em diferentes Views.
  • O Presenter pode ser reutilizado em diferentes plataformas (Android, iOS, etc.).
  1. Manutenção simplificada:
  • Alterações na interface não afetam a lógica de negócios.
  • Alterações na lógica de negócios não afetam a interface.
  1. Evolução facilitada:
  • Novas funcionalidades podem ser adicionadas sem impactar o código existente.
  • Bugs podem ser corrigidos de forma isolada, sem risco de efeitos colaterais.

E é isso…

O Passive View é uma abordagem poderosa para quem busca desenvolver interfaces de usuário desacopladas da lógica de negócios. Ele resolve problemas comuns como acoplamento excessivo, dificuldade de teste e falta de reutilização, promovendo um código mais limpo, testável e fácil de manter.

Se você está enfrentando esses desafios em seus projetos, considere adotar o Passive View. Essa pode ser a chave para simplificar seu desenvolvimento e melhorar a qualidade do seu código.

This post is licensed under CC BY 4.0 by the author. ·

loading...

Share:

linkedingithubxinstagrammediumproduct hunt

©2026 Vinnicius Gomes

Created in

BR