Je fais une petite recherche sur les plates-formes mobiles et je voudrais savoir quels modèles de conception sont utilisés dans Android?
Par exemple, dans iOS Model-view-controller est très largement utilisé avec la délégation et d'autres modèles.
Quels modèles et où en particulier Android utilise-t-il?
ÉDITER
Je ne demande pas des modèles de conception utilisés profondément dans le noyau, dalvik et ainsi de suite, mais des modèles qu'un développeur d'application rencontrera lors du développement d'une application.
android
design-patterns
Burjua
la source
la source
UIViewController
implémenté en utilisant MVC (UIViewController
est un contrôleur et sa racineUIView
est une vue) ,UIApplication
utilise la délégation ayant Application Delegate comme délégué et ainsi de suite ...Réponses:
J'ai essayé d'utiliser à la fois les modèles architecturaux modèle – vue – contrôleur (MVC) et modèle – vue – présentateur pour faire le développement Android. Mes résultats sont que le modèle, la vue et le contrôleur fonctionnent bien, mais il y a quelques "problèmes". Tout dépend de la façon dont vous percevez la
Activity
classe Android . Est-ce un contrôleur ou une vue?La
Activity
classe réelle n'étend pas laView
classe d'Android , mais elle gère cependant l'affichage d'une fenêtre pour 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. Comme il gère l'affichage d'une fenêtre pour l'utilisateur, avec les composants de vue supplémentaires que vous y avez ajoutés avec setContentView, et gère également les événements pour au moins les divers événements du cycle de vie des activités.
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 lors de son application au développement Android, car l'activité est le point d'entrée naturel de la plupart des applications.
Pour cette raison, je trouve personnellement que le modèle modèle-vue-présentateur est un ajustement parfait pour le développement Android. Puisque le rôle de la vue dans ce modèle est:
Cela vous permet d'implémenter votre modèle comme suit:
Vue - elle contient vos composants d'interface utilisateur et gère les événements pour eux.
Présentateur - cela gérera la communication entre votre modèle et votre vue, regardez-la comme une passerelle vers votre modèle. Autrement dit, si vous avez un modèle de domaine complexe représentant, Dieu sait quoi, et 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. Le présentateur lira ensuite les données nécessaires du modèle et mettra à jour la vue en conséquence.
Modèle - il doit s'agir essentiellement de votre modèle de domaine complet. J'espère que cela contribuera également à rendre votre modèle de domaine plus "serré", car vous n'aurez pas besoin de méthodes spéciales pour traiter les cas comme mentionné ci-dessus.
En découplant le modèle de la vue tous ensemble (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.
Essaye le. Personnellement, je trouve que cela convient parfaitement au développement Android.
la source
Mise à jour de novembre 2018
Après avoir travaillé et blogué sur MVC et MVP dans 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 sous une forme plus complète et facilement digestible.
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 du développement Android, consultez ce cours complet ici .
Cette réponse a été mise à jour afin de rester pertinente en novembre 2016
Il semble que vous recherchiez des motifs architecturaux plutôt que des motifs de conception .
Les modèles de conception visent à décrire une «astuce» générale que le programmeur pourrait mettre en œuvre pour gérer un ensemble particulier de tâches logicielles récurrentes. Par exemple: dans la POO, lorsqu'un objet doit notifier un ensemble d'autres objets de certains événements, le modèle de conception d'observateur peut être utilisé.
É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 à rechercher un modèle de conception OOP unique qui n'est PAS utilisé sur Android.
Les modèles architecturaux , en revanche, ne traitent pas de tâches logicielles particulières - ils visent à fournir des modèles d'organisation logicielle basés sur les cas d'utilisation du composant logiciel en question.
Cela semble un peu compliqué, mais j'espère qu'un exemple clarifiera: si une application est utilisée pour extraire 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 à considérer. Notez que je n'ai rien dit sur les tâches logicielles et le déroulement du programme de l'application - je viens de le décrire du point de vue de l'utilisateur, et un candidat pour un modèle architectural a émergé.
Puisque vous avez mentionné MVC dans votre question, je suppose que les modèles architecturaux sont ce que vous recherchez.
Historiquement, Google n'avait aucune directive officielle sur les architectures des applications, ce qui (entre autres raisons) a conduit à un désordre total dans le code source des applications Android. En fait, même aujourd'hui, la plupart des applications que je vois ne suivent toujours pas les meilleures pratiques de POO et ne montrent pas une organisation logique claire du code.
Mais aujourd'hui, la situation est différente - Google a récemment publié la bibliothèque Data Binding , qui est entièrement intégrée à Android Studio, et a même déployé un ensemble de 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 si MVx est meilleur que MVy est totalement inutile parce que les termes eux-mêmes sont très ambigus - regardez simplement les réponses à 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 du meilleur modèle architectural pour Android a officiellement commencé, 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 modèle (ou modèles) deviendra les normes de l'industrie à l'avenir - nous devrons 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 de liaison de données ne deviendra pas une norme de l'industrie. Je suis confiant de le dire parce que la bibliothèque de liaison de données (dans son implémentation actuelle) fournit des gains de productivité à court terme et une sorte de directive 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.
Maintenant, bien que nous ayons une sorte de directives et d'outils officiels aujourd'hui, personnellement, je ne pense pas que ces directives et outils soient les meilleures options disponibles (et ce ne sont certainement pas les seules). 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 seulement cosmétiquement différent des autres - il est basé 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 implications sur l'organisation du code.
Donc, si vous cherchez un bon modèle architectural pour les applications Android qui suit les principes SOLID , vous pouvez en trouver une description dans mon article sur les modèles architecturaux MVC et MVP dans Android .
la source
Lorsque j'atteins ce poste, cela m'aide vraiment à comprendre les modèles avec l'exemple, donc j'ai fait 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.
Quelques liens utiles pour référence:
Introduction aux modèles de conception Android
Modèles de conception
la source
Il existe différents modèles utilisés dans le cadre Android comme:
la source
Voici un excellent article sur les modèles de conception communs pour Android :
Modèles de création:
Modèles structurels:
Modèles comportementaux:
la source
Les classes Android suivantes utilisent des modèles de conception
1) Le support de vue utilise le motif de conception Singleton
2) L'intention utilise le modèle de conception d'usine
3) L'adaptateur utilise le modèle de conception de l'adaptateur
4) Le récepteur de diffusion utilise le modèle de conception de l'observateur
5) La vue utilise le modèle de conception composite
6) Media FrameWork utilise le modèle de conception de façade
la source
Dans le cas des notifications , le modèle Builder
NotificationCompat.Builder
utilisecomme,
la source
Android utilise également le modèle de conception ViewHolder.
Il est utilisé pour améliorer les performances d'un ListView tout en le faisant défiler.
Le modèle de conception ViewHolder vous permet d'accéder à chaque vue d'élément de liste sans avoir besoin de la rechercher, ce qui permet d'économiser de précieux cycles de processeur. Plus précisément, cela évite les appels fréquents de findViewById () pendant le défilement de ListView, et cela le rendra fluide.
la source
Tous ces modèles, MVC, MVVM , MVP et modèle de présentation , peuvent être appliqués aux applications Android, mais sans cadre 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 le modèle de présentation à une application Android, ce que nous voulons vraiment, c'est avoir un projet structuré clair et, plus important encore, plus facile pour les tests unitaires.
Pour le moment, sans infrastructure tierce, vous avez généralement beaucoup de code (comme addXXListener (), findViewById (), etc.), qui n'ajoute aucune valeur commerciale. De plus, vous devez exécuter des tests unitaires Android au lieu des tests JUnit normaux, qui prennent un certain temps à s'exécuter et rendent les tests unitaires peu pratiques.
Pour ces raisons, il y a quelques années, nous avons lancé un projet open source, RoboBinding - Un cadre de modèle de présentation de liaison de données pour la plate-forme Android. RoboBinding vous aide à écrire du code d'interface utilisateur plus facile à lire, à tester et à maintenir. RoboBinding supprime le besoin de code inutile comme addXXListener ou ainsi , et déplace 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 lui-même est livré avec plus de 300 tests JUnit pour garantir sa qualité.
la source
Je voudrais 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 sur
https://docs.google.com/document/d/1_zihWXAwgTAdJc013-bOLUHPMrjeUBZnDuPkzMxEEj0/edit?usp=sharing
la source
Dans Android, le modèle de «processeur de file d'attente de travail» est couramment utilisé pour décharger les tâches du thread principal d'une application.
Exemple: la conception de la classe IntentService.
IntentService reçoit les intentions, lance un thread de travail et arrête le service comme il convient.Toutes les demandes sont traitées sur un seul thread de travail.
la source
Binder utilise "Observer Pattern" pour les notifications des destinataires de décès.
la source