|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre Expert
![]() ![]() Inscription : juillet 2006 Messages : 765 ![]() |
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 :
Bref, créez-vous vos propres annotations, et êtes-vous content d'avoir des frameworks pleines d'annotations ?
__________________
Robusta Web Library : Clients RESTful open source pour Java, Android & GWT. API Simple et Productive. Avec style. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() |
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.
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1 Project Lead eXo Social Java Black Belt - Java Black Belt Coach |
|
00
|
|
|
#3 | |
![]() ![]() Inscription : novembre 2006 Messages : 5 087 ![]() |
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... Citation:
|
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : juillet 2006 Messages : 765 ![]() |
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.
__________________
Robusta Web Library : Clients RESTful open source pour Java, Android & GWT. API Simple et Productive. Avec style. |
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() ![]() |
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.
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1 Project Lead eXo Social Java Black Belt - Java Black Belt Coach |
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() |
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.
__________________
Tous mes tutos (Java, PHP, SQL-Server, Hardware) - Mon blog anglais JTheque - Site - Forum |
|
00
|
|
|
#7 |
![]() ![]() Ingénieur développement logiciels Inscription : décembre 2005 Messages : 685 ![]() |
De même que Baptiste, depuis les annotations, le developpement n'a cesse de simplifier le code et la rapidité de ce dernier.
|
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 253 ![]() |
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 :
|
||
|
|
00
|
|
|
#9 |
|
Membre expérimenté
![]() ![]() |
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. |
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Yannick Majoros Inscription : janvier 2007 Messages : 72 ![]() |
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 ? |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() |
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 ! |
|
00
|
|
|
#12 | |
|
Nouveau Membre du Club
![]() Inscription : novembre 2005 Messages : 51 ![]() |
Citation:
|
|
|
|
00
|
|
|
#13 |
|
Membre régulier
![]() |
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 |
|
|
00
|
|
|
#14 |
![]() ![]() Inscription : novembre 2006 Messages : 5 087 ![]() |
|
|
|
00
|
|
|
#15 |
|
Expert Confirmé Sénior
![]() ![]() |
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
__________________
⥀⥁ Чиз 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. |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 253 ![]() |
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. |
|
|
00
|
|
|
#17 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : avril 2004 Messages : 1 620 ![]() |
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 |
|
|
00
|
|
|
#18 | ||
|
Membre Expert
![]() ![]() |
Citation:
Citation:
__________________
En premier lieu, utilisez un moteur de recherche. En second lieu, postez sur le forum adéquat ! |
||
|
00
|
|
|
#19 |
|
Invité de passage
![]() Inscription : mars 2009 Messages : 3 ![]() |
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 |
|
|
00
|
|
|
#20 |
![]() ![]() Inscription : décembre 2006 Messages : 1 877 ![]() |
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
__________________
Systèmes d'Informations Géographiques- Projets : GeoAPI GeotoolKit PuzzleGISPour un monde sans BigBrother IxQuick ni censure RSF |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com