IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Bonne pratique ?


Sujet :

Langage Java

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    171
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 171
    Points : 78
    Points
    78
    Par défaut Bonne pratique ?
    Bonjour,

    Je voudrai savoir si la manière dont je vais coder est correcte.

    Je suis en train de développer une application Web (Spring, Hibernate, Struts2 et un framework développé par mon entreprise, le framework FI).

    Voilà comment je fonctionne aujourd'hui :
    Le framework FI accélère le développement en proposant des classes génériques :
    - une classe générique proposant des méthodes génériques pour le DAO : GenericHibernateDAO<T> qui implémente une interface,
    - une classe générique proposant des méthodes génériques pour le Manager : GenericManager<T> qui implémente une interface IManager<T>
    Spring s'occupe de l'instanciation des dao dans les manager. Le framework FI fourni toutes les méthodes CRUD et permet de lister. En tant que développeurs, nous n'avons pas à coder le contenu d'un manager ou d'un DAO. Nous utilisons ces manageurs (ce sont des interfaces) juste dans la couche de présentation pour les actions Struts.

    Le problème :
    Parfois les méthodes save, update, delete ou list nécessitent avant ou après de filtrer. Par exemple notre framework FI charge tous les objets d'une table lors d'un list.
    Je souhaiterai ajouter dans mes DAO des méthodes. Le problème c'est que je vais rajouter ces méthodes dans mes classes GenericManager<T> alors que dans mes actions j'utilise IManager<T>. donc dans mes actions je n'aurai pas accès à mes propres méthodes.

    Voilà la solution que je propose (mais je ne sais pas si c'est propre) :
    par exemple, J'ai donc une classe ActionManager qui hérite de la classe du framework FI GenericManager<Action>. Je veux avoir une méthode qui me renvoie vrai si une action existe. ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class ActionManager extends GenericManager<Action> {
     
        public boolean actionExiste(String nom) {
            boolean existe = true;
     
            ...
     
            return existe;
        }
    }
    Ensuite dans mes actions struts, pour utiliser cette méthode je passe par la classe et plus par l'interfaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    IManager<Action> mgrSdr = BeanManagerFactory.getInstance().getBeanMgr(Action.class);
    ActionManager m = (ActionManager) mgrSdr;
    m.actionExiste("ligbelle1");
    Est-ce correct de faire comme ça ?

    Cordialement,
    Nicolas

    PS : je ne sais pas si j'ai été assez clair

  2. #2
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Points : 410
    Points
    410
    Par défaut
    Bonjour,

    Je dirais (ça n'engage que moi) :
    - soit tu arrives à utiliser l'interface comme elle est prévue (sans y ajouter de nouvelles méthodes),
    - soit ce n'est pas possible.

    Si tu n'y arrives pas, cela veut dire soit que l'API est mal codée (ou encore que tu ne l'as pas comprise), soit qu'elle ne répond pas à ton besoin ou bien à pas tout.

    Donc il te faut d'abord éliminer le cas où tu as mal compris l'api.
    Il est possible que ce que tu veuilles faire ne soit pas facile pour la raison que d'autres mécanismes que celui que tu envisage le permettent.

    Supposons maintenant que nous nous trouvons dans le cas où ton api ne permette pas ce que tu veux faire sans transtypage (et hélas cela arrive souvent en Java). A ce moment-là, une méthode "plus propre" consiste à encapsuler "toute" l'api que tu utilises.

    Quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class MyBeanManagerFactory extends BeanManagerFactory{
    	public ActionManager getBeanMgr(...) {
                return (ActionManager) parent.getBeanMgr();
    	}
    }
    L'avantage de cette solution est qu'elle localise le problème, et du coup te simplifie la maintenance.
    L'inconvénient est que tu vas peut-être te retrouver à encapsuler 200 fonctions.

    Bonne chance

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Quel est le problème de base ? Des soucis de performance ?
    Car quand on commence à vouloir réécrire le framework de l'entreprise c'est en général très mauvais.

Discussions similaires

  1. Bonnes pratiques de protections individuelles
    Par Community Management dans le forum Sécurité
    Réponses: 22
    Dernier message: 05/04/2013, 11h47
  2. Réponses: 7
    Dernier message: 02/11/2005, 15h30
  3. [Bonne pratique]Stratégie d'allocation
    Par jowo dans le forum C
    Réponses: 1
    Dernier message: 05/10/2005, 14h47
  4. [FOREIGN K] Valeur de champ = nom de table. Bonne pratique ?
    Par Seb des Monts dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/05/2005, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo