{"id":64,"date":"2007-12-19T13:58:45","date_gmt":"2007-12-19T12:58:45","guid":{"rendered":"http:\/\/loicmathieu.free.fr\/wordpress\/?p=64"},"modified":"2008-05-16T18:39:35","modified_gmt":"2008-05-16T17:39:35","slug":"convention-over-configuration","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/convention-over-configuration\/","title":{"rendered":"convention over configuration"},"content":{"rendered":"<p>\u00ab\u00a0<strong>Convention over Configuration<\/strong>\u00a0\u00bb (on trouve parfois une traduction par \u00ab\u00a0convention plut\u00f4t que configuration), ce design pattern (ou patron de conception, pour faire plaisir aux francophones intransigeant) est un des plus int\u00e9r\u00e9ssant de ceux \u00e0 la mode en ce moment.<\/p>\n<p>Le principe en est tr\u00e8s simple:  les applications se basent sur des conventions au lieu de se baser sur des fichiers (ou autre) de configuration.<\/p>\n<p>Plus clairement:<\/p>\n<ul><li>R\u00e9duire le nombre de fichiers de configuration<\/li>\n\n<li><em>Configurer par d\u00e9faut<\/em> les applications (donc, sans aucun fichiers, base de donn\u00e9es ou autres stockant ces informations de configuration)  en se basant sur les standard (les conventions) du milieux<\/li>\n\n<li>Possibilit\u00e9 d&rsquo;\u00e9craser cette configuration par convention par un fichier de configuration : l&rsquo;application se configure toute seule en se basant sur des conventions, et si n\u00e9cessaire, on peut \u00e9craser cette configuration par d\u00e9faut via des informations de configurations dans un fichiers de configuration (ou base de donn\u00e9es ou autre).<\/li>\n<\/ul>\n<p>Ce principe est la base de certains frameworks dont:<\/p>\n<ul><li><a href=\"http:\/\/www.rubyonrails.org\/\" target=\"_blank\">Ruby On Rails<\/a> (RoR) : bas\u00e9 sur le language <a href=\"http:\/\/www.ruby-lang.org\/fr\/\" target=\"_blank\">Ruby<\/a>, ce framework exploite totalement ce design pattern en proposant des comportements par d\u00e9faut pour toutes les fonctionnalit\u00e9s. Il permet donc en quelques sorte de &lsquo;g\u00e9n\u00e9rer&rsquo; une application web CRUD (Create-Read-Update-Delete) depuis une simple description d&rsquo;un objet.<a href=\"http:\/\/www.ruby-lang.org\/fr\/\" target=\"_blank\">\n<\/a><\/li>\n\n<li><a href=\"http:\/\/www.trailsframework.org\/\" target=\"_blank\">Trails<\/a> : framework de d\u00e9veloppement JAVA bas\u00e9 sur le principe de Ruby On Rails<\/li>\n\n<li><a href=\"http:\/\/appfuse.org\/display\/APF\/Home\" target=\"_blank\">AppFuse<\/a> : d\u00e9crire AppFuse est assez compliqu\u00e9, de plus je ne l&rsquo;ai que bri\u00e8vement test\u00e9. En gros, c&rsquo;est un g\u00e9n\u00e9rateur de squelette de projets. Il permet tr\u00e8s facilement de g\u00e9n\u00e9rer un squelette de projet (un esp\u00e8ce de projet &lsquo;vide&rsquo;) pr\u00eat au d\u00e9veloppement bas\u00e9 sur un ensemble de framework reconnue (tel que Spring et Hibernate). Il se base sur des convention pour pr\u00e9-configurer ces squelettes de projets.<\/li>\n<\/ul>\n<p>D&rsquo;un certain cot\u00e9, l&rsquo;utilisation de <a href=\"http:\/\/www.springframework.org\/\" target=\"_blank\">Spring <\/a>permet aussi de mettre en pratique plus facilement ce design pattern car il comprend, pour beaucoup de partie du framework, une configuration par d\u00e9faut qui peut \u00eatre r\u00e9-\u00e9crite au moyen de son fichier de configuration. Bien que n&rsquo;\u00e9tant pas bas\u00e9 sur ce principe il l&rsquo;utilise et en simplifie sa mise en place par ses possibilit\u00e9 de centralisation de configuration, sa gestion de l&rsquo;AOP et ses nombreuses classes de support qui permettent une utilisation simplifi\u00e9 et <em>conventionnelle <\/em>de nombreux framework tiers.<\/p>\n<p>Java lui-m\u00eame donne un moyen tr\u00e8s puissant gr\u00e2ce aux annotations pour mettre en pratique ce design pattern, en effet, via les annotations on peut mettre en place un comportement par d\u00e9faut de certaines classes puis, via les fichiers de configuration r\u00e9-\u00e9crire si n\u00e9cessaire ce comportement par d\u00e9faut (c&rsquo;est, par exemple, ce que fait Spring qui peut se configurer via les annotation et ses fichiers de configuration, la configuration par fichier r\u00e9-\u00e9crivant celles par annotations). L&rsquo;utilisation des annotations dans le sens de <em>convention<\/em> et non pas <em>configuration<\/em> coupl\u00e9 \u00e0 l&rsquo;utilisation d&rsquo;un fichier de configuration est une mani\u00e8re simple de mettre en place un design pattern convention over configuration. Car il ne faut pas oublier que pour \u00eatre efficace, il faut la plupart du temps pourvoir r\u00e9-\u00e9crire ces conventions via des iformations de configuration (on parle donc de convention qui repr\u00e9sentent une configuration <em>par d\u00e9faut<\/em>)<\/p>\n<p>L&rsquo;AOP (Aspect Oriented Programming ou en fran\u00e7ais: Programmation par Aspect &#8211; POA &#8211; Programmation Orient\u00e9 Aspect) peut aussi tr\u00e9s souvent aider \u00e0 d\u00e9finir des comportements par d\u00e9faut de l&rsquo;application, dans ce sens, l&rsquo;AOP est une aide formidable pour mettre en pratique ce pattern.\nOn peut par exemple, d\u00e9finir que toute la couche de service, par d\u00e9faut, est mis en cache gr\u00e2ce \u00e0 un aspect; les annotations nous permettant alors de d\u00e9finir certains services qui ne devront pas \u00eatre mis en cache. Gr\u00e2ce \u00e0 l&rsquo;AOP je d\u00e9finit une convention plut\u00f4t qu&rsquo;une configuration, les annotations me permettant, si n\u00e9cessaire, d&rsquo;introduire des exception (qui sont aussi, d&rsquo;une certaine mani\u00e8re une convention : mon annotation <a>@noCache<\/strong>strong&gt;@noCache&lt;\/strong<\/a> \u00e9tant une convention pour exclure un service du cache). Et dire qu&rsquo;avant je devait d\u00e9finir dans un fichier de configuration les m\u00e9thodes cach\u00e9 et non cach\u00e9 une par une &#8230;<\/p>\n<p>Un des plus gros avantage d&rsquo;appliquer ce pattern est de r\u00e9duire \u00e9norm\u00e9ment la taille de vos fichiers de configuration et d&rsquo;accro\u00eetre la lisibilit\u00e9 de votre code en utilisant des conventions de d\u00e9veloppement.<\/p>","protected":false},"excerpt":{"rendered":"<p>\u00ab\u00a0Convention over Configuration\u00a0\u00bb (on trouve parfois une traduction par \u00ab\u00a0convention plut\u00f4t que configuration), ce design pattern (ou patron de conception, pour faire plaisir aux francophones intransigeant) est un des plus int\u00e9r\u00e9ssant de ceux \u00e0 la mode en ce moment. Le principe en est tr\u00e8s simple: les applications se basent sur des conventions au lieu de se baser sur des fichiers (ou autre) de configuration. Plus clairement: R\u00e9duire le nombre de fichiers de configuration Configurer par d\u00e9faut les applications (donc, sans&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/convention-over-configuration\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[16,17,151,11,18],"class_list":["post-64","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-conception","tag-design-pattern","tag-informatique","tag-java","tag-patron-de-conception"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":19,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/ruby-on-rails\/","url_meta":{"origin":64,"position":0},"title":"Ruby on Rails","author":"admin","date":"jeudi 15 f\u00e9vrier 2007","format":false,"excerpt":"Bonjour, d'habitude au ton bucolique des vacances ou revendicatif des coups de gueules, aujourd'hui le ton de ce post va \u00eatre technophile. En effet, je bosse dans l'informatique qui est donc un de mes centre d'int\u00e9r\u00eat, et je vous livre ici mon premier message sur les nouvelles technologies. J'ai tester\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":40,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/integration-continue\/","url_meta":{"origin":64,"position":1},"title":"Int\u00e9gration Continue avec Cruise Control","author":"admin","date":"mercredi 14 novembre 2007","format":false,"excerpt":"Derni\u00e8rement, j'ai essay\u00e9 un serveur d'int\u00e9gration continue : Cruise Control. Je vais donc vous en parler ici. Tout d'abord, qu'est-ce que l'int\u00e9gration continue: L'int\u00e9gration continue est une technique de d\u00e9veloppement\/management de projet qui implique d'int\u00e9grer tr\u00e8s fr\u00e9quemment le travail de tout les membres. Ensuite, une compilation automatique doit \u00eatre lanc\u00e9\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1353,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/quarkus-tip-comment-ne-pas-creer-une-extension-quarkus\/","url_meta":{"origin":64,"position":2},"title":"Quarkus Tip : Comment NE PAS cr\u00e9er une extension Quarkus","author":"admin","date":"mardi 16 novembre 2021","format":false,"excerpt":"Quand on d\u00e9veloppe une application compos\u00e9e de plusieurs composants, il est fr\u00e9quent de vouloir partager du code dans une librairie externe, par exemple via un JAR externe int\u00e9gr\u00e9 comme une d\u00e9pendance de vos composants. Quarkus est un framework d'extension, chaque extension qu'il propose permet d'int\u00e9grer une technologie (client BDD, framework\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":39,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/sitemesh-gerer-son-layout-sans-douleur\/","url_meta":{"origin":64,"position":3},"title":"Sitemesh : g\u00e9rer son layout sans douleur","author":"admin","date":"vendredi  6 juillet 2007","format":false,"excerpt":"Sitemesh permet de g\u00e9rer facilement le layout des application web JAVA. Une petite description de comment il marche.","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":604,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/kerberos-authentification-avec-springsecurity\/","url_meta":{"origin":64,"position":4},"title":"Authentification Kerberos avec SpringSecurity","author":"admin","date":"jeudi 17 ao\u00fbt 2017","format":false,"excerpt":"Introduction J'ai r\u00e9cemment impl\u00e9ment\u00e9 une authentification (automatique) avec Kerberos. Ce protocole permet d'authentifier automatiquement un utilisateur depuis sa session utilisateur (session windows par exemple). Via Kerberos, on authentifie donc un utilisateur sans lui demander son mot de passe ce qui est un plus (il n'a pas \u00e0 se re-logguer :\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1375,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-18-quoi-de-neuf\/","url_meta":{"origin":64,"position":5},"title":"Java 18 : quoi de neuf ?","author":"admin","date":"mardi  4 janvier 2022","format":false,"excerpt":"Maintenant que Java 18 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/64","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=64"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/64\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=64"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=64"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=64"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}