Pour mon logiciel d'éducation, je dois composer avec plusieurs matières, et dans plusieurs pays. C'est peu dire que l'apprentissage du Baseball en France n'est pas le même qu'aux Etats-Unis, et que la Géographie n'est pas tout à fait identique en Colombie ou au Vénézuela, aussi le nombre de Matières à gérer est conséquent.
Je ne veux pas que les utilisateurs créent eux-même les matières, sinon on pourrait en trouver en double. Par exemple la matière Equitation alors qu'il peut y avoir 'Spécialité Equitation'. Je préfère que ce soit une SousMatière de Sport. Je classerai donc les matières moi-même, selon la catégorie (litteraire, science), le pays, et avec des sous-matière. Et chaque type d'établissement, selon le pays, reçoit par défaut un groupe de matière.
Dans les premières versions de test, avec une quinzaine de matière inscrites dans MySQL, c'était déjà compliqué à classer : repérer les matière par des indexs de 1 à 15 n'est pas facile. Imaginez de 1 à 1000. Voici par contre ce que cela donne avec des Enum.
EnumSubject.java
/**
* Subjects numeration
* @author Nicolas Zozol - http://www.edupassion.com - Robusta Web
*/
public enum EnumSubject {
/**
*FRENCH CLASSIC
*/
/*Foreign languages */
ALLEMAND(1, SubjectCategory.FOREIGN_LANGUAGE, "fr"), ANGLAIS(2, SubjectCategory.FOREIGN_LANGUAGE, "fr"),
ESPAGNOL(3, SubjectCategory.FOREIGN_LANGUAGE, "fr"), ARABE(4, SubjectCategory.FOREIGN_LANGUAGE, "fr"),
/* First languages */
FRANCAIS_EXPERT(21, " SubjectCategory.LITTERARY, "fr"), ALLEMAND_EXPERT(22, SubjectCategory.LITTERARY, "fr"),
/* Regional languages */
CORSE(31, SubjectCategory.REGIONAL_LANGUAGE, "fr"), BRETON(32,SubjectCategory.REGIONAL_LANGUAGE, "fr"), OCCITAN(33, SubjectCategory.REGIONAL_LANGUAGE, "fr"),
/* sciences */
MATH(51, SubjectCategory.SCIENCE, "fr"), SCIENCES_PHY(52, , SubjectCategory.SCIENCE, "fr"), SVT(53, SubjectCategory.SCIENCE, "fr"),
/* personal developpment */
ART_PLASTIQUE(71, SubjectCategory.ART, "fr"), MUSIQUE(72, SubjectCategory.ART, "fr"), THEATRE(73, SubjectCategory.ART, "fr"),
/**
* AMERICAN
*/
SOCIAL_STUDIES(501, SubjectCategory.HUMAN_SCIENCE, "us"),
/**
* ALL -- needs some translation, probably.
*/
OPTION1(1001, SubjectCategory.OTHER, "all"), OPTION2(1002, SubjectCategory.OTHER, "all");
int databaseValue;
SubjectCategory category;
private EnumSubject(int databaseValue,SubjectCategory category) {
this.databaseValue = databaseValue;
this.category = category;
}
public int getDatabaseValue() {
return databaseValue;
}
A priori, ca n'ajoute strictement rien à une base de donnée, SQL ou XML. Mais voici ce qui se passe lorsque je veux choisir les Matières par établissement :
Toujours dans EnumSubject.java
public static EnumSubject[] getCollegeFrance() {
EnumSubject[] array = new EnumSubject[]{
ALLEMAND, ANGLAIS, ESPAGNOL, FLE,
LATIN, GREC,
ART_PLASTIQUE, MUSIQUE, THEATRE,
EPS, SPECIALITE_SPORT,
FRANCAIS_EXPERT, ALLEMAND_EXPERT,
CORSE, BRETON, OCCITAN, FLAMAND_REGION, BASQUE, CATALAN,
HIST_GEO, EDUC_CIV,
MATH, SCIENCES_PHY, SVT, TECHNO, INFORMATIQUE,
TRAVAUX_DIRIGES, PROJETS
};
return array;
}
public static EnumSubject[] getLyceeFrance() {
EnumSubject[] array = new EnumSubject[]{
ALLEMAND, ANGLAIS, ESPAGNOL, ARABE, CHINOIS, ITALIEN, FLE, FLAMMAND, RUSSE,
LATIN, GREC,
ART_PLASTIQUE, MUSIQUE, THEATRE,
EPS, SPECIALITE_SPORT,
FRANCAIS_EXPERT, ALLEMAND_EXPERT,
CORSE, BRETON, OCCITAN, FLAMAND_REGION, BASQUE, CATALAN,
HIST_GEO, EDUC_CIV, SES, PHILOSOPHIE,
MATH, SCIENCES_PHY, SVT, TECHNO, INFORMATIQUE, SCIENCES_INGENIEUR,
TPE, PROJETS
};
return array;
}
Puis dans SchoolType :
/**
* Differents type of school accross the world
*/
public enum SchoolType {
OTHER(0, "all", "Other/Autre"),
INTERNATIONAL(1, "all", "International School"),
FR_Primaire(4, "fr", "Primaire"),
FR_CES(5,"fr", "Collège (au sens français)"), FR_LYCEE(6, "fr", "Lycée"), FR_CES_LYCEE(7, "fr", "Collège & Lycée"),
UNIVERSITE(8, "fr", "Supérieur"),
K(9, "us", "K"), Primary(10, "us", "Primary"), Secondary(11, "us", "Secondary"),
UNIVERSITY(12, "us", "University)");
(...)
public EnumSubject[] getStandardSubjects (){
switch (this){
case FR_Primaire : return EnumSubject.getPrimaireFrance();
case FR_CES : return EnumSubject.getCollegeFrance();
case FR_LYCEE : return EnumSubject.getLyceeFrance();
default : return null;
}
}
}
Voici une technique qui a certainement beaucoup de défauts, notamment lorsqu'il s'agira de faire des mises à jour :
Mais c'est tellement plus simple à organiser. Pour obtenir un classement aussi efficace, à partir de MySQL, il faudrait que je fasse une petite applet. Et évidemment, c'est ce qu'il faudra faire, mais en attendant, c'est un répit sympathique. Je n'aurais pas déjà raté la rentrée scolaire ?
Vous devez être identifié pour poster un commentaire.
Il s'agit d'un Blog sur les meilleures utilisations de REST dans un environnement JAVA. Le Blog contient également du contenu sur la technologie Ajax et également un journal de bord sur le développement du site pédagogique http://www.Edupassion.com
Nicolas Zozol - Edupassion.com
| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
| 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 |
Copyright © 2000-2012 - www.developpez.com