Diferença entre MVVM e MVP

O objetivo do desenvolvimento de software é criar soluções que atendam às necessidades e problemas de usuários e empresas. Para isso, diferentes tecnologias e padrões de arquitetura, como MVVM (Model-View-ViewModel) e Model-View-Presenter (MVP) são usados.

Como em qualquer coisa fabricada, o primeiro passo é o estágio de planejamento e design. O processo de design do software pode ser uma especificação baseada no conjunto de ferramentas de tecnologia preferido e pode abranger todas as atividades, desde a concepção - ao planejamento - à implementação - à - atualizações e modificações.

Abrange o projeto arquitetônico de baixo e alto nível, com base em padrões de arquitetura selecionados, e mapeia soluções reutilizáveis ​​usando padrões de design.

Estrutura de aplicação de software

A arquitetura de software define a estrutura de um aplicativo que atende aos requisitos técnicos, operacionais e do usuário e se refere a como o código é organizado e gerenciado.

Decidir sobre a arquitetura de um aplicativo de software é fundamental, pois não é uma parte fácil e mutável de um aplicativo que já foi desenvolvido; portanto, o padrão arquitetural deve ser decidido antes de qualquer programação começar.

Os padrões arquiteturais são um pouco diferentes dos padrões de design, pois seu escopo é muito mais amplo, abordando questões mais técnicas, como limitações e desempenho de hardware e alta disponibilidade. Exemplos de diferentes padrões de arquitetura são MVC, MVVM e MVP.

Por outro lado, os padrões de design são práticas recomendadas formalizadas que facilitam o desenvolvimento reutilizável orientado a objetos e são mais fáceis de manter e alterar do que a arquitetura de um aplicativo. 

Padrões de arquitetura

Controlador de visualização de modelo (MVC) foi um dos primeiros padrões arquiteturais desenvolvidos para aplicativos da Web, ganhando popularidade entre meados e final dos anos 90, principalmente na comunidade Java.

As estruturas mais recentes, como Django para Python e Rails (Ruby on Rails), têm um forte foco na implantação rápida, e é por isso que o MVC está assumindo a participação no mercado como a grande atração em padrões arquiteturais.

Tradicionalmente, o desenvolvimento da interface do usuário continha muito código para lidar com lógica complicada, de modo que os padrões de arquitetura eram projetados para reduzir o código no nível da interface do usuário (UI), tornando-o mais 'limpo' e gerenciável.

Portanto, com o padrão MVC, um aplicativo da Web é composto de

  • Modelo (dados)
  • Visão (interface para visualizar e manipular dados)
  • Controlador (operações e ações executadas nos dados)

o Modelo lida com dados e lógica de negócios e existem não dependências entre os Modelo e a Controlador ou Visão.

o Visão apresenta os dados para o usuário no formato suportado e no layout necessário e quando o Controlador recebe solicitações do usuário (para buscar dados), chama os recursos relevantes necessários para concluir a solicitação.

Vamos aplicar esse padrão à construção de uma livraria online.

Os usuários podem pesquisar, visualizar, registrar e comprar livros, além de gerenciar seus perfis e listas de livros. Quando um usuário clica na categoria SCI-FI, todos os livros relacionados devem ser exibidos como disponíveis.

o Controladores lide com as ações que gerenciam os livros (lista, adição, exibição etc.). Pode haver vários Controladores com um principal Controlador 'direcionando o tráfego'.

Neste exemplo, o Controlador é nomeado controller_books.php e o Modelo (por exemplo, model_books.php) lida com os dados e a lógica relacionados aos livros.

Por fim, diferente Visualizações será necessário, como ao adicionar livros ao carrinho on-line ou ao visualizar os detalhes do livro com imagens e críticas.

o controller_books.php recebe a ação (solicitação do usuário) do principal Controlador (por exemplo. index.php) o controller_books.php analisa a solicitação e chama o model_books.php (os dados) para retornar a lista de livros SCI-FI.

A responsabilidade do Modelo é fornecer essas informações, usando qualquer lógica que foi aplicada (usando filtros de pesquisa). o Controlador então pega as informações e as passa para os Visão (visualização de pesquisa, visualização de impressão, visualização de detalhes etc.) e as informações são apresentadas (através do Visão) para o usuário que iniciou a solicitação.

Esses são os fundamentos do padrão MVC, que evoluiu variações de padrões de arquitetura, como o Model-View-Presenter (MVP), Model-View-ViewModel (MVVM), Hierarchical-Model-View-Controller (HMVC), e Model-View-Adapter (MVA), etc.

Padrão MVP

Model-View-Presenter (MVP)

o Padrão MVP já existe há algum tempo e é uma variante do MVC. Ele foi projetado especificamente para automação de teste, cujo objetivo era aumentar a quantidade de código que pode ser testada por meio da automação, e o padrão soluciona alguns problemas da camada de apresentação, isolando a lógica de negócios da interface do usuário..

A tela é a visualização, os dados exibidos são o modelo e o apresentador une os dois.

MVP compreende os seguintes componentes com responsabilidades separadas:

  • Modelo (define os dados a serem exibidos)
  • Visão (exibe os dados do modelo e encaminha as solicitações do usuário ao apresentador).
  • Apresentador (interage entre a View e o Model e os une)

o Visão (uma página da web) exibe e gerencia os controles da página encaminhando eventos (solicitações do usuário) para o Apresentador que foram iniciados no Visão.

o Apresentador responde a esses eventos lendo e atualizando o Modelo Para mudar o Visão e, portanto, o Apresentador responsabilidade é vincular o Modelo e Visão.

Depois de olhar para MVC e MVP padrões comuns, ambos têm responsabilidades separadas para cada componente e promovem a separação entre os Visão (UI) e Modelo (dados). Diferenças significativas entre esses padrões são mais evidentes na maneira como os padrões são implementados.

MVP pode ser um padrão complexo a ser implementado para soluções avançadas, mas certamente possui grandes benefícios se implementado como uma solução bem projetada, embora possa não ser necessariamente a escolha apropriada para soluções simples.

Padrão MVVM

MVVM (Model-View-ViewModel)

o MVVM padronizar foi projetado especificamente para as plataformas Windows Presentation Foundation (WPF) e Microsoft Silverlight e pode ser usado em todos os XAML [i] plataformas.

O WPF é um sistema Microsoft que processa interfaces de usuário em programas baseados no Windows e foi lançado pela primeira vez no .NET Framework 3.0.

MVVM foi refinado de MVC e nesse padrão, o Visão está ativo com comportamentos, eventos e ligação de dados, e o Visão sincroniza com o ViewModel (que permite a separação da apresentação e expõe métodos e comandos para gerenciar e manipular o Modelo.

MVVM compreende três componentes principais:

  • Modelo (representa os dados com validação e lógica de negócios)
  • Visão (A visualização é responsável por definir a estrutura, o layout e a aparência do que o usuário vê na tela. Idealmente, a visualização é definida exclusivamente com XAML, com um code-behind limitado que não contém lógica de negócios. ligação entre o Visão e ViewModel para ativar a sincronização do Model e do ViewModel com o View)
  • ViewModel (separa a visualização do modelo e expõe métodos e comandos para manipular os dados (modelo).

o Visão recebe dados do ViewModel (por meio de ligação de dados e métodos) e, em tempo de execução, o Visão mudará ao responder a eventos no ViewModel.

o ViewModel medeia entre os Visão e Modelo e lida com o Visão lógica. Interage com o Modelo - tirando os dados do Modelo e apresentá-lo ao Visão mostrar.

Esses componentes são todos separados, permitindo maior flexibilidade para trabalhar com eles de forma independente, isolar o teste de unidade e trocá-los, sem afetar nenhum outro componente.

Essa estrutura permite que o Modelo e outros componentes evoluam independentemente, permitindo que os desenvolvedores trabalhem simultaneamente em diferentes aspectos da solução. Por exemplo, onde os designers estão trabalhando no Visão, eles simplesmente geram amostras de dados sem precisar acessar os outros componentes. Isso facilita o redesenho fácil da interface do usuário, pois o Visão é implementado em XAML.

Como mencionado anteriormente com MVP, soluções simples não precisariam de padrões de arquitetura e design, como "Hello World!" é muito básico para seguir qualquer padrão; no entanto, à medida que mais recursos, funções e componentes são introduzidos, a complexidade do aplicativo aumenta e a quantidade de código que precisa ser gerenciada também aumenta..

Em suma

Desde o início do desenvolvimento da interface do usuário, os padrões de design estão se tornando cada vez mais populares para facilitar o processo de desenvolvimento, os aplicativos mais escalonáveis ​​e facilita o teste.

Diferença ilustrada entre os padrões MVP e MVVM:

  • Em ambos MVP e MVVM, a Visão é o ponto de entrada para o aplicativo
  • Dentro MVP, existe um mapeamento individual entre o Visão e Apresentador, onde em MVVM, o relacionamento é um para muitos entre os Visão e ViewModel.
  • MVP é usado principalmente para aplicativos Windows Forms e Windows Phone e MVVM foi projetado para Silverlight, WPF, Knockout / AngularJS, etc.