IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Avis sur Activity / Controller, pseudo MVC


Sujet :

Android

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut Avis sur Activity / Controller, pseudo MVC
    Salut à tous,

    je refactor une app dans laquel j'essai d'alléger un peu les activities.
    Mon but est de ne garder dans les activity que ce qui concerne le graphique (apparition/disparition de vue , changement de texte, animation, etc ...) et d'avoir à coté un controller qui va venir gérer toute la logique liée à la vue. J'ai ensuite tout un tas de classe métier que je considère comme les modèles.

    Activity :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class MainActivity extends AppCompatActivity
            implements NavigationView.OnNavigationItemSelectedListener {
     
        private MainController mController;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mController = new MainController(this);
     
        }
     
        public void showToast() {
            Toast.makeText(this, "message", Toast.LENGHT_SHORT).show();
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class MainController {
     
        private final WeakReference<MainActivity> mActivityRef;
     
        public MainController(MainActivity activity) {
            mActivityRef = new WeakReference<>(activity);
        }
     
    	public void doSomething()
    	{
    		//Traitement
    		if(mActivityRef != null) {
    			final LoginActivity activity = mActivityRef.get();
    			activity.showToast();
    		}
    	}
     
    }
    - Que pensez vous de cet implémentation ? On est pas dans le MVC "pure tradition" mais l'idée me plait bien , c'est assez léger à mettre en place.
    - J'ai opté pour une weakreference de l'activity dans le controller , mais je ne suis pas certains que ce soit nécessaire. Avis ?

    J’accroche pas aux architecture MVVM ou MVP qui rajoute trop de classe/code à mon gout.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut
    Bonjour,

    Je ne connais pas vraiment les références, mais quelle serait la différence (niveau mémoire, gain de temps...) entre ton code et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     private final MainActivity activity;
     
        public MainController(MainActivity activity) {
            this.activity= activity;
        }
    ....

    On essaie de mettre en place ce genre de pratique chez nous, mais parfois on accumule les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    currentActivity.runOnUiThread(new Runnable() {
    		@Override
    		public void run() {
    			// modification d'une vue
    		}
    	});
    dans la couche métier

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Je ne connais pas vraiment les références, mais quelle serait la différence (niveau mémoire, gain de temps...) entre ton code et
    Y'a pas de différence si ce n'est que dans mon cas la référence est faible (weak). Ce qui veux dire que si pour une raison ou une autre mon controller est coincé sur un traitement , il n'empèchera pas l'activity de se détruire et d'être ramassée par le GC

    mais parfois on accumule les
    Dans mon cas je ne l'utilise jamais puisque le controller va appeler une fonction de l'activity pour ce genre de chose.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Salut grunk,

    Citation Envoyé par grunk Voir le message
    Salut à tous,

    je refactor une app dans laquel j'essai d'alléger un peu les activities.
    Mon but est de ne garder dans les activity que ce qui concerne le graphique (apparition/disparition de vue , changement de texte, animation, etc ...) et d'avoir à coté un controller qui va venir gérer toute la logique liée à la vue. J'ai ensuite tout un tas de classe métier que je considère comme les modèles.

    Activity :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class MainActivity extends AppCompatActivity
            implements NavigationView.OnNavigationItemSelectedListener {
     
        private MainController mController;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mController = new MainController(this);
     
        }
     
        public void showToast() {
            Toast.makeText(this, "message", Toast.LENGHT_SHORT).show();
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class MainController {
     
        private final WeakReference<MainActivity> mActivityRef;
     
        public MainController(MainActivity activity) {
            mActivityRef = new WeakReference<>(activity);
        }
     
    	public void doSomething()
    	{
    		//Traitement
    		if(mActivityRef != null) {
    			final LoginActivity activity = mActivityRef.get();
    			activity.showToast();
    		}
    	}
     
    }
    - Que pensez vous de cet implémentation ? On est pas dans le MVC "pure tradition" mais l'idée me plait bien , c'est assez léger à mettre en place.
    - J'ai opté pour une weakreference de l'activity dans le controller , mais je ne suis pas certains que ce soit nécessaire. Avis ?

    J’accroche pas aux architecture MVVM ou MVP qui rajoute trop de classe/code à mon gout.
    Je trouve ton idée bien osée et en même temps intéressante. Je suis entrain de scruter et voir sur quel mesure intervenir avec un plus et quelques remarques constructives.

    Seulement, concernant le WeakReference, je ne pense pas que cela soit nécessaire dans ce contexte du fait que l'activity à laquelle on fera référence ne sera pas gardée en tant que membre static par le garbage collector.

    Du reste, je continue à analyser ton idée.

    Merci

    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

Discussions similaires

  1. Avis sur architecture de mon MVC
    Par Delvhan dans le forum MVC
    Réponses: 1
    Dernier message: 21/03/2012, 23h44
  2. Vos avis sur mon implémentation MVC en PHP5
    Par Jorael dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2008, 19h10
  3. [POO] Votre avis sur ma pseudo-fabrique
    Par PeterPetrelli dans le forum Langage
    Réponses: 4
    Dernier message: 12/09/2007, 07h13
  4. Réponses: 6
    Dernier message: 28/02/2005, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo