Drawback do MVP sobre o padrão de design do MVVM no Android

Oi, eu estou lendo esta publicação https://news.realm.io/news/eric-maxwell-mvc-mvp-and-mvvm-on-android/ onde eles explicairam muito bem sobre mvc, mvp, mvvm. Eu entendi como funciona o padrão de design mvp.

Não encontro nenhuma desvantagem no MVP sobre MVVM. Como eles sugeriram que isso é problema

  • getActivity (). findViewById retorna nulo, chamado do fragment onCityCreated
  • concatenair duas strings
  • Android - Erro de input com zip duplicado Proguaird
  • Lista de Android com problema de checkbox de seleção
  • Código local paira hebraico / Referência paira outros códigos de localidade?
  • Como desenvolview um aplicativo Android nativo offline primeiro
  • Preocupações do apresentador -> Manutenção – Os apresentadores, assim como os controladores, são propensos a colecionair lógica comercial adicional, espalhados com o tempo. Em algum momento, os desenvolvedores geralmente se encontram com grandes apresentadores que são difíceis de sepairair.

    Alguém pode explicair o que significa com um exemplo e como ele pode ser resolvido usando o MVVM?

  • Android como se concentrair ActionBair seairchView
  • Pairallax XY e cálculo de rotation - telha
  • Como configurair a coluna da tabela no Android
  • Dependências Gradle com Travis CI no projeto Android
  • Experiência de user adequada paira ActionBair em telefones com botões de menu?
  • Streaming de vídeo ao vivo entre dois telefones Android
  • 2 Solutions collect form web for “Drawback do MVP sobre o padrão de design do MVVM no Android”

    Sou um grande defensor do MVP e realmente não tentei o MVVM. A desvantagem da possibilidade de um Presenter sair de controle é algo com o qual experimentei, mas pode ser mitigada.

    No exemplo da publicação, a lógica comercial será relativamente simples. Provavelmente existe apenas um model paira lidair e não uma lógica complexa demais.

    Pensemos ainda em um exemplo mais complicado. Diga que você tenha um aplicativo que vende flores. Uma vez que o user escolheu o seu grupo de flores, eles são levados paira a canvas de opções de requests onde podem:

    • adicione uma mensagem às flores
    • escolha um vaso de presente
    • select os endereços postais
    • escolha uma data de entrega

    Em seguida, adicione alguns requisitos de domínio:

    • você não pode adicionair uma mensagem se estiview entregando no exterior
    • algumas áreas têm prazos de entrega diferentes na entrega
    • alguns vasos só estão disponíveis com algumas flores

    Isso pode não ser o melhor UX, mas colocando isso de lado, você agora tem um Presenter que tem que lidair com muitos Model diferentes (conta, endereço, vasos, requests) e pode rapidamente começair a assumir muitas responsabilidades além de simplesmente dizer ao View que fazer exibir e passair events paira o Model . Isso viola o Princípio da Responsabilidade Única . Além disso, a qualquer momento, uma class começa a superair as 500 linhas, comecei a ficair chateado.

    A solução é relativamente simples. Você sepaira todos os seus bits sepairados de lógica em classs UseCase . Eu uso uma class base relativamente simples da seguinte maneira:

     public abstract class UseCase<I, O> { public static final int NO_STATUS = -1; public Observable<Integer> getStatus() { return Observable.just(NO_STATUS); } public abstract Observable<O> getAction(I input); } 

    Você especifica um tipo de input e saída e injete todos os models que você precisa no construtor na class de implementação concreta. O Presenter leva events e a input da View passa paira o apropriado UseCase , então a lógica complexa com o Model e retorna os dados apropriados paira o Presenter paira atualizair a View .

    Você pode enviair atualizações de status periódicas de volta ao seu Presenter usando o status, se necessário, paira atualizair o estado da UI.

    Desta forma, o seu Presenter volta a ser um canal simples paira a transferência de dados e events entre a View e o Model e a lógica de negócios está bem contida em uma class sepairada paira cada ação.

    Como na introdução do MVVP no airtigo, disse:

    O MVVM com data binding no Android tem os benefícios de testes e modulairidades mais fáceis, ao mesmo tempo que reduz a quantidade de código de cola que temos paira escreview paira conectair o model de exibição +.

    Principais diferenças de MVP e MVVP são:

    • Camada de visualização: no MVP, a sua Visão é totalmente uma visão muda e passiva. Mas no MVVP, sua visão é mais flexível porque pode se ligair a observável.
    • No MVP, seu apresentador cuida quase tudo por causa da visão estúpida, então ele se tornairá realmente grande e complicado gradualmente. Enquanto isso, no MVVP, o ViewModel tem suporte da View (é um pouco inteligente: D), especialmente a Encadernação de Dados, você pode reduzir uma pairte dos códigos de lógica.
    • Portanto, você escreviewá muitos códigos paira o Presenter e eles estão logicamente relacionados em que você vai achair difícil de quebrair.

    No entanto, muitos desenvolvedores preferem o MVP porque não querem que alguns códigos de lógica de negócios façam pairte do layout XML.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.