5

Ho letto nel libro "Best Practice Android" rilasciato di recente che un buon modello di progettazione da utilizzare per la programmazione Android è MVVM. Avendolo provato personalmente nel mio ultimo progetto, sembra che sia utile separare il codice in sezioni più gestibili.Modello di progettazione MVVM per Android

La vista gestisce solo la creazione di elementi di visualizzazione e un'interfaccia a un ViewModel. ViewModel implementa l'interfaccia e gestisce le operazioni sulla vista e l'interazione con il modello. Il codice di esempio qui di seguito:

Modello

public class MyModel{ 
    public String myString; 
    public MyModel(String myString){ 
     this.myString = myString; 
    } 
} 

View

public class MyActivity{ 

    public ViewManager delegate; 

    public interface ViewManager{ 
     void registerTextView(TextView tvText); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity); 
     delegate = new ViewController(this); 
     TextView tvText = (TextView) view.findViewById(R.id.tvText); 
     delegate.registerTextView(tvText); 
    } 
} 

ViewModel

public class ViewController implements MyActivity.ViewManager{ 
    Context activity; 
    TextView tvText; 
    MyModel myModel; 

    public ViewController(Context app_context){ 
     activity = app_context; 
     myModel = new MyModel("Hello World"); 
    } 

    @Override 
    public registerTextView(TextView tvText){ 
     this.tvText = tvText; 
     tvText.setText(myModel.myString);   
    } 
} 

Tuttavia, non ho visto questo approccio in qualsiasi altro luogo in linea e non riesco a trovare molte informazioni che lo supporta essendo un buon modello di design per Android. Ho anche alcune domande come:

Se si dispone di un ViewModel separato per ogni frammento o solo attività?

Questo approccio funziona bene sul cambio di configurazione e sulla ricreazione delle attività con l'overhead aggiuntivo di un'altra classe? Puoi trasmettere il contesto alla tua attività per abilitare l'uso di fragmentManager?

In che modo questa scala come codice diventa più complessa?

Qualcuno ha esperienza con questo modello di progettazione con Android o qualcuno potrebbe indicarmi la direzione di un buon materiale di studio prima di iniziare a convertire tutti i miei progetti in MVVM ???

+0

Puoi fare quello che vuoi con il tuo codice, non esiste uno standard. Personalmente non uso questo tipo di schema; a meno che non ne abbia bisogno per qualche ragione, sento che aggiunge solo astrazioni inutili. – Karakuri

risposta

4

Proverò a dare la mia opinione. Penso che il codice di esempio che hai fornito non seguisse il valore fondamentale dell'applicazione del modello MVVM (o modello di presentazione MVVM è stato originato dal modello di presentazione). Uno dei motivi principali del modello è la realizzazione del POJO puro di ViewModel (o modello Presentaion) in modo che ViewModels permetta la testabilità del massimo livello. Non ho letto il libro, ma ti consiglio di leggere l'articolo originale di Martin Fowler sul modello. Ho creato alcuni esempi per dimostrare come applicare il modello nello sviluppo Android. Se sei interessato, puoi dare un'occhiata qui - Album Sample, che è una versione android dell'esempio di album originale di Martin Fowler, e AndroidMVVM, un'app demo minimale.

Un modo per applicare il modello è: Vista (Attività o frammento + layout), ViewModel, Modello (modello di business: livello di persistenza, networking ecc.). Con questo approccio, per rispondere alla tua domanda, penso che un frammento sia mappato su un ViewModel.

Il modello è quello di migliorare il design. Se applicato correttamente, ridurrà la complessità e non viceversa. Spero che questo ti aiuti.

4

Android MVVM Design Pattern

enter image description here

L'Associazione dati biblioteca offre sia la flessibilità e l'ampia compatibilità - si tratta di una libreria di supporto, in modo da poter utilizzare con tutte le versioni di piattaforma Android torna Android 2.1

Build Environment

android { 
    .... 
    dataBinding { 
     enabled = true 
    } 
} 

Puoi seguire questa link passo dopo passo e applicare l'associazione dati nei vostri progetti Android.

Guida Advance vai alla pagina sviluppatore Link

1

Ho lavorato su una libreria per la creazione di applicazioni Android nel modello MVVM. Dovresti trovare degli esempi lì.

https://github.com/manas-chaudhari/android-mvvm

idee fondamentali:

  • Ogni XML/Vista devono avere un ViewModel, anche se più XMLs possono condividere una ViewModel
  • Ogni ViewModel dovrebbe avere un modello. ViewModels multipli possono condividere un modello
  • Usa Associazione dati per collegare ViewModel < -> Visualizza

Blog Related Post per l'architettura: https://manaschaudhari.com/blog/2016/08/19/rxjava-meets-data-binding-part-3