Publicité
+ Répondre à la discussion Actualité déjà publiée
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 33
  1. #1
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : juillet 2006
    Messages : 766
    Points : 1 093
    Points
    1 093

    Par défaut La multiplication des annotations

    Alors que le langage Java comporte de base peu d'annotations, des apis peuvent en amener une multitudes comme le montre le récent tutoriel Seam, ou celles proposées par Hibernate.

    Je suis assez réticent sur la multiplication des annotations qui pour moi ressemblent à première vue à un nouveau dialecte. Voici mes craintes si j'en crée dans mes packages :

    • Difficultés de refactoring par les ide
    • Difficultés de compréhension par l'équipe par rapport à une api standard
    • Est-ce, comme le fut xml, une mode ?
    • Quel est la réelle plus-value par rapport à une ligne de code ?

    J'étais également réticent à Hibernate par rapport à JDBC, et pourtant utilisant JPA, c'est quand même bien mieux (surtout quand Netbeans génère tout ces annotations louches ).

    Bref, créez-vous vos propres annotations, et êtes-vous content d'avoir des frameworks pleines d'annotations ?

  2. #2
    Expert Confirmé Sénior
    Avatar de Alain Defrance
    Homme Profil pro Alain DEFRANCE
    Project Lead
    Inscrit en
    août 2007
    Messages
    1 994
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain DEFRANCE
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Project Lead

    Informations forums :
    Inscription : août 2007
    Messages : 1 994
    Points : 4 055
    Points
    4 055

    Par défaut

    Pour ma part je trouve que les annotations sont un des points fort du langage.
    Hibernate qui est un outil très puissant n'était pas aussi efficace lorsque les annotations n'éxistaient pas encore. Quelle perte de temps que de taper de longs fichier de mapping en xml ...
    L'ORM avec JPA est devenu très facile à mettre en place et n'a que peu de rivaux (si ce n'est aucuns), et ceci grâce aux annotations.

    Les annotations sont maintenant omniprésentes dans nos codes sources, et je pense que c'est une manière efficace de "marquer" une classe.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    5 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 5 637
    Points : 7 018
    Points
    7 018

    Par défaut

    Le problème à mon sens n'est pas dans les annotations mais plutôt dans le fait qu'elles n'ont pas de référence (nominative) sur l'outil cible.
    Dans le cas que tu cites (Seam), c'est assez flagrant.
    On mélange des annotations JPA avec des annotations SEAM, on ne sait plus trop à quoi elles se rapportent.
    Bon, on peut toujours regarder l'import pour s'en sortir...

    Ceci dit, je ne remets pas en cause les annotations, la proximité avec la propriété ou la méthode cible est un plus par rapport aux fichiers externes.

    Un autre avantage, le serveur cible va les interpréter idéalement... on pourrait imaginer la "traduction" d'une annotation différemment d'un serveur à l'autre...

    Quelle perte de temps que de taper de longs fichier de mapping en xml
    Pour Hibernate, l'argument de kazou sur les fichiers hbm ne tient pas, l'outil les générant également

  4. #4
    En attente de confirmation mail

    Homme Profil pro
    Inscrit en
    juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : juillet 2006
    Messages : 766
    Points : 1 093
    Points
    1 093

    Par défaut

    OK pour le marquage quand il y a une annotation, par exemple @Stateless ou @Id : on comprend vite que c'est spécial.

    Mais quand il y a 3 annotations dont certaines "tordues" sur une fonction, en quoi cela remplace t-il une ligne de code dans le constructeur ou la fonction ?

    Exemple :
    @Logger
    private Log logger;


    On ne peut pas faire par exemple Log4j.setLogger(this.logger) dans le constructeur ? (oui, je ne connais pas bien log4j ).
    Si un framework bien particulier propose 3-4 annotations typiques de sa spécifité, ok. Mais je trouve que l'écriture fait un peu blackbox : on sait pas trop ce qu'il y a derrière.

  5. #5
    Expert Confirmé Sénior
    Avatar de Alain Defrance
    Homme Profil pro Alain DEFRANCE
    Project Lead
    Inscrit en
    août 2007
    Messages
    1 994
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain DEFRANCE
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Project Lead

    Informations forums :
    Inscription : août 2007
    Messages : 1 994
    Points : 4 055
    Points
    4 055

    Par défaut

    Citation Envoyé par nicorama Voir le message
    Mais quand il y a 3 annotations dont certaines "tordues" sur une fonction, en quoi cela remplace t-il une ligne de code dans le constructeur ou la fonction ?
    Autant je suis de l'avis de dire que les annotation sont un réel plus à Java, autant je suis de ton avis sur le point où trop d'annotation nuit à la documentation naturelle du code source. On peut un perdre en visibilité et cela peut compliquer la compréhension du code.

  6. #6
    Expert Confirmé Sénior
    Avatar de Baptiste Wicht
    Homme Profil pro Baptiste Wicht
    Étudiant
    Inscrit en
    octobre 2005
    Messages
    7 432
    Détails du profil
    Informations personnelles :
    Nom : Homme Baptiste Wicht
    Âge : 26
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2005
    Messages : 7 432
    Points : 21 236
    Points
    21 236

    Par défaut

    Pour ce qui me concerne, je suis un grand fan des annotations.

    J'utilise régulièrement JPA, Hibernate et Spring et je trouve beaucoup plus agréable et fin une configuration par annotation. Par exemple pour une entité JPA, on voit tout de suite dans la classe les propriétés JPA/Hibernate, on a pas besoin d'aller lire un fichier XML imbitable pour comprendre comment est mappé cette classe.

    Il m'arrive également de créer mes propres annotations, mais c'est vrai que je n'en utilise pas beaucoup.

    Pour ce qui est de la clarté, toutes les annotations que j'utilise (jpa, hibernate, spring, junit et annotations standards) m'ont toujours semblé suffisamment claires. Il est sûr qu'il faut être conscient de ce qui se passe derrière, mais une fois qu'on sait qu'est-ce qui est fait avec une annotation, on ne se pose pas la question.

  7. #7
    Expert Confirmé Sénior
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    décembre 2005
    Messages
    683
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : décembre 2005
    Messages : 683
    Points : 4 696
    Points
    4 696

    Par défaut

    De même que Baptiste, depuis les annotations, le developpement n'a cesse de simplifier le code et la rapidité de ce dernier.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    mai 2004
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2004
    Messages : 1 254
    Points : 1 382
    Points
    1 382

    Par défaut

    Le principe d'une annotation, c'est justement de ne pas savoir ce qu'il y a derrière, juste de ce qu'elle peut faire.

    Personnellement les annotations, je ne pourrais plus m'en passer. Et n'en utiliser que 3 ou 4 du langage alors qu'il peut y en avoir des milliers, ce serait comme n'utiliser que java.lang alors qu'il existe tous les packages à côté.

    Pour ajouter un comportement spécifique via AOP, y'a rien de tel.

    Code :
    1
    2
    3
    4
    5
    6
    @Inject // Guice... Ah que c'est bon.
    @Log({ENTRY,EXIT,THROWING}) //Log de l'entrée, de la sortie de la méthode et d'une éventuelle exception
    @Property // Et hop un firePropertyChange.
    public synchronized void setStatus (@NonNull Status status) { // et pour finir, un peu de validation
      this.status = status;
    }
    Ce genre de code (tiré d'une de mes applications) ne me dérange pas et augmente clairement ma productivité... une fois la fonctionnalité écrite.

  9. #9
    Membre chevronné

    Inscrit en
    février 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : février 2007
    Messages : 122
    Points : 644
    Points
    644

    Par défaut

    Pour moi les annotations apportent d'une part une simplicité de développement, et donc un gain de productivité.
    Mais en plus de ça elles facilitent la relecture du code, on voit tout au niveau de l'objet au lieu de devoir aller regarder dans plusieurs fichiers xml à quoi correspond tel attribut de tel objet.

    C'est beaucoup plus clair, après c'est comme tout il ne faut pas en abuser.

  10. #10
    Membre habitué
    Profil pro Yannick Majoros
    Inscrit en
    janvier 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Nom : Yannick Majoros
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2007
    Messages : 108
    Points : 139
    Points
    139

    Par défaut

    Difficulté de refactoring ? Les annotations font partie du langage et sont très bien comprises par les grands ide. Je ne vois pas en quoi renommer une méthode diffère de renommer une annotation, par exemple. En comparaison, cela peut être un véritable problème en xml, où on ne peut pas garantir le refactoring dans tous les cas.

    Je ne comprends pas trop bien ton argument, "Difficultés de compréhension par l'équipe par rapport à une api standard". Les annotations introduites par une api font partie de l'api, où est le problème ?

  11. #11
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2003
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2003
    Messages : 1 045
    Points : 1 513
    Points
    1 513

    Par défaut

    Pour ma part, j'utilise les annotations assez fréquemment (JPA, Spring, TestNG/JUnit, ...). Je trouve l'outil fort intéressant et puissant. Comme cela est dit plus haut, les IDEs s'en accommodent très bien (refactoring, etc).

    Cependant, je mettrais quand même des bémols : trop d'annotations tuent les annotations. Un fichier source truffé d'annotations (5, 6 voire plus sur un seul élément !) devient assez vite difficilement lisible (avis personnel cependant).

    Par ailleurs, contrairement aux fichiers xml, les annotations sont des éléments de code, donc intrusifs par rapport au sens. Il est plus compliqué de modifier un configuration via les annotations que via un fichier xml (et éventuellement de l'aop). Dans le cas par exemple de JPA, cela ne pose pas réellement de problèmes, on ne modifie pas le modèle sans modifier les classes sous-jacentes. Mais dans le cas d'un logger, dont on donne par annotation le niveau (info, debug, etc.), alors le modifier signifie recompiler... Ce qui est fort dommage.

    Enfin, en utilisant des annotations, on utilise certes des POJOS mais on devient de fait liés à une API particulière (pour JPA, c'est standard donc par de pb, par contre pour Spring par exemple...).

    Pour conclure, je dirais : utilisez les annotations, en prenant en compte les avantages et inconvénients que leur utilisation implique. Si les inconvénients ne vous gênent pas, alors foncez. N'hésitez pas, vous gagnerez du temps, à coup sûr.
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

  12. #12
    Membre du Club
    Inscrit en
    novembre 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : novembre 2005
    Messages : 50
    Points : 41
    Points
    41

    Par défaut

    Citation Envoyé par Patriarch24 Voir le message
    Cependant, je mettrais quand même des bémols : trop d'annotations tuent les annotations. Un fichier source truffé d'annotations (5, 6 voire plus sur un seul élément !) devient assez vite difficilement lisible (avis personnel cependant).

    Par ailleurs, contrairement aux fichiers xml, les annotations sont des éléments de code, donc intrusifs par rapport au sens. Il est plus compliqué de modifier un configuration via les annotations que via un fichier xml (et éventuellement de l'aop).

    Enfin, en utilisant des annotations, on utilise certes des POJOS mais on devient de fait liés à une API particulière (pour JPA, c'est standard donc par de pb, par contre pour Spring par exemple...).
    Personnellement j'essaie d'éviter et je préfère de loin les fichiers XML pour les raisons évoquées par Patriarch24.

  13. #13
    Membre régulier Avatar de Rizzen
    Profil pro Bertrand Merlier
    Inscrit en
    janvier 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Nom : Bertrand Merlier
    Âge : 29

    Informations forums :
    Inscription : janvier 2008
    Messages : 112
    Points : 95
    Points
    95

    Par défaut

    Je suis super pour les annotation mais dans la limite ou c'est utilisé avec discernement et pas à tout bout de chant. comme dit plus haut trop d'annotation tu les annotations mais c'est réellement un plus de Java qui est formidable.
    Java'ldire à tout le monde

  14. #14
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    5 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 5 637
    Points : 7 018
    Points
    7 018

    Par défaut

    Citation Envoyé par Alesque Voir le message
    Personnellement j'essaie d'éviter et je préfère de loin les fichiers XML pour les raisons évoquées par Patriarch24.
    Ben moi, c'est l'inverse... On ne parle pas de XM(HELL) pour rien...

  15. #15
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 512
    Points : 38 224
    Points
    38 224

    Par défaut

    les annotations sont, pour ma part clairement un avantage, mais il faut savoir faire la part entre ce qui est fixé dans le code par annotation et ce qui doit nécessiter une configuration plus souple par fichier xterne. Pour reprendre l'exemple d'hibernate. Quand vous développez un api a usage interne, vous fixez une fois pour toutes vos tables et vos noms de colonne. Les seuls changement qui restent possibles sont structurels (ajout d'un champ/ d'une classe et mapping associé). Dans ce cas, oui aux annotations. Par contre, pour les programmes redistribués, ca deviens plus tendancieux. On a chez nous une application JIRA. Pas accès au code source. Cependant, besoin de faire tourner deux versions différentes de JIRA sur la même base de données. Hop, un coup d'oeil sur le fichier de mapping hibernate et on fait un rename des tous les noms de tables. Si JIRA avait été mappé par annotation, on l'aurais eu bien profond

    Autre exemple, les différentes bases de données. Quand des applications hibernate sont distribuées, il arrive de devoir modifier les fichiers de mapping en fonction du type de base de donnée. Certains noms de colonne ne sont pas autorisés (souvent car trop longs), certaines bases utilisent des sequences, d'autres des autoincrement, il faut donc pouvoir réadapter l'application en fonction de la db sur laquelle elle va tourner, et là, un fichier de mapping, ca deviens indispensable

    edit partiarch: pour les loggers, il me semble que l'idée est d'injecter le logger (d'ou l'annotation), pas de le configurer dans le code, justement. Il reste le fichier de config qui dit quelle logger est configuré comment. Seuls les points d'injection sont annotés
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et
    Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.

  16. #16
    Membre Expert
    Profil pro
    Inscrit en
    mai 2004
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2004
    Messages : 1 254
    Points : 1 382
    Points
    1 382

    Par défaut

    Pour reprendre ton exemple des logs et de leur seuil, il est absurde de définir le niveau d'un log dans une annotation : les annotations, même si elles le permettent, ne devraient pas gérer ce comportement puisqu'il tient plus des préférences de l'utilisateur final. Au pire des cas, elles ne devraient être que des valeurs par défaut.

    Tout ce qui doit être recompilé pour être changé est de la mauvaise utilisation des annotations (parmi les annotations runtime, entendons-nous).

    Le principal problème, c'est que les annotations sont trop méconnues et qu'elles commencent à suivre une sorte de mode "les annotations, c'est cool, utilisez-les !" à outrance, sans discernement entre la bonne et la mauvaise utilisation. On ajoute des annotations sans comprendre qu'on peut en réutiliser. Dans ce contexte, oui, le pullulement des annotations n'est pas une bonne chose. Dans le cas contraire, c'est tout bon.

  17. #17
    Expert Confirmé Sénior
    Avatar de christopheJ
    Profil pro
    Inscrit en
    avril 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : avril 2004
    Messages : 1 612
    Points : 7 991
    Points
    7 991

    Par défaut

    En lisant ce sujet, j'ai l'impression que certains pense qu'il est obligatoire de recompiler pour changer un comportement défini par annotation.

    Un grand nombre d'annotation supporte une surcharge par XML
    Rédacteur - modérateur Java
    Les FAQ Java
    Les cours et tutoriels Java

  18. #18
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2003
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2003
    Messages : 1 045
    Points : 1 513
    Points
    1 513

    Par défaut

    Un grand nombre d'annotation supporte une surcharge par XML
    Ce n'est pas toujours le cas, même si beaucoup de frameworks proposent en effet ce genre de comportement. Sinon, il faut recompiler

    pour les loggers, il me semble que l'idée est d'injecter le logger (d'ou l'annotation), pas de le configurer dans le code, justement.
    Ok, mauvais exemple. Je voulais simplement dire : les annotations, ok, mais pas pour faire n'importe quoi
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

  19. #19
    Invité de passage
    Inscrit en
    mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 3
    Points : 2
    Points
    2

    Par défaut

    Je recommande l'utilisation des annotations.

    Cependant, une chose que j'aimerai éclaircir...
    J'utilise Spring 2.5 avec les annotations stereotypes (@Repository, @Service, @controller)

    Avant cela, l'ensemble des beans gérés par Spring été clairement définit dans un fichier xml. Avec les annotations par contre, nous avons moins de contrôle quant à cela.
    Existe-t-il un outil qui permet de généré un fichier xml avec l'ensemble de nos beans annotés? Ceci afin de retrouver notre liste de beans gérés par Spring...

    Merci.

    Bertrand

  20. #20
    Rédacteur
    Avatar de eclesia
    Inscrit en
    décembre 2006
    Messages
    1 972
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 1 972
    Points : 2 776
    Points
    2 776

    Par défaut

    Je vais faire office de mouton noir parmis cette foule de : ca simplifi, c'est plus rapide, c'est ...etc...

    En fait je suis contre l'usage des annotations, je les vois comme une véritable pollution du code qui marche d'une facon parallele au Java.

    Pour moi, avoir recours aux annotations c'est avoir failli dans la bonne conception de l'application.

    En fait c'est simple si on regarde une API type utilisant les annotations : JAXB.
    Elle enfrain beaucoup des règles de programmations java, acces aux constructeurs, aux variables et aux methodes privées, aucun respect de la portée des classes.
    Ce genre de comportement qui consiste à désactivé les sécurités était jusqu'ici réservé à la sérialization d'object.

    Je vous renvois sur mon opinion de jaxb dont une partie des critiques sont emputables aux annotations : Pensez vous que JaxB a un avenir dans le monde professionnel ?/

    Je ne peux me fier qu'a ce que j'ai expérimenté avec jaxb pour me faire une idée, mais le fait que cette techno soit dans la JVM me fait penser qu'elle utilise tout de même convenablement les annotations.

    Actuellement nos projets utilisent enormement jaxb et des memes classes sont presentes sous plusieurs version XML différente (evolution des normes ISO/OGC).
    Chaque nouvelle version apporte son lot de classes dupliquées avec des annotations différentes, ce qui est particulierement dramatique en volume, à long terme et en maintenance. Le probleme est surement le meme avec hibernate.

    Les annotations ne gerent pas les versions d'annotations ce qui les empeches d'etres viables pour les projets en continuel developpement. Elles ne servent qu'a gagner du temps, et pour les commerciaux le temps c'est de l'argent, ce qui explique l'usage abusif qui en est fait, surtout pour tout ce qui est binding principalement.

    Toutefois tout n'est pas noir, quand il n'y a pas de versions a gérer et qu'il ne s'agit que de mecanique interne à l'application alors ca reste un usage raisonnable.

    le mouton noir

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •