Salut, Ce document est la pour présenté la bonne utilisation de ApplicationConfig d'après moi. Il est la comme base de départ pour trouver la meilleur utilisation possible. Etendre la classe ApplicationConfig dans son programme ou sa librairie est une mauvaise idée, surtout lorsqu'on utilise cette classe en argument de méthode, car on va finir par avoir plusieurs types de ApplicationConfig incompatibles entre elles et on ne pourra plus utiliser ApplicationConfig car il faudra passer par de la recréation dans le bon enfant de ApplicationConfig a partir des properties d'une autre. Pour éviter cela, la bonne façon lorsqu'on utilise ApplicationConfig serait de créer un MesOptions.java et MesActions.java qui seraient des enumerations dans lequel on défini l'ensemble des caractéristiques (nom, description, valeur par defaut, type, alias, ...) Est-ce que quelqu'un voit un inconvénient à cette bonne pratique ? comment ca marcherait ? ======================= Ajout de méthode spécifique pour accéder facilement a une option ---------------------------------------------------------------- methodes pour acceder rapidement aux options si on le souhaite sur l'enum ex: - getMonOptionFichier(ApplicationConfig config): File - getUneAutreOption(ApplicationConfig config): String Ces methodes feraient simplement: - return config.getConfigAsFile(MON_OPTION_FICHIER); - return config.getConfig(UNE_AUTRE_OPTION); Les enum implanteraient des interfaces spécifiques -------------------------------------------------- L'enum pour les options devrait implanter une interface spécifique avec les méthodes: - getDescription(): String - getValue(ApplicationConfig): String - getAliases:String[] - ... Et le constructeur de l'enum aurait en argument: - String key - String description - String default value - Class type - boolean transient (indique que l'option ne sera jamais sauvé sur disque) - boolean readonly (indique que l'option ne peut pas changer de valeur) - String ... aliases Init de ApplicationConfig ------------------------- plusieurs constructeurs possibles: - new ApplicationConfig(); - new ApplicationConfig(MesOptions.class); - new ApplicationConfig(MesOptions.class, MesActions.class); ... ApplicationConfig config = new ApplicationConfig(...); config.parse(args); config.action(level); Lors du new si les enums sont passées en argument, l'ApplicationConfig les utilise pour s'initialiser Mise en commun de certains besoins ---------------------------------- Du coup, il est possible de mettre par exemple la methode Help dans ApplicationConfig qui retourne la chaine 'usage' a afficher. Ce qu'il reste a faire ---------------------- Il n'y a pas grand chose a faire, vu qu'on a déjà une interface existante pour les options (OptionDef), il manque juste les alias. Et il faut juste le mettre en place de cette façon dans les projets (surtout les libs) qui l'utilise et y penser pour les prochains. -- Benjamin POUSSIN -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com http://www.codelutin.com