Bonjour,

Je souhaiterais recueillir des retours d'expérience en termes de design d'application en java J2ME. Le but est de comprendre quels sont les implémentations les plus adaptées au développement mobile.

Pour ma part, je n'ai jamais fais que des choses très basiques : des applications soient de type jeux, soient n'affichant que quelques écrans (entre 15 et 20). Pour ce faire j'ai donc suivi quelques conseils pratiques sur les façons de développer en J2ME : optimisation des ressources et surtout très peu de classes... Le plus souvent le design de mes applications ressemblait à quelque chose comme ça:

- La classe Midlet, qui définit une instance de la classe Canvas et lance le thread.
- La classe Canvas qui dans une boucle infinie synchronise la gestion des évènements et le repaint de l'écran.

J'ai donc 2 classes dont la plus importante est celle héritant de Canvas et qui implémente les keyListener spécifiques pour la gestion des évènements, le httpListener si besoin et le paint(g) pour rafraichir l'écran.

Tout étant inclue dans une boucle infinie, je gère donc une variable m_iState (integer) qui identifie l'état de l'application et permet de définir les actions à mener dans le keyListener et dans le paint. J'obtiens donc 2 méthodes qui ressemblent à ça :

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
19
20
21
22
23
24
25
26
27
28
29
 
public void KeyPressed(int p_iKeyCode) {
    switch(p_iKeyCode) {
        case KEY_UP:
            switch(m_iState) {
                case APP_STATE_MAIN_MENU:
                    break;
                case APP_STATE_MENU_1:
                    break;
                ...
                default:
                    break;
            }
            break;
        case KEY_DOWN:
            switch(m_iState) {
                case APP_STATE_MAIN_MENU:
                    break;
                case APP_STATE_MENU_1:
                    break;
                ...
                default:
                    break;
            }
            break;
        default:
            break;
    }
}
Et pour la partie rafraichissement d'écran, quelque chose comme ça:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
public void paint(Graphics g) {
    switch(m_iState) {
        case APP_STATE_MAIN_MENU:
            dessine_main_menu(g);
            break;
        case APP_STATE_MENU_1:
            dessine_menu_1(g);
            break;
        ...
        default:
            break;
    }
}
On pourrait imaginer que des applications mobiles soient beaucoup plus complexes qu'une vingtaine d'écrans et dans ce cas, l'implémentation précédente trouverait ses limites dans la maintenance du code et la gestion des évolutions de l'application ; on atteindrait vite des fichiers de plusieurs dizaines de milliers de code.

Du coup on serait tenter d'appréhender le problème par l'utilisation du Design Pattern STATE afin de simplifier l'organisation de l'application.



http://rpouiller.developpez.com/tuto...e=page_4#LVI-H

Le problème de cette implémentation c'est qu'elle demande de créer une classe par état. Ce qui va à l'encontre des règles d'optimisation conseillées en J2ME.

La question est donc la suivante : avez-vous déjà travaillé sur des grosses applications J2ME et avez-vous pu implémenter un design permettant de faciliter le développement tout en conservant l'optimisation ?

Merci de votre participation.