web-dev-qa-db-fra.com

Quels modèles de conception sont utilisés sur Android?

Je fais une petite recherche sur les plates-formes mobiles et j'aimerais savoir quels modèles de conception sont utilisés dans Android?

par exemple. Dans iOS, Model-view-controller est très largement utilisé avec les modèles de délégation et autres.

Quels modèles et où en particulier Android utilise-t-il?

EDIT

Je ne demande pas de modèles de conception utilisés en profondeur dans kernel, dalvik, etc., mais plutôt sur les modèles qu'un développeur d'application rencontrera lors du développement d'une application.

253
Burjua

J'ai essayé d'utiliser à la fois les modèles de conception modèle – vue – contrôleur (MVC) et modèle – vue – présentateur pour le développement de Android. Mes conclusions sont modèle-vue-contrôleur fonctionne bien, mais il y a quelques "problèmes". Tout dépend de la façon dont vous percevez la classe Android Activity. Est-ce un contrôleur, ou est-ce une vue?

La classe Activity actuelle ne s'étend pas à la classe View d'Android, mais gère toutefois l'affichage d'une fenêtre à l'utilisateur et gère également les événements de cette fenêtre (onCreate, onPause, etc.).

Cela signifie que lorsque vous utilisez un modèle MVC, votre contrôleur sera en fait un pseudo contrôleur de vue. Puisqu'il gère l'affichage d'une fenêtre pour l'utilisateur, avec les composants de vue supplémentaires que vous lui avez ajoutés avec setContentView, ainsi que la gestion des événements pour au moins les différents événements du cycle de vie de l'activité.

Dans MVC, le contrôleur est censé être le point d'entrée principal. Ce qui est un peu discutable si c'est le cas lorsque vous l'appliquez au développement Android, car l'activité est le point d'entrée naturel de la plupart des applications.

À cause de cela, je trouve personnellement que le modèle modèle – vue – présentateur convient parfaitement au développement de Android. Puisque le rôle de la vue dans ce modèle est:

  • Servant de point d'entrée
  • Composants de rendu
  • Routage des événements utilisateur vers le présentateur

Cela vous permet d'implémenter votre modèle comme suit:

View - il contient vos composants d'interface utilisateur et gère leurs événements.

Présentateur - Ceci gérera la communication entre votre modèle et votre vue. Considérez-la comme une passerelle vers votre modèle. Cela signifie que si vous avez un modèle de domaine complexe représentant, Dieu sait quoi, et que votre vue n'a besoin que d'un très petit sous-ensemble de ce modèle, le travail des présentateurs consiste à interroger le modèle, puis à mettre à jour la vue. Par exemple, si vous avez un modèle contenant un paragraphe de texte, un titre et un nombre de mots. Mais dans une vue donnée, il vous suffit d'afficher le titre dans la vue. Ensuite, le présentateur lira les données nécessaires du modèle et mettra à jour la vue en conséquence.

Modèle - il devrait s'agir en principe de votre modèle de domaine complet. Espérons que cela aidera également à rendre votre modèle de domaine plus "serré", car vous n’avez pas besoin de méthodes spéciales pour traiter les cas mentionnés ci-dessus.

En dissociant le modèle de la vue (en utilisant le présentateur), il devient également beaucoup plus intuitif de tester votre modèle. Vous pouvez avoir des tests unitaires pour votre modèle de domaine et des tests unitaires pour vos présentateurs.

Essaye le. Personnellement, je trouve que cela convient parfaitement au développement de Android.

315
JustDanyul

Mise à jour de novembre 2018

Après avoir travaillé et blogué sur MVC et MVP sous Android pendant plusieurs années (voir le corps de la réponse ci-dessous), j'ai décidé de capturer mes connaissances et ma compréhension de manière plus complète et plus facile à digérer.

J'ai donc publié un cours vidéo complet sur l'architecture des applications Android. Donc, si vous souhaitez maîtriser les modèles architecturaux les plus avancés dans le développement de Android, consultez ce cours complet ici .

Cette réponse a été mise à jour afin de rester pertinente à partir de novembre 2016


Il semble que vous recherchiez modèles architecturaux plutôt que modèles de conception .

Les modèles de conception visent à décrire une "astuce" générale qu'un programmeur pourrait mettre en œuvre pour gérer un ensemble particulier de tâches logicielles récurrentes. Par exemple: Dans la programmation orientée objet, lorsqu'un objet doit notifier un ensemble d'autres objets au sujet de certains événements, le modèle de conception de l'observateur peut être utilisé.

Etant donné que Android applications (et la plupart des applications AOSP) sont écrites en Java, orienté objet, je pense que vous aurez du mal à rechercher un seul modèle de conception OOP qui NON utilisé sur Android.

Les modèles architecturaux , en revanche, ne traitent pas de tâches logicielles particulières - ils visent à fournir des modèles pour l'organisation du logiciel en fonction des cas d'utilisation du composant logiciel en question.

Cela semble un peu compliqué, mais j'espère qu'un exemple clarifiera: Si une application va être utilisée pour récupérer les données d'un serveur distant et les présenter à l'utilisateur de manière structurée, alors MVC être un bon candidat pour la considération. Notez que je n'ai rien dit sur les tâches logicielles et le déroulement du programme de l'application - je viens de la décrire du point de vue de l'utilisateur, et un candidat pour un motif architectural a émergé.

Puisque vous avez mentionné MVC dans votre question, je suppose que vous recherchez des modèles architecturaux.

Enter image description here


Auparavant, Google n’avait aucune directive officielle en matière d’architecture d’applications, ce qui (entre autres raisons) avait provoqué un désordre total dans le code source de Android applications. En fait, même aujourd'hui, la plupart des applications que je vois ne respectent toujours pas OOP meilleures pratiques et n'indiquent pas une organisation logique claire du code.

Mais aujourd'hui, la situation est différente - Google a récemment publié la bibliothèque de liaison de données , entièrement intégrée à Android Studio, et même, elle a déployé un ensemble de architecture plans pour Android applications .

Il y a deux ans, il était très difficile de trouver des informations sur MVC ou MVP sur Android. Aujourd'hui, MVC, MVP et MVVM sont devenus des "mots à la mode" dans la communauté Android, et nous sommes entourés par d'innombrables experts qui tentent constamment de nous convaincre que MVx est meilleur que MVy. À mon avis, discuter du point de savoir si MVx est meilleur que MVy est totalement inutile, car les termes eux-mêmes sont très ambigus - il suffit de regarder les réponses à cette question , et vous vous rendrez compte que différentes personnes peuvent associer ces abréviations avec des constructions complètement différentes.

Étant donné que la recherche du meilleur modèle architectural pour Android a été officiellement lancée, je pense que nous sommes sur le point de voir plusieurs autres idées émerger. À ce stade, il est vraiment impossible de prédire quel modèle (ou quels modèles) deviendront les normes de l'industrie à l'avenir - nous devrons attendre et voir (je suppose que c'est une affaire d'un an ou deux).

Cependant, il y a une prédiction que je peux faire avec un degré de confiance élevé: l'utilisation de la bibliothèque de liaison de données ne deviendra pas un standard de l'industrie. Je suis confiant de le dire, car la bibliothèque de liaison de données (dans son implémentation actuelle) offre des gains de productivité à court terme et une sorte de directive architecturale, mais elle rendra le code non maintenable à long terme. Une fois que cette bibliothèque aura des effets à long terme, elle sera abandonnée.


Maintenant, bien que nous ayons une sorte de directives et d’outils officiels aujourd’hui, personnellement, je ne pense pas que ces directives et ces outils soient les meilleures options disponibles (et ils ne sont certainement pas les seuls). Dans mes applications, j'utilise ma propre implémentation d'une architecture MVC. Il est simple, propre, lisible et testable, et ne nécessite aucune bibliothèque supplémentaire.

Ce MVC n'est pas simplement cosmétiquement différent des autres - il repose sur une théorie selon laquelle Les activités dans Android ne sont pas des éléments d'interface utilisateur , ce qui a d'énormes répercussions sur l'organisation du code.

Donc, si vous recherchez un bon modèle architectural pour les Android applications suivantes SOLIDE , vous pouvez trouver une description de l'une d'entre elles dans mon message à propos de Modèles d'architecture MVC et MVP sous Android .

79
Vasiliy

enter image description here

Lorsque j'arrive à ce message, cela m'aide vraiment à comprendre les modèles avec exemple. J'ai donc le tableau ci-dessous pour voir clairement les modèles de conception et leur exemple dans Android Framework.

J'espère que vous le trouverez utile.

63
Peter Walter

Il existe différents modèles utilisés dans le cadre Android, tels que:

  • Le récepteur de diffusion utilise le modèle Observer
  • L'appel à un service distant utilise un modèle de proxy
  • La vue et le groupe de vues utilise un motif composite
  • Le cadre multimédia utilise le modèle de façade
47
yash

Voici un excellent article sur Modèles de conception courants pour Android :

Modèles de création:

  • Générateur (par exemple AlertDialog.Builder )
  • Injection de dépendance (par exemple Dague 2 )
  • Singleton

Structures structurelles:

  • Adaptateur (par exemple RecyclerView.Adapter )
  • Façade (p. Ex. rénovation )

Modèles comportementaux:

  • Commande (par exemple EventBus )
  • Observateur (par exemple RxAndroid )
  • Modèle Vue Contrôleur
  • Vue du modèle ViewModel ( similaire au modèle MVC ci-dessus )
24
Ineta

Les classes Android suivantes utilisent des modèles de conception

1) Le titulaire de la vue utilise un modèle de conception Singleton

2) L'intention utilise le modèle de conception d'usine

3) L'adaptateur utilise un motif de conception d'adaptateur

4) Le récepteur de radiodiffusion utilise le modèle de conception Observer

5) La vue utilise un modèle de conception composite

6) Media FrameWork utilise le modèle de conception de façade

15
Jacob Abraham

Dans le cas Notifications , le NotificationCompat.Builder utilise Modèle de générateur

comme,

mBuilder = new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.ic_stat_notification)
                    .setContentTitle(getString(R.string.notification))
                    .setContentText(getString(R.string.ping))
                    .setDefaults(Notification.DEFAULT_ALL);
10
Jeff T.

Android utilise également le modèle de conception ViewHolder.

Il est utilisé pour améliorer les performances d'un ListView lors de son défilement.

Le modèle de conception ViewHolder vous permet d’accéder à chaque vue d’élément de liste sans recourir à la recherche, ce qui enregistre des cycles de processeur précieux. Plus précisément, cela évite les appels fréquents à findViewById () lors du défilement de ListView, ce qui le rendra fluide.

5
amarnathpatel

Tous ces modèles, MVC, MVVM , MVP et Modèle de présentation , peuvent être appliqués à Android. _ apps, mais sans framework tiers, il n'est pas facile d'obtenir une structure bien organisée et un code propre.

MVVM provient de PresentationModel. Lorsque nous appliquons MVC, MVVM et modèle de présentation à une application Android, ce que nous voulons vraiment Ce qu’il faut, c’est avoir un projet structuré clair et, plus important encore, plus facile pour les tests unitaires.

Pour le moment, sans framework tiers, vous avez généralement beaucoup de code (comme addXXListener (), findViewById (), etc.), qui n'ajoute aucune valeur métier. De plus, vous devez exécuter Android tests unitaires au lieu des tests JUnit normaux, qui prennent un certain temps à s'exécuter et rendent les tests unitaires quelque peu impraticables.

Pour ces raisons, nous avons lancé il y a quelques années un projet open source, RoboBinding - Cadre de modèle de présentation de liaison de données pour la plate-forme Android. RoboBinding vous aide à rédiger un code d'interface utilisateur plus facile à lire, à tester et à gérer. RoboBinding supprime le besoin de code inutile comme addXXListener ou plus , et décale la logique de l'interface utilisateur vers le modèle de présentation, qui est un POJO et peut être testé via des tests JUnit normaux . RoboBinding est livré avec plus de 300 tests JUnit pour assurer sa qualité.

4
Cheng

J'aimerais ajouter un modèle de conception qui a été appliqué dans Android Framework. Il s'agit du modèle Half Sync Half Async utilisé dans l'implémentation Asynctask. Voir ma discussion à

https://docs.google.com/document/d/1_zihWXAwgTAdJc013-bOLUHPMrjeUBZnDuPkzMxEEj0/edit?usp=sharing

2

Dans Android, le modèle "processeur de file d'attente de travail" est couramment utilisé pour décharger des tâches du thread principal d'une application.

Exemple: conception de la classe IntentService.

IntentService reçoit les intentions, lance un thread de travail et arrête le service selon les besoins. Toutes les demandes sont traitées sur un seul thread de travail.

1
amarnathpatel

Binder utilise "Observer Pattern" pour les notifications de destinataire de décès.

0
Vinodh