Sur un projet ciblant autant de téléphones à fonctions que possible (Nokia 3110 Classic, Samsung E250, Motorola SLVR L7, etc.), comment devrait-il être conçu à un niveau élevé en termes de structure de code? Je ne parle pas du soutien par combiné, car nous utilisons le polonais pour cela. Je suis un développeur C# expérimenté qui passe au développement J2ME au sein de mon entreprise. Il y a quelques mois, la direction a embauché un développeur senior J2ME, car les développeurs existants n'avaient aucune expérience J2ME. Je rejoins maintenant cette équipe avec un autre développeur C#, et nous avons tous les deux des réserves sur ce que nous voyons. Alors que le logiciel fonctionne et répond aux exigences de l'entreprise, la conception de l'application me semble totalement erronée. Plutôt que d'utiliser OO, la plupart du code est composé de méthodes statiques et de constantes, et est dans le moins de classes possibles (15, pour autant que je sache), à cause des "contraintes de mémoire sur les combinés". Certains d'entre eux sont des milliers de lignes. Apparemment, aucun des éléments d'interface utilisateur intégrés n'est utilisé à l'exception de Canvas, car ils "ne fournissent pas assez de contrôle". Toutes les formes/fenêtres/pages (pas sûr du bon terme) ont une méthode statique dans une classe, dans laquelle nous avons le code pour mettre en place l'interface utilisateur de ce formulaire/fenêtre/page. Il se présente comme suit:Bon projet J2ME
UiElement items[] = new UiElement[8 + (fieldCount * 4)];
int y = 0;
items[y++] = new UiElement("name", UiElement.TYPE_TEXT_FIELD, "Name", TextField.ANY, true, "", true, null, -1, 0);
items[y++] = new UiElement("address", UiElement.TYPE_TEXT_FIELD, "Mobile", TextField.PHONENUMBER, true, "", true, null, -1, 0);
// ...
items[y++] = UiElement.LINE;
items[y++] = new UiElement("button", UiElement.TYPE_BUTTON, "Save", -1, false, "", true, null, UiElement.TYPE_LINK, ActionHandler.LINK_UPDATE_USER);
items[y++] = new UiElement("", UiElement.TYPE_RED_BUTTON, "Delete user", -1, false, "", true, null, UiElement.TYPE_LINK, ActionHandler.LINK_DELETE_USER);
items[y++] = UiElement.LINE;
items[y++] = new UiElement("", UiElement.TYPE_LINK_ARROWS, "Back to choose category", 0, false, "", true, null, -1, ActionHandler.LINK_MC_SELECT_CATEGORY);
items[y++] = UiElement.LINE;
Le constructeur principal UIElement est
public UiElement(String RMSref, int inputType, String displayText, int additionalInputType, boolean mandatory, String aditional, boolean selectable, Image img, int displayType, int actionLink)
A la fin de cela, un appel est fait pour enregistrer le tableau des éléments sur une classe qui étend la toile. Cette classe a une méthode de peinture avec un énorme bloc de commutation, qui se branche sur inputType de UiElement. De là, il va à une méthode statique sur la classe "graphics", qui a des méthodes pour chaque type différent de "contrôle" pour gérer la peinture de ce "contrôle". En fait, il semble que tout soit procédural quand il le peut, et n'utilise OO que lorsqu'il le faut. J'ai demandé au senior dev pourquoi nous n'avons pas de classe Control de base, puis des sous-classes, chacune avec une peinture autonome, des propriétés, etc., au lieu de cette classe générique UiElement, et c'est apparemment parce que beaucoup de classes utiliser trop de mémoire. On m'a également dit que certains téléphones ont des temps d'exécution Java buggés, de sorte qu'ils ne libèrent pas la mémoire correctement. C'est aussi la raison pour laquelle il n'y a qu'un seul Canvas.
Comme autre exemple, toute la sortie de texte est effectuée à l'aide de polices bitmap, plutôt que d'utiliser le rendu interne des polices du téléphone. On nous a dit que c'est pour fournir un rendu uniforme à travers les combinés, plutôt que de compter sur leurs polices et tailles internes.
Est-ce la bonne façon de le faire? Les choses qu'on nous a dit sont-elles correctes? J'espère essayer d'éviter ce tournant dans une soumission à TheDailyWTF.
Je voudrais écouter votre développeur J2ME senior car il semble qu'il sait exactement ce qu'il fait pour la plate-forme cible. Et, espérons qu'il ne voit pas cela comme étant vraiment insultant de dire que son design, qui est exactement ce que tout bon J2ME ferait, devrait être un Daily WTF. – Fostah
En relisant ma question, elle a commencé à lire comme un article de TDWTF, ne manquant que la phrase typique de "Et personne ne savait mieux jusqu'à ce qu'il soit trop tard." C'est pourquoi je demande - honnêtement, je ne connais pas mieux, et je suis heureux de savoir si son modèle est la bonne façon de faire les choses. Je ne veux pas dire que c'est une attaque contre lui, et je suis désolé si cela se présente de cette façon. –