web-dev-qa-db-fra.com

Android architecture d'application - quel est le modèle suggéré?

De la même manière, une application Web ou de bureau peut avoir trois ou n niveaux - UI, Business, Data par exemple - quelle est la structure suggérée pour une application Android Android? Comment regrouper les classes, quelles couches avez-vous etc?

Je ne fais que commencer Android dev (une application basée sur Internet qui doit répondre aux notifications entrantes) et je n'ai aucune idée de la structure que je vise. Suggestions appréciées.

59
MalcomTucker

À mon humble avis, Android "veut" suivre un modèle MVC, mais la vue et le contrôleur sont généralement vraiment couplés dans les activités.

Cela rend le test unitaire plus difficile et il est difficile d'obéir au principe de responsabilité unique .

J'ai trouvé ne architecture vraiment sympa Android présentée ici , il pourrait y avoir une idée. Tout est lâchement couplé, tellement plus facile à tester et à éditer.

De toute évidence, je suis sûr qu'il existe de nombreuses autres possibilités (comme le modèle MVP ( Model View Presenter ) - et voici des réponses parlant de MVP dans Android ), mais vous devriez toujours y jeter un œil.

16
louiscoquio

Je travaille sur Android depuis 9 mois depuis un arrière-plan côté serveur où les tests unitaires complets et les architectures en couches sont courants et fonctionnent bien.

Grâce à beaucoup d'essais et d'erreurs, je suggère fortement d'utiliser le modèle Model View Presenter, Et non le contrôleur de vue modèle.

Un énorme problème que j'ai trouvé est que Activities/Fragments a un cycle de vie qui est hors de votre contrôle et peut conduire à des problèmes inattendus.

Par exemple, notre principale application Android Android veut être utilisée en mode paysage sur les tablettes. Nous le faisons dans OnCreateView() ou OnCreate().

Sur un Nexus 7, la vue par défaut est portrait, donc ce qui se passe, c'est qu'il démarre l'activité en mode portrait, notre code dit alors aller en paysage et Android crée finalement le activity classe 3 fois!

Nous avons branché les requêtes réseau à onCreate et elles finissent par se produire 3 fois dans ce cas.

Bien sûr, nous pouvons ajouter une logique pour rechercher des appels en double mais, à mon avis, il serait préférable, sur le plan architectural, d'essayer de séparer l'interface utilisateur de la logique métier.

Ma recommandation serait d'utiliser le modèle d'usine pour créer des présentateurs à partir de l'activité, mais assurez-vous que l'usine ne renvoie que la même instance. Le présentateur peut alors contenir une logique pour effectuer une requête réseau, rechercher des doublons et renvoyer des résultats mis en cache et une logique métier générale.

Lorsque les résultats des appels réseau reviennent, soit publiez sur un bus tel qu'Otto auquel l'activité (enregistrez-vous pour l'événement sur onResume() et annulez l'enregistrement pendant onPause()) s'est enregistré, ou assurez-vous que le l'interface de rappel implémentée par l'activité a été mise à jour vers la dernière activité du présentateur.

De cette façon, le code dans le presenter vers le bas est testable à l'unité et ne dépend pas des tests de couche d'interface utilisateur floconneux.

16
FinalFive

Les actions, vues et activités dans Android sont la manière de travailler avec l'interface utilisateur Android et sont une implémentation d'un modèle de vue modèle-vue-vue, qui est structurellement similaire (dans la même famille que) le contrôleur de vue du modèle.

À ma connaissance, il n'y a aucun moyen de sortir de ce modèle. Cela peut probablement être fait, mais vous perdriez probablement tous les avantages du modèle existant et vous devrez réécrire votre propre couche d'interface utilisateur pour le faire fonctionner.

Vous pouvez trouver MVC dans les éléments suivants:

  • Vous définissez votre interface utilisateur dans divers fichiers XML par résolution/matériel, etc.
  • Vous définissez votre ressources dans divers fichiers XML par paramètres régionaux, etc.
  • Vous stockez des données dans SQLite ou vos données personnalisées dans/assets/folder, en savoir plus sur ressources et actifs
  • Vous étendez des classes comme ListActivity , TabActivity et utilisez le fichier XML par inflaters
  • Vous pouvez créer autant de classes que vous le souhaitez pour votre modèle, et avoir vos propres packages, qui agiront comme une structure
  • Beaucoup de tils ont déjà été écrits pour vous. DatabaseUtils, Html,

Il n'y a aucun modèle MVC auquel vous pouvez obéir. MVC indique simplement plus ou moins que vous ne devez pas mélanger les données et afficher, de sorte que par exemple les vues sont responsables de la conservation des données ou des classes qui traitent des données affectent directement la vue.

Mais néanmoins, la façon dont Android traite les classes et les ressources, vous êtes parfois même obligé de suivre le modèle MVC. À mon avis, les activités qui sont parfois responsables de la vue, mais néanmoins agir en tant que contrôleur en même temps.

Si vous définissez vos vues et mises en page dans les fichiers xml, chargez vos ressources à partir du dossier res, et si vous évitez plus ou moins de mélanger ces choses dans votre code, alors vous suivez de toute façon un modèle MVC.

15
Pentium10

[~ # ~] mvp [~ # ~] est la dernière architecture que la plupart des gens suivent Voici la petite documentation As L'architecture propre de l'oncle Bob dit: "L'architecture est une intention, pas des cadres"

Regardez cette vidéo c'est juste époustouflant.

7
Shivaraj Patil

Voici un projet dédié pour plans d'architecture Android avec des codes sources bien documentés. Tous sont basés sur le modèle MVP avec plusieurs rebondissements. Vérifiez également le comparaison des différentes solutions basées sur les lignes de code, la testabilité, le coût de l'apprentissage, leur prise en charge pour augmenter la complexité des données. Cela dépend de l'application particulièrement développée et du contexte (délai de mise sur le marché, développeurs, plans futurs, etc.) qui correspond le mieux au plan.

2
pcjuzer