Table des matières

Dans le domaine du génie logiciel, un modèle de conception est un problème courant dans la conception d'un logiciel. Un modèle de conception n'est pas une conception finale qui peut être transformée directement en code résolu.

L'un des principaux problèmes du développement de logiciels est le couplage étroit du code, c'est-à-dire que même un petit changement dans une partie du code entraîne des modifications ou des bogues dans une autre partie du code. Le code n'est pas adapté aux tests unitaires et n'est pas réutilisable.

Introduction

Actuellement, de nombreuses approches architecturales sont disponibles comme MVP, FLUX, MVI, MVVM qui résolvent les problèmes ci-dessus. Nous pouvons utiliser n'importe quelle approche pour maintenir notre code correctement afin que tout fonctionne bien, en bref, une vie de développeur heureuse. Cet article traite du modèle de conception MVVM dans Android et de la façon dont nous pouvons résoudre les problèmes existants avec le modèle de conception MVVM.

Les principaux composants du modèle de conception MVVM sont :

  1. View - informe le ViewModel des actions de l'utilisateur
  2. ViewModel - Expose des flux de données pertinents pour la vue
  3. DataModel - Résume la source de données. Le ViewModel travaille avec le DataModel pour obtenir et enregistrer les données.

Brève explication du modèle de conception MVVM

Google a introduit les composants de l'architecture Android, qui incluent ViewModel plutôt que Presenter, ce qui prouve que même Google soutient MVVM.

Modèle de vue

Les ViewModels sont de simples classes qui interagissent avec la couche logique/modèle et exposent des états/données sans savoir par qui ou comment ces données seront consommées. Seule View(Activity) fait référence à ViewModel et non l'inverse, ce qui résout notre problème de couplage étroit. Une vue unique peut faire référence à plusieurs modèles de vues.

➡️
public class MainViewModel extends ViewModel {public MainViewModel() {}public String getText() {return new DataModel().getText();}}View

Dans Android, l'activité représente une vue dans le modèle de conception MVVM. La vue est responsable de l'affichage visuel des applications et des données saisies par les utilisateurs. Cette partie ne doit en aucun cas traiter les données. Sa fonction consiste uniquement à détecter les données saisies, comme le toucher ou le glissement, et à les visualiser.

Le modèle architectural ModelView-ViewModel a été introduit dans Android avec la naissance de la bibliothèque DataBinding. Vous pouvez activer le data-binding à partir du fichier app.gradle.

➡️
dataBinding{enabled = true}

Add these lines in-app.Gradle inside android{} tag. Then put your XML layout code under tag. This will generate a binding class, and you can access this class from the activity. You can see we can directly access the getText() method from XML.

➡️
<?xml version="1.0" encoding="utf-8"?><layout><data><variablename="mainViewModel"type="com.g.mvvmproject.MainViewModel" /></data><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{mainViewModel.text}"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></RelativeLayout></layout>

Après l'inactivité de setContentView, vous définissez une référence au modèle de vue.

➡️
public class MainActivity extends AppCompatActivity {private ActivityMainBinding mActivityMainBinding;private MainViewModel mainViewModel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);mainViewModel = new MainViewModel();mActivityMainBinding.setMainViewModel(mainViewModel);}}

Modèle de données

Le modèle de données contient les données de l'application. Il ne peut pas communiquer directement avec la vue. En général, il est recommandé d'exposer les données au ViewModel par l'intermédiaire d'Observables.

➡️
public class DataModel {String text="Hello World ";public String getText() {return text + text;}}

Avantages de l'utilisation du modèle de conception MVVM

  • La testabilité de votre code est améliorée.

Dans l'extrait de code ci-dessous, nous testons la méthode getText() dans le ViewModel. Vous pouvez simuler vos données et vérifier le résultat attendu.

➡️
@RunWith(AndroidJUnit4.class)public class ExampleInstrumentedTest {@Testpublic void emailValidator_CorrectEmailSimple_ReturnsTrue() {String expected = "Hello World Hello World ";assertEquals(expected, new MainViewModel().getText());}}
  • Votre code est découplé.
  • La structure du paquet est encore plus facile à naviguer.
  • Le projet est encore plus facile à entretenir.
  • Votre équipe peut ajouter de nouvelles fonctionnalités encore plus rapidement.

Conclusion

MVVM combine les avantages de la séparation des préoccupations fournis par MVP tout en tirant parti des avantages des liaisons de données. Le résultat est un modèle dans lequel le modèle conduit autant d'opérations que possible, minimisant la logique dans la vue.

➡️
Un exemple simple de la mise en œuvre de MVVM peut être trouvé ici.

Srinivasa Sainath

Srinivasa Sainath