283 votes

Quels sont les modèles d'architecture 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, le modèle-vue-contrôleur est très largement utilisé avec la délégation et d'autres modèles.

Quels modèles et quels endroits en particulier Android utilise-t-il ?

EDIT

Je ne demande pas les modèles de conception utilisés dans le noyau, dalvik et ainsi de suite, mais les modèles qu'un développeur d'applications rencontrera lors du développement d'une application.

2 votes

Étant donné que la plate-forme Android intègre un noyau Linux, il s'agit d'une suite logicielle beaucoup trop vaste pour répondre à cette question autrement que par "tous les modèles cités jusqu'à présent, et probablement quelques nouveaux si vous regardez attentivement".

5 votes

@Pete, Ok, vous avez probablement raison, mais en même temps, je ne vais pas aussi loin que le noyau, je suis intéressé par la surface de l'application, par exemple dans iOS. UIViewController mis en œuvre en utilisant MVC ( UIViewController est un contrôleur et sa Racine UIView est vue), UIApplication utilise la délégation en ayant le délégué d'application comme délégué et ainsi de suite...

4 votes

Je pense que vous devriez vraiment apprendre Android à partir de la base et ne pas essayer de "porter" vos connaissances d'iOS à Android. Il y a beaucoup de bons livres sur le marché. Apress en fait un tas. Si vous comprenez le cycle de vie des applications et des services dans Android, vous devriez être capable de concevoir des applications correctement.

328voto

JustDanyul Points 6108

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

L'actuel Activity n'étend pas la classe View mais elle gère cependant 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, et qu'il gère également les événements pour au moins les divers événements du cycle de vie de l'activité.

En MVC, le contrôleur est censé être le point d'entrée principal. Ce qui est un peu discutable si c'est le cas lorsqu'on l'applique au développement Android, puisque l'activité est le point d'entrée naturel de la plupart des applications.

Pour cette raison, je trouve personnellement que le modèle-vue-présentateur est parfaitement adapté au développement d'Android. Puisque le rôle de la vue dans ce modèle est :

  • Servir de point d'entrée
  • Composants de rendu
  • Acheminer les événements des utilisateurs vers le présentateur

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

Voir - Il contient les composants de l'interface utilisateur et gère les événements qui les concernent.

Présentateur - il gérera la communication entre votre modèle et votre vue, considérez-le comme une passerelle vers votre modèle. Autrement dit, si vous avez un modèle de domaine complexe représentant Dieu sait quoi, et que votre vue n'a besoin que d'un tout petit sous-ensemble de ce modèle, le travail du présentateur 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, vous avez seulement besoin d'afficher le titre dans la vue. Le présentateur lira alors les données nécessaires à partir du modèle et mettra à jour la vue en conséquence.

Modèle - Ceci devrait être le modèle complet de votre domaine. Nous espérons que cela vous aidera à rendre votre modèle de domaine plus "étanche", puisque vous n'aurez pas besoin de méthodes spéciales pour traiter les cas mentionnés ci-dessus.

En découplant complètement le modèle de la vue (grâce à l'utilisation du 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.

Essayez-le. Je trouve personnellement qu'il convient parfaitement au développement Android.

14 votes

Excellente réponse ! J'ai cependant des questions : 1. Activité = Vue, ai-je bien compris ? 2. Implémenteriez-vous le présentateur comme sa propre classe publique, ou comme une classe interne de l'activité ? Ou un fragment (également classe interne) ? 3. Voulez-vous dire que les classes de transfert doivent être utilisées à la place des classes de modèle réelles dans l'activité (vue) ?

14 votes

1. Oui, je les utilise comme des vues dans le cadre du modèle MVP. 2. personnellement, je les segmente en classes publiques individuelles, mais c'est une question de goût je suppose :) 3. J'ai expliqué cela assez mal, la phrase "transmettre les classes nécessaires" est trompeuse. Ce que je veux dire, c'est que le présentateur se situe entre la vue et le modèle, il lit le modèle et met ensuite à jour la vue. Je vais mettre à jour ma réponse pour être un peu plus clair :)

0 votes

Merci d'avoir pris le temps, j'ai compris maintenant :)

89voto

Vasiliy Points 8645

Mise à jour de novembre 2018

Après avoir travaillé et tenu un blog sur MVC et MVP dans Android pendant plusieurs années (voir le corps de la réponse ci-dessous), j'ai décidé de rassembler mes connaissances et ma compréhension sous une forme 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 êtes intéressé par la maîtrise des modèles architecturaux les plus avancés dans le développement Android, consultez ce cours complet ici .

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


On dirait que vous cherchez les modèles architecturaux plutôt que modèles de conception .

Modèles de conception visent à décrire une "astuce" générale que le programmeur pourrait mettre en œuvre pour traiter un ensemble particulier de tâches logicielles récurrentes. Par exemple : Dans la POO, lorsqu'il est nécessaire qu'un objet notifie un ensemble d'autres objets à propos de certains événements, l' modèle de conception d'observateur peut être employé.

Étant donné que les applications Android (et la plupart des AOSP) sont écrites en Java, qui est orienté objet, je pense que vous aurez du mal à trouver un seul modèle de conception OOP qui ne soit PAS utilisé sur Android.

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

Cela semble un peu compliqué, mais j'espère qu'un exemple permettra de clarifier les choses : si une application est utilisée pour récupérer des données d'un serveur distant et les présenter à l'utilisateur de manière structurée, alors MVC pourrait être un bon candidat à prendre en considération. Notez que je n'ai rien dit sur les tâches logicielles et le déroulement du programme de l'application - je l'ai juste décrite du point de vue de l'utilisateur, et un candidat pour un modèle architectural est apparu.

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

Enter image description here


Historiquement, il n'y avait pas de directives officielles de la part de Google concernant les architectures des applications, ce qui (entre autres raisons) a conduit à un désordre total dans le code source des applications Android. En fait, aujourd'hui encore, la plupart des applications que je vois ne suivent pas les meilleures pratiques de la POO et ne présentent 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 qui est entièrement intégré à Android Studio, et a même déployé un ensemble d'outils d'aide à la décision. les plans d'architecture pour les applications Android .

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 d'innombrables experts qui essaient constamment de nous convaincre que MVx est meilleur que MVy. À mon avis, discuter de la question 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 aux questions suivantes cette question et vous vous rendrez compte que différentes personnes peuvent associer ces abréviations à des constructions complètement différentes.

Étant donné que la recherche d'un 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 apparaître. À ce stade, il est vraiment impossible de prédire quel(s) modèle(s) deviendra(ont) la norme dans l'industrie à l'avenir - nous devons attendre et voir (je suppose que c'est une question d'un an ou deux).

Cependant, il y a une prédiction que je peux faire avec un haut degré de confiance : L'utilisation de la bibliothèque Data Binding ne deviendra pas un standard industriel. Je suis sûr de dire cela parce que la bibliothèque Data Binding (dans son implémentation actuelle) fournit des gains de productivité à court terme et une sorte de ligne directrice architecturale, mais elle rendra le code non maintenable à long terme. Une fois que les effets à long terme de cette bibliothèque feront surface - elle sera abandonnée.


Bien que nous disposions aujourd'hui d'une sorte de directives et d'outils officiels, je ne pense pas, personnellement, que ces directives et outils soient les meilleures options disponibles (et ils ne sont certainement pas les seuls). Dans mes applications, j'utilise ma propre mise en œuvre d'une architecture MVC. Elle est simple, propre, lisible et testable, et ne nécessite aucune bibliothèque supplémentaire.

Cette MVC n'est pas seulement différente des autres d'un point de vue esthétique - elle est fondée sur une théorie selon laquelle Les activités dans Android ne sont pas des éléments de l'interface utilisateur ce qui a des répercussions considérables sur l'organisation du code.

Donc, si vous cherchez un bon modèle architectural pour les applications Android qui suit SOLIDE Vous pouvez en trouver une description dans mon article sur les principes de l'UE. Modèles architecturaux MVC et MVP dans Android .

85voto

Peter Walter Points 953

enter image description here

Quand je suis arrivé à ce post, il m'a vraiment aidé à comprendre les modèles avec des exemples. J'ai donc fait le tableau ci-dessous pour voir clairement les modèles de conception et leur exemple dans le Framework Android.

J'espère que vous le trouverez utile.

50voto

yash Points 59

Il existe plusieurs modèles utilisés dans le cadre d'Android :

  • Le récepteur de diffusion utilise le modèle Observer
  • L'invocation du service Remoter utilise le modèle Proxy
  • La vue et le groupe de vues utilisent le modèle composite
  • Le cadre médiatique utilise le modèle Facade

5 votes

Pouvez-vous s'il vous plaît partager les liens (références)

0 votes

Veuillez me communiquer les références afin que je puisse en savoir plus. Merci

30voto

Ineta Points 309

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

Des modèles de création :

  • Bâtisseur (par exemple AlertDialog.Builder )
  • Injection de dépendances (ex. Dagger 2 )
  • Singleton

Modèles structurels :

  • Adaptateur (par exemple RecyclerView.Adapter )
  • Façade (par exemple Rétrofit )

Modèles de comportement :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X