Question Modèle MVC sur Android


Est-il possible d'implémenter le modèle model-view-controller en Java pour Android?

Ou est-il déjà mis en œuvre à travers des activités? Ou existe-t-il un meilleur moyen d'implémenter le modèle MVC pour Android?


454
2018-05-27 21:23


origine


Réponses:


Dans Android, vous n'avez pas de MVC, mais vous disposez des é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 étendez des clases comme ListActivity, TabActivity et faire usage du fichier XML par gonfleurs.
  • Vous pouvez créer autant de classes que vous le souhaitez pour votre logique métier.
  • Beaucoup de Utils ont déjà été écrits pour vous - DatabaseUtils, Html.

228
2018-05-27 22:09



Il n'y a pas de modèle MVC unique. MVC est un concept plutôt qu'un solide cadre de programmation. Vous pouvez implémenter votre propre MVC sur n'importe quelle plate-forme. Tant que vous vous en tenez à l’idée de base suivante, vous implémentez MVC:

  • Modèle: Que rendre
  • Vue: Comment rendre
  • Manette: Événements, entrée de l'utilisateur

Pensez-y également: lorsque vous programmez votre modèle, le modèle ne devrait pas avoir à s'inquiéter du rendu (ou du code spécifique à la plate-forme). Le modèle dirait à la vue, je m'en fous si votre rendu est Android ou iOS ou Windows Phone, c'est ce que j'ai besoin de vous rendre. La vue ne traiterait que le code de rendu spécifique à la plate-forme.

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


207
2018-06-09 04:11



Les actions, les vues et les activités sur Android sont la façon de travailler avec l'interface utilisateur Android et sont une implémentation du modèle modèle-vue-vue-modèle (MVVM), qui est structurellement similaire (dans la même famille que) model-view-controller.

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


46
2018-05-27 21:28



Après quelques recherches, la réponse la plus raisonnable est la suivante:

MVC est déjà implémenté sous Android comme:

  1. View = layout, ressources et classes intégrées comme Button dérivé de android.view.View.
  2. Contrôleur = Activité
  3. Model = les classes qui implémentent la logique d'application

(Cela n'implique d'ailleurs aucune logique de domaine d'application dans l'activité.)

La chose la plus raisonnable pour un petit développeur est de suivre ce modèle et de ne pas essayer de faire ce que Google a décidé de ne pas faire.

PS Notez que l'activité est parfois redémarrée, donc il n'y a pas de place pour les données du modèle (la façon la plus simple de provoquer un redémarrage est d'omettre android:configChanges="keyboardHidden|orientation" à partir du XML et allumez votre appareil).

MODIFIER

Nous parlons peut-être MVC, mais ce sera pour ainsi dire FMVC, Framework - Modèle - Vue - Contrôleur. le Cadre (l'OS Android) impose son idée du cycle de vie des composants et des événements connexes, et dans la pratique la Manette (Activity/Service/BroadcastReceiver) est tout d'abord responsable de faire face à ces Cadreévénements -imposés (tels que onCréer ()). L'entrée de l'utilisateur doit-elle être traitée séparément? Même s'il le faut, vous ne pouvez pas le séparer, les événements d'entrée d'utilisateur viennent également d'Android.

Quoi qu'il en soit, moins le code qui n'est pas spécifique à Android que vous mettez dans votre Activity/Service/BroadcastReceiver, le meilleur.


22
2018-04-20 09:11



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

Mais néanmoins, la façon dont Android gère les classes et les ressources, vous êtes parfois même obligé de suivre le modèle MVC. Selon moi, les activités qui sont parfois responsables de la vue, mais qui agissent en même temps comme contrôleurs, sont plus complexes.

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êler ces choses dans votre code, alors vous suivez tout de même un modèle MVC.


16
2018-05-27 21:29



La meilleure ressource que j'ai trouvé pour implémenter MVC sur Android est ce post:

J'ai suivi le même design pour l'un de mes projets, et ça a très bien fonctionné. Je suis un débutant sur Android, donc je ne peux pas dire que c'est la meilleure solution.

J'ai apporté une modification: j'ai instancié le modèle et le contrôleur pour chaque activité de la classe d'applications afin que celles-ci ne soient pas recréées lorsque le mode paysage-portrait change.


13
2018-03-09 13:30



Vous pouvez implémenter MVC sous Android, mais il n'est pas "nativement pris en charge" et demande un certain effort.

Cela dit, je tends personnellement vers MVP comme un modèle architectural beaucoup plus propre pour le développement Android. Et en disant MVP je veux dire ceci:

enter image description here

J'ai également posté une réponse plus détaillée ici.

Après avoir joué avec les différentes approches de l'implémentation de MVC / MVP dans Android, j'ai trouvé un modèle d'architecture raisonnable, que j'ai décrit dans un article de ce type: MVP et MVC Architectural Patterns dans Android.


11
2018-06-03 19:10



Je suis d'accord avec JDPeckham et je crois que XML seul n'est pas suffisant pour mettre en œuvre la partie interface utilisateur d'une application.

Cependant, si vous considérez l'activité comme faisant partie de la vue, l'implémentation de MVC est assez simple. Vous pouvez remplacer Application (comme retourné par getApplication () dans Activity) et c'est ici que vous pouvez créer un contrôleur qui survit pendant la durée de vie de votre application.

(Vous pouvez également utiliser le motif singleton comme suggéré par la documentation de l'application)


10
2017-08-03 10:52



La création de l'interface utilisateur Android à l'aide de dispositions, de ressources, d'activités et d'intentions est une implémentation du modèle MVC. S'il vous plaît voir le lien suivant pour plus d'informations - http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf

miroir pour le pdf


10
2017-08-28 12:18



MVC- Architecture sur Android Il est préférable de suivre MVP plutôt MVC dans Android. Mais toujours selon la réponse à la question, cela peut être une solution

Enter image description here

Description et directives

     Controller -
        Activity can play the role.
        Use an application class to write the
        global methods and define, and avoid
        static variables in the controller label
    Model -
        Entity like - user, Product, and Customer class.
    View -
        XML layout files.
    ViewModel -
        Class with like CartItem and owner
        models with multiple class properties
    Service -
        DataService- All the tables which have logic
        to get the data to bind the models - UserTable,
        CustomerTable
        NetworkService - Service logic binds the
        logic with network call - Login Service
Helpers -
        StringHelper, ValidationHelper static
        methods for helping format and validation code.
SharedView - fragmets or shared views from the code
        can be separated here

AppConstant -
        Use the Values folder XML files
        for constant app level

NOTE 1:

Maintenant, voici le morceau de magie que vous pouvez faire. Une fois que vous avez classé le code, écrivez une classe d'interface de base comme IEntity et IService. Déclarez les méthodes communes. Créez maintenant la classe abstraite BaseService et déclarez votre propre ensemble de méthodes et disposez d'une séparation de code.

NOTE 2: Si votre activité présente plusieurs modèles, plutôt que d'écrire le code / la logique en activité, il est préférable de diviser les vues en fragments. Alors c'est mieux. Donc, à l'avenir, si plus de modèle est nécessaire pour apparaître dans la vue, ajoutez un fragment de plus.

NOTE 3: La séparation du code est très importante. Chaque composant de l'architecture doit être indépendant et ne pas avoir de logique dépendante. Si par hasard, si vous avez une logique dépendant de quelque chose, écrivez une classe logique de mappage entre les deux. Cela vous aidera dans le futur.


9
2017-07-13 09:42



Bien que ce post semble être ancien, je voudrais ajouter les deux suivants pour informer sur le développement récent dans ce domaine pour Android:

liaison android - Fournir un cadre qui permet la liaison des widgets d'affichage Android au modèle de données. Il aide à implémenter les patterns MVC ou MVVM dans les applications Android.

roboguice - RoboGuice élimine les devinettes du développement. Injectez votre View, Resource, System Service ou tout autre objet et laissez RoboGuice s'occuper des détails.


8
2017-09-11 11:57