{"id":314,"date":"2013-04-19T10:14:18","date_gmt":"2013-04-19T08:14:18","guid":{"rendered":"http:\/\/www.lafabriquedecode.com\/blog\/?p=314"},"modified":"2013-04-19T10:14:18","modified_gmt":"2013-04-19T08:14:18","slug":"php-quelques-code-smells","status":"publish","type":"post","link":"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/","title":{"rendered":"PHP : quelques code smells"},"content":{"rendered":"<p>Cette expression <em>code smell<\/em>\u00a0a \u00e9t\u00e9 invent\u00e9e par Kent Beck et elle est apparue pour la premi\u00e8re fois dans le livre <a href=\"http:\/\/www.amazon.fr\/Refactoring-Improving-Design-Existing-Code\/dp\/0201485672\" target=\"_blank\">\u00ab\u00a0Refactoring: Improving the Design of Existing\u00a0\u00bb<\/a> de Martin Fowler; signifiant litt\u00e9ralement \u00ab\u00a0odeurs de code\u00a0\u00bb, cette expression peut \u00eatre vue comme mat\u00e9rialisant une \u00ab\u00a0piste olfactive\u00a0\u00bb qui vous indique &#8211; \u00e0 vous, fins limiers du code &#8211; que quelque chose ne va pas dans des d\u00e9veloppements (les v\u00f4tres ou des d\u00e9veloppements h\u00e9rit\u00e9s &#8211; <em>legacy<\/em>). Voici quelques unes de ces \u00ab\u00a0odeurs\u00a0\u00bb que l&rsquo;on rencontre le plus fr\u00e9quemment; j&rsquo;ai parfois utilis\u00e9 des noms \u00ab\u00a0officiels\u00a0\u00bb tout comme des noms que j&#8217;emploie personnellement pour les d\u00e9signer au quotidien.<\/p>\n<p><strong>Les commentaires<\/strong> : les commentaires expliquent bri\u00e8vement ce qui se passe dans le code. Pour reprendre l&rsquo;adage populaire : \u00ab\u00a0Trop de commentaire tue le commentaire\u00a0\u00bb, soyez concis, ne d\u00e9taillez pas le code trop finement, sinon vous paraphrasez !<\/p>\n<p><strong>Le code dupliqu\u00e9<\/strong> : il indique un mauvais design. C&rsquo;est un signe qu&rsquo;il est temps de <em>refactorer<\/em>.<\/p>\n<p><strong>La for\u00eat de \u00ab\u00a0if\u00a0\u00bb<\/strong> : si vous noyez votre code dans une jungle de branchements conditionnels, c&rsquo;est que vous faites fausse route. <em>Refactorez<\/em> l\u00e0 encore en utilisant des designs patterns tels que <em>Strategy<\/em>, par exemple.<\/p>\n<p><strong>La \u00ab\u00a0monstro-classe\u00a0\u00bb<\/strong> : typique du mauvais design, du non respect des <a href=\"http:\/\/www.lafabriquedecode.com\/blog\/?p=118\">principes SOLID<\/a> et en particulier du premier, dit de la <em>Single Responsibility<\/em>. Ces classes font tout, le caf\u00e9, le service, le parking&#8230;Un jour ou l&rsquo;autre vous pairez cher ces 3000 lignes\u00a0d\u2019inepties.<\/p>\n<p><strong>La syllogomanie<\/strong>\u00a0: on conserve du code mort dans de gros pav\u00e9s de commentaires&#8230;sans savoir\u00a0pourquoi&#8230;\u00a0\u00bbau cas o\u00f9\u00a0\u00bb. Et les syst\u00e8mes de gestion de version, \u00e7a sert \u00e0\u00a0quoi\u00a0?<\/p>\n<p><span style=\"line-height: 1.714285714; font-size: 1rem;\"><strong>La foire aux variables d&rsquo;instances<\/strong> : on en cr\u00e9e plein, pour y stocker des valeurs qui ne servent que temporairement \u00e0 l&rsquo;objet, qui du coup enfle et enfle et enfle.<\/span><\/p>\n<p><strong>La classe fant\u00f4me<\/strong> : elle n&rsquo;a pas vraiment d&rsquo;utilit\u00e9, de raison d&rsquo;\u00eatre, elle ne fait rien de significatif ou bien d\u00e9l\u00e8gue l&rsquo;int\u00e9gralit\u00e9 de ses t\u00e2ches. Elle doit \u00eatre impitoyablement \u00e9limin\u00e9e du design.<\/p>\n<p><strong>Le nommage inappropri\u00e9<\/strong> : s&rsquo;applique aux variables ou aux m\u00e9thodes; des exemples vu dans les entreprises pour lesquelles j&rsquo;ai travaill\u00e9 : des m\u00e9thodes nomm\u00e9es \u00ab\u00a0find2\u00a0\u00bb, \u00ab\u00a0find3\u00a0\u00bb et qui faisaient presque la m\u00eame chose que la m\u00e9thode originelle \u00ab\u00a0find\u00a0\u00bb (et les Design Patterns, \u00e7a sert \u00e0 quoi ?), des variables nomm\u00e9es $jb, du nom de leur cr\u00e9ateur, ou $a, $b, $o, des m\u00e9thodes avec des noms horriblement longs et ridicules, comme \u00ab\u00a0faitCeQuilFautPourLeTac()\u00a0\u00bb (tout \u00e7a est vrai, je n&rsquo;invente rien !).<\/p>\n<p><strong>L&rsquo;absence de typage<\/strong> : PHP est faiblement typ\u00e9 comme vous le savez, mais vous pouvez au moins typer les param\u00e8tres d&rsquo;appel des fonctions (objets\/interfaces\/tableaux). Usez en et abusez en pour\u00a0verrouiller\u00a0votre conception objet et ne pas permettre tout et n&rsquo;importe quoi !<\/p>\n<p>Pour aller plus loin :<\/p>\n<p><a href=\"http:\/\/www.industriallogic.com\/wp-content\/uploads\/2005\/09\/smellstorefactorings.pdf\" target=\"_blank\">Smells to refactoring<\/a> (PHP, anglais)<\/p>\n<p><a href=\"http:\/\/thc.org\/root\/phun\/unmaintain.html\" target=\"_blank\">Comment \u00e9crire du code inmaintenable<\/a> (anglais)<\/p>\n<p><a href=\"http:\/\/martinfowler.com\/bliki\/CodeSmell.html\" target=\"_blank\">Code smells<\/a> (anglais)<\/p>\n<p><a href=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/smell.jpg\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-321\" alt=\"smell\" src=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/smell.jpg\" width=\"317\" height=\"264\" srcset=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/smell.jpg 317w, http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/smell-300x249.jpg 300w\" sizes=\"(max-width: 317px) 100vw, 317px\" \/><\/a><\/p>\n<p>Image emprunt\u00e9e au site\u00a0<a href=\"http:\/\/rin-treasure.blogspot.fr\/2012\/05\/how-to-remove-underarm-odor.html\" target=\"_blank\">Rin&rsquo;s treasure<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cette expression code smell\u00a0a \u00e9t\u00e9 invent\u00e9e par Kent Beck et elle est apparue pour la premi\u00e8re fois dans le livre \u00ab\u00a0Refactoring: Improving the Design of Existing\u00a0\u00bb de Martin Fowler; signifiant litt\u00e9ralement \u00ab\u00a0odeurs de code\u00a0\u00bb, cette expression peut \u00eatre vue comme mat\u00e9rialisant une \u00ab\u00a0piste olfactive\u00a0\u00bb qui vous indique &#8211; \u00e0 vous, fins limiers du code &#8211; [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[14,3],"tags":[32,4],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.6.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP : quelques code smells - La Fabrique de code - Tech blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP : quelques code smells - La Fabrique de code - Tech blog\" \/>\n<meta property=\"og:description\" content=\"Cette expression code smell\u00a0a \u00e9t\u00e9 invent\u00e9e par Kent Beck et elle est apparue pour la premi\u00e8re fois dans le livre \u00ab\u00a0Refactoring: Improving the Design of Existing\u00a0\u00bb de Martin Fowler; signifiant litt\u00e9ralement \u00ab\u00a0odeurs de code\u00a0\u00bb, cette expression peut \u00eatre vue comme mat\u00e9rialisant une \u00ab\u00a0piste olfactive\u00a0\u00bb qui vous indique &#8211; \u00e0 vous, fins limiers du code &#8211; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/\" \/>\n<meta property=\"og:site_name\" content=\"La Fabrique de code - Tech blog\" \/>\n<meta property=\"article:published_time\" content=\"2013-04-19T08:14:18+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/smell.jpg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@LaFabrique2Code\" \/>\n<meta name=\"twitter:site\" content=\"@LaFabrique2Code\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/\",\"url\":\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/\",\"name\":\"PHP : quelques code smells - La Fabrique de code - Tech blog\",\"isPartOf\":{\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#website\"},\"datePublished\":\"2013-04-19T08:14:18+00:00\",\"dateModified\":\"2013-04-19T08:14:18+00:00\",\"author\":{\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"http:\/\/www.lafabriquedecode.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP : quelques code smells\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#website\",\"url\":\"http:\/\/www.lafabriquedecode.com\/blog\/\",\"name\":\"La Fabrique de code - Tech blog\",\"description\":\"PHP objet, MySQL, Design Patterns, OOP...et plus !\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/www.lafabriquedecode.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g\",\"contentUrl\":\"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g\",\"caption\":\"admin\"},\"url\":\"http:\/\/www.lafabriquedecode.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP : quelques code smells - La Fabrique de code - Tech blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/","og_locale":"fr_FR","og_type":"article","og_title":"PHP : quelques code smells - La Fabrique de code - Tech blog","og_description":"Cette expression code smell\u00a0a \u00e9t\u00e9 invent\u00e9e par Kent Beck et elle est apparue pour la premi\u00e8re fois dans le livre \u00ab\u00a0Refactoring: Improving the Design of Existing\u00a0\u00bb de Martin Fowler; signifiant litt\u00e9ralement \u00ab\u00a0odeurs de code\u00a0\u00bb, cette expression peut \u00eatre vue comme mat\u00e9rialisant une \u00ab\u00a0piste olfactive\u00a0\u00bb qui vous indique &#8211; \u00e0 vous, fins limiers du code &#8211; [&hellip;]","og_url":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/","og_site_name":"La Fabrique de code - Tech blog","article_published_time":"2013-04-19T08:14:18+00:00","og_image":[{"url":"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/smell.jpg"}],"author":"admin","twitter_card":"summary","twitter_creator":"@LaFabrique2Code","twitter_site":"@LaFabrique2Code","twitter_misc":{"\u00c9crit par":"admin","Dur\u00e9e de lecture estim\u00e9e":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/","url":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/","name":"PHP : quelques code smells - La Fabrique de code - Tech blog","isPartOf":{"@id":"http:\/\/www.lafabriquedecode.com\/blog\/#website"},"datePublished":"2013-04-19T08:14:18+00:00","dateModified":"2013-04-19T08:14:18+00:00","author":{"@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162"},"breadcrumb":{"@id":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/php-quelques-code-smells\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"http:\/\/www.lafabriquedecode.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PHP : quelques code smells"}]},{"@type":"WebSite","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#website","url":"http:\/\/www.lafabriquedecode.com\/blog\/","name":"La Fabrique de code - Tech blog","description":"PHP objet, MySQL, Design Patterns, OOP...et plus !","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/www.lafabriquedecode.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162","name":"admin","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/image\/","url":"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g","contentUrl":"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g","caption":"admin"},"url":"http:\/\/www.lafabriquedecode.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/314"}],"collection":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/comments?post=314"}],"version-history":[{"count":8,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/314\/revisions"}],"predecessor-version":[{"id":323,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/314\/revisions\/323"}],"wp:attachment":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/media?parent=314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/categories?post=314"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/tags?post=314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}