Aller au contenu

[Résolu] Une séparation efficace des classes ?


jok

Recommended Posts

Bonjour,

Je suis débutant en programmation Android et comme vous pouvez le voir, je suis aussi nouveau dans la communauté. Après beaucoup de recherches et de lecture, j'avoue que j'ai encore quelques difficultés avec la structure du Framework. OK, la vue est bien séparée des traitements grâce aux layouts XML, mais je vois mal comment séparer les actions dans tout ça...

Exemple : Sur ma première page qui s'affiche à l'écran, j'appuie simplement sur un bouton pour qu'il m'affiche un message. Dans mon main.xml, j'ai donc appelé android:onClick="messageClick" pour effectuer ce test. Dans ma page principale, tout fonctionne avec ce code :

public void messageClick(View main) {
   Toast.makeText(Mapage.this, "Message de test !", Toast.LENGTH_SHORT).show();
}

Jusqu'ici tout va bien mais j'aimerais avoir un code propre sur le long terme, donc le mieux serait de placer cette action dans une nouvelle classe (qui est aussi dans un nouveau package), de façon à ce que le modèle soit séparé du midlet et de la vue. J'adapte donc ma méthode dans la nouvelle classe, mais cette fois, l'application plante au clic du bouton.

Je suppose qu'il faut reconfigurer le Manifest puisque je tente d'appeler une fonction qu'il ne connait plus, mais comment faire pour qu'il la reconnaisse à nouveau ? Je suppose que ça ne doit pas être grand chose à faire mais j'ai essayé beaucoup de choses depuis hier, et là j'avoue être un peu perdu...

Merci d'avance pour votre aide, et si vous avez besoin de plus d'informations n'hésitez pas !

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Déjà bienvenue dans la programmation Android et dans la communauté de ce forum.

Sur cette déclaration :

donc le mieux serait de placer cette action dans une nouvelle classe (qui est aussi dans un nouveau package), de façon à ce que le modèle soit séparé du midlet et de la vue.

Ton code est pourtant propre. Je ne vois pas en quoi ton "code behind" associé à ta vue ne devrait pas gérer tes actions.

Tu viens de quelle technologie? Qu'est ce qui te fais penser que tu devrais isoler ton action dans une classe intermédiaire? Quelle architecture logicielle voudrais tu mettre en place ?

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

de façon à ce que le modèle soit séparé du midlet et de la vue.

Mais quel modèle ? Tu ne manipules pas de données ici :)

Et si tu le faisais, tu aurais effectivement la possibilité d'abstraire la couche modèle en utilisant un ContentProvider.

Ou alors tu mélanges différents concepts ;)

Lien vers le commentaire
Partager sur d’autres sites

Je dirais que çà dépend de ton type d'action.

Ton activity se déroule dans l'UI-thread. Il vaut mieux faire en sorte que le minimum d'action soit exécuter dedans sous peine de voir ton appli freezer.

Après soit tu passes par des classes anonymes, soit par des classes à part c'est une question de gout (et de lisibilité du code).

Dans ton exemple comme tu ne manipules que de l'affichage il est logique que tout se passe dans l'UIthread.

Par contre si tu avez eu besoin d'effectuer un traitement plus long il aurait fallu faire autrement,en utilisant thread, asynctask et autre Handler pour cela.

Quelques liens pratique sur le sujet

Dans la docs officielles =>

http://developer.android.com/guide/topics/fundamentals.html#procthread

http://developer.android.com/resources/articles/painless-threading.html

http://developer.android.com/guide/appendix/faq/commontasks.html#implementcallbacks

En français =>

http://davy-leggieri.developpez.com/tutoriels/android/ui-thread/

http://android.developpez.com/index/redirect/6264/Tutoriel-Android-Decouvrez-les-threads-composant-une-application-Android-par-Davy-Leggieri/

Lien vers le commentaire
Partager sur d’autres sites

Déjà, merci à vous trois pour vos réponses ! Je me suis sûrement mal exprimé (en même temps c'est pas évident de décrire un problème quand on ne sait pas d'où il provient).

Sur cette déclaration :

donc le mieux serait de placer cette action dans une nouvelle classe (qui est aussi dans un nouveau package), de façon à ce que le modèle soit séparé du midlet et de la vue.

Ton code est pourtant propre. Je ne vois pas en quoi ton "code behind" associé à ta vue ne devrait pas gérer tes actions.

Tu viens de quelle technologie? Qu'est ce qui te fais penser que tu devrais isoler ton action dans une classe intermédiaire? Quelle architecture logicielle voudrais tu mettre en place ?

Si je mets mon action dans la même classe que mon midlet (comme beaucoup de tutos d'introduction à la programmation Android le montrent), ça fonctionne nickel. Mais je ne pense pas qu'à long terme la maintenance de l'appli soit aisée (surtout que ce n'est pas moi qui vais l'assurer), c'est pourquoi plutôt que de tout mettre dans une classe je voulais opter pour une architecture MVC ou similaire. Qu'en penses-tu ?

Pour info, j'ai déjà fait de la programmation Java, mais je découvre seulement ce Framework...

Mais quel modèle ? Tu ne manipules pas de données ici :)

Et si tu le faisais, tu aurais effectivement la possibilité d'abstraire la couche modèle en utilisant un ContentProvider.

Ou alors tu mélanges différents concepts ;)

Pour l'instant non, mais par la suite je vais avoir à en manipuler (d'où l'intérêt de bien séparer les différentes couches). Mais ce que je voulais dire ici, c'est que même si ma vue est séparée grâce aux layouts XML, il va bien falloir que je sépare l'action de mon bouton non ? Je ne pense pas qu'elle devrait rester dans la même classe que mon midlet en fait... Sinon j'ai mal compris la structure d'une appli Android (et je m'en excuse d'avance).

Et merci pour ContentProvider, j'irai voir ça quand je manipulerai mes données. :)

EDIT

Désolé Moritan, j'étais en train d'écrire quand tu as posté. Je vais aller voir tes liens, merci !

Lien vers le commentaire
Partager sur d’autres sites

Pas de soucis ,n'hésite pas à poser tes questions.

Il faut avouer que Google n'est pas très clair sur les best practice à à mettre en place, ou peut faire tout et n'importe quoi, sans qu'il y ai réellement un document qui dise hé stop tu fait une connerie; c'est comme ça que l'on bosse.

Par contre un bonne exemple d'appli de référence : http://code.google.com/p/iosched/

Lien vers le commentaire
Partager sur d’autres sites

Si tu pourrais bien sur implémenter un model MVC pour Android comme ici :

http://mindtherobot.com/blog/675/android-architecture-message-based-mvc/

Cependant je ne peux que te conseiller d'oublier cette façon de penser. Android est un langage apparenté même s'il se base sur JAVA (comme flex par exemple). Tu dois le voir beaucoup plus procédurale qu'objet. N'oublie pas que tu es limité en mémoire et que chaque instanciation d'objet à un coup. Plus tu utiliseras de mémoire inutilement plus tous risque de faire planter ton application.

Voila n'hésite surtout pas

Lien vers le commentaire
Partager sur d’autres sites

Il faut avouer que Google n'est pas très clair sur les best practice à à mettre en place, ou peut faire tout et n'importe quoi, sans qu'il y ai réellement un document qui dise hé stop tu fait une connerie; c'est comme ça que l'on bosse.Par contre un bonne exemple d'appli de référence : http://code.google.com/p/iosched/

C'est ce qui m'a perturbé au départ... En faisant mon étude UML préalable, je me suis dit qu'une architecture MVC pourrait correspondre aux besoins de mon appli, mais on ne trouve pas beaucoup de ressources là-dessus (apparemment c'est rare d'utiliser ce genre d'architecture). Et je n'avais pas pensé à regarder les codes sources d'applis, je vais voir ça !

Si tu pourrais bien sur implémenter un model MVC pour Android, cependant je ne peux que te conseiller d'oublier cette façon de penser. Android est un langage apparenté même s'il se base sur JAVA (comme flex par exemple). Tu dois le voir beaucoup plus procédurale qu'objet. N'oublie pas que tu es limité en mémoire et que chaque instanciation d'objet à un coup. Plus tu utiliseras de mémoire inutilement plus tous risque de faire planter ton application.Voila n'hésite surtout pas

Donc si je comprends bien, l'architecture idéale est d'avoir un fichier XML associé à Mapage extends Activity, et une couche avec les données séparées si besoin. Du coup (arrête-moi si je me trompe), une application basique a l'air super rapide déployer ! :D

Enfin bon, je vais quand même lire ton article sur le MVC sous Android pour ne rien regretter, mais si tu dis que c'est déconseillé, c'est qu'il doit y avoir une raison...

En tout cas merci pour votre aide, c'est pas mal de lecture tout ça, mais au moins ça commence à devenir clair. Je sens que je vais me plaire dans cette communauté moi ! ;)

Lien vers le commentaire
Partager sur d’autres sites

Une architecture 3 tiers ou n-tiers est largement suffisant pour une application basique. Après quand tu jouera avec les services, les styles, ... ton architecture logicielle évoluera d'elle même.

Maintenant il y a des applications basiques qui fonctionnent car celles-çi sont très bien codées en java mais qui ne sont surtout pas optimisées pour Android.

A toi d'apprendre à optimiser tes développements.

Voila ,

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...