508 votes

Modèle MVC sur Android

Est-il possible d'implémenter le modèle modèle-vue-contrôleur en Java pour Android ?

Ou est-elle déjà mise en œuvre par le biais d'activités ? Ou existe-t-il une meilleure façon d'implémenter le modèle MVC pour Android ?

64 votes

Votre question est très pertinente. Mais la réponse indiquée comme solution n'est pas correcte à mon avis. Elle risque d'induire plusieurs personnes en erreur.

4 votes

Consultez mes deux billets à partir d'ici Architecture Android : MV ?

1 votes

Y a-t-il un ensemble supplémentaire de règles à suivre pour adhérer à MVC ou le développement Android est-il déjà adapté à MVC à cause de Activity, XML, Resources ?

241voto

Pentium10 Points 68884

Dans Android, il n'y a pas de MVC, mais les éléments suivants :

  • Vous définissez votre interface utilisateur dans divers fichiers XML en fonction de la résolution, du matériel, etc.
  • Vous définissez votre ressources dans divers fichiers XML en fonction de la langue, etc.
  • Vous étendez les classes comme Activité de liste , TabActivity et utiliser le fichier XML en gonfleurs .
  • Vous pouvez créer autant de classes que vous le souhaitez pour votre logique d'entreprise.
  • Un grand nombre de Utils ont déjà été écrites pour vous - DatabaseUtils, Html.

3 votes

@JDPekham, pourquoi dites-vous "Vous ne pouvez pas instancier une activité sans parler à votre layout/view" ? L'instanciation d'une activité ne nécessite pas de parler aux vues, en fait parler aux vues ne fait en aucun cas partie de l'instanciation de l'activité. Vous POUVEZ (mais vous n'êtes pas obligé) appeler diverses méthodes d'activité qui interagissent avec vos vues quand et si vous le souhaitez. Deuxième question : En supposant que Activity est destiné à prendre le rôle de "contrôleur" (je crois que beaucoup de développeurs Android le voient de cette façon) pourquoi ne pas parler à vos vues à partir de l'Activity ?

8 votes

Pour tous ceux qui disent que "Android est MVC", essayez Backbone.js (oui, js côté client) pendant une semaine, puis revenez et dites que "Android est MVC". Vous comprendrez enfin la question et pourquoi nous continuons à la poser :)

14 votes

"Dans Android, il n'y a pas de MVC" ? ??? Dans Android, comme dans d'autres langages, vous avez MVC si vous voulez MVC.

233voto

Ramon Chan Points 777

Il n'existe pas de modèle MVC unique et universel. MVC est un concept plutôt qu'un cadre de programmation solide. Vous pouvez mettre en œuvre votre propre MVC sur n'importe quelle plate-forme. Tant que vous respectez l'idée de base suivante, vous implémentez MVC :

  • Modèle : Ce qu'il faut rendre
  • Vue : Comment rendre
  • Contrôleur : Événements, contributions des utilisateurs

Pensez-y également de la manière suivante : Lorsque vous programmez votre modèle, celui-ci ne devrait pas avoir à se préoccuper du rendu (ou du code spécifique à la plate-forme). Le modèle dirait à la vue : "Je me fiche que votre rendu soit Android, iOS ou Windows Phone, c'est ce que j'ai besoin que vous rendiez". La vue ne s'occuperait que du code de rendu spécifique à la plateforme.

Ceci est particulièrement utile lorsque vous utilisez Mono de partager le modèle afin de développer des applications multiplateformes.

14 votes

C'est vrai, et c'est bien dit, mais c'est de la théorie et les gens sont pratiques !

1 votes

@TWiStErRob Mais les modèles de conception sont des idées théoriques et abstraites qui n'ont pas qu'une seule façon de les réaliser. Proclamer "Je ne veux pas comprendre MVC en théorie, je veux juste qu'il soit implémenté" me semble pouvoir aboutir à "Je vais mettre une machine à laver dans ma cuisine parce que les machines à laver implémentent le pattern Cleaner™ et que les cuisines en ont besoin".

1 votes

Je pense que les exemples sont inestimables parce qu'ils montrent ce que d'autres personnes ont trouvé. On peut les améliorer et apprendre de leurs efforts. Il n'est pas nécessaire de réinventer la roue. Dans le contexte d'Android et de son cycle de vie complexe, il y a des problèmes qui ne sont pas abordés dans un modèle de conception, mais tout le monde y sera confronté. C'est ce que j'entendais par pratique.

48voto

Derick Bailey Points 37859

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

À ma connaissance, il n'existe aucun moyen de sortir de ce modèle. C'est probablement possible, mais vous perdriez tous les avantages du modèle existant et vous devriez réécrire votre propre couche d'interface utilisateur pour que cela fonctionne.

24voto

JustDanyul Points 6108

J'ai écrit une réponse à une question similaire ici : Quels sont les modèles de conception utilisés sur Android ?

Si quelqu'un souhaite le lire, il peut le faire. En résumé, je pense que MVP est bien mieux adapté au développement Android.

18voto

RoflcoptrException Points 22111

Il n'existe pas de modèle MVC unique auquel vous pourriez obéir. MVC indique plus ou moins qu'il ne faut pas mélanger les données et les vues, de sorte que, par exemple, les vues sont responsables de la conservation des données ou que les classes qui traitent les données affectent directement la vue.

Néanmoins, la façon dont Android gère les classes et les ressources vous oblige parfois à suivre le modèle MVC. Plus compliquées à mon avis sont les activités qui sont parfois responsables de la vue, mais qui agissent en même temps comme un contrôleur.

Si vous définissez vos vues et vos présentations dans les fichiers XML, que vous chargez vos ressources à partir du dossier res et que vous évitez plus ou moins de mélanger ces éléments dans votre code, alors vous suivez de toute façon un modèle MVC.

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