{"id":229009,"date":"2022-10-25T09:58:00","date_gmt":"2022-10-25T06:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229009"},"modified":"2022-11-09T05:17:25","modified_gmt":"2022-11-09T02:17:25","slug":"plusieurs-objets-ecrivant-des-donnees-comment-eviter-cela","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/plusieurs-objets-ecrivant-des-donnees-comment-eviter-cela\/","title":{"rendered":"Plusieurs objets \u00e9crivant des donn\u00e9es\u00a0: comment \u00e9viter cela"},"content":{"rendered":"\n<p>Vous connaissez ces moments o\u00f9 vous travaillez sur un programme, et il y a des endroits dans votre code qui, selon les exigences ou un bogue qui se manifeste d&rsquo;une mani\u00e8re ou d&rsquo;une autre, sont directement li\u00e9s au fait que plusieurs objets \u00e9crivent des donn\u00e9es au m\u00eame magasin de donn\u00e9es\u00a0? Ce n&rsquo;est pas une bonne chose.<\/p>\n<p>C&rsquo;est une fa\u00e7on terrible de commencer un message. Laissez-moi r\u00e9essayer.<\/p>\n<h2>Plusieurs objets \u00e9crivant des donn\u00e9es<\/h2>\n<p>Supposons que vous travaillez sur un programme et que l&rsquo;une des choses que fait le code est de mettre \u00e0 jour un compteur quelque part dans la base de donn\u00e9es pour suivre le nombre de modifications qui se sont produites sur une courte p\u00e9riode de temps.<\/p>\n<p>Le probl\u00e8me\u00a0: vous avez plusieurs endroits dans le code qui mettent \u00e0 jour ce compteur.<\/p>\n<p>Plusieurs objets \u00e9crivant des donn\u00e9es (au cas o\u00f9 mon \u00e9criture serait aussi illisible qu&rsquo;elle le para\u00eet).<\/p>\n<p>Je ne pense pas que beaucoup d&rsquo;entre nous aient d\u00e9cid\u00e9 d&rsquo;\u00e9crire du code comme celui-ci, mais cela arrive, et quand cela arrive, cela finit par avoir tous ces effets secondaires qui engendrent toutes sortes de comportements funky. (Je ne connais pas le terme acad\u00e9mique officiel pour cela &#8211; et je ne veux pas dire <a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">DRY<\/a> &#8211; mais je suis d&rsquo;accord avec le &quot;comportement g\u00e9nial&quot; pour ce post.)<\/p>\n<p>Nous savons intuitivement que nous devrions avoir un endroit unique o\u00f9 tout cela se passe, des facteurs externes &#8211; qu&rsquo;il s&rsquo;agisse d&rsquo;une d\u00e9rive de la port\u00e9e, d&rsquo;un malentendu de notre part pour comprendre les exigences, ou quoi que ce soit &#8211; engendrent un codage m\u00e9diocre.<\/p>\n<p>Nous avons donc toutes ces <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/types-de-publication-wordpress-une-abstraction-pour-les-entites\/\" title=\"entit\u00e9s\">entit\u00e9s<\/a> dans notre syst\u00e8me, chacune parlant \u00e0 un seul point de notre base de donn\u00e9es (ou \u00e0 tout autre magasin de donn\u00e9es de votre choix), mais aucune d&rsquo;entre elles ne sait que d&rsquo;autres lui parlent.<\/p>\n<h2>Configurer les limites<\/h2>\n<p>Nous pouvons essayer de lutter contre cela avec des conditionnels et autres, mais nous ne faisons qu&#8217;empirer les choses. Alors qu&rsquo;est-ce qu&rsquo;on est cens\u00e9 faire ?<\/p>\n<p>Je sais que, comme pour beaucoup de choses en programmation, il existe diff\u00e9rentes fa\u00e7ons de r\u00e9soudre ce probl\u00e8me, mais peut-\u00eatre que l&rsquo;une des premi\u00e8res \u00e9tapes de la refactorisation consiste \u00e0 avoir une classe responsable de la publication des mises \u00e0 jour du magasin de donn\u00e9es.<\/p>\n<p>De cette fa\u00e7on, nous pouvons passer de l&rsquo;illustration ci-dessus \u00e0 quelque chose comme ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167733-61e7a7cc3a1aa.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167733-61e7a7cc3a1aa.png\" alt=\"Plusieurs objets \u00e9crivant des donn\u00e9es\u00a0: comment \u00e9viter cela\" ><\/a><\/p>\n<p>Plusieurs objets \u00e9crivant des donn\u00e9es\u00a0: envoyez-les \u00e0 une sorte de m\u00e9diateur.<\/p>\n<p>C&rsquo;est-\u00e0-dire que toutes les entit\u00e9s sont en communaut\u00e9 avec cet objet et cet objet \u2013 et seul cet objet peut lire et \u00e9crire des donn\u00e9es dans la base de donn\u00e9es.<\/p>\n<p>Il existe quelques <a href=\"https:\/\/sourcemaking.com\/design_patterns\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mod\u00e8les de conception<\/a> qui pourraient r\u00e9pondre \u00e0 ce probl\u00e8me particulier, mais cela sort du cadre de cet article. Au lieu de cela, le point que j&rsquo;essaie de faire valoir est que si vous vous trouvez face \u00e0 un probl\u00e8me de\u00a0:<\/p>\n<ul>\n<li>Les entit\u00e9s \u00e9crivent des donn\u00e9es dans le magasin de donn\u00e9es,<\/li>\n<li>Plusieurs entit\u00e9s le font,<\/li>\n<li>Et cela engendre des cons\u00e9quences involontaires,<\/li>\n<\/ul>\n<p>Essayez ensuite de cr\u00e9er une classe ou un ensemble de classe strictement responsable de la lecture et de l&rsquo;\u00e9criture des donn\u00e9es. Laissez seulement les informations passer \u00e0 travers ces classes plut\u00f4t que d&rsquo;avoir plusieurs classes qui manipulent les donn\u00e9es.<\/p>\n<p>Cela facilite le test, le d\u00e9bogage et finalement la lecture.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le fait que plusieurs objets \u00e9crivent des donn\u00e9es dans un seul magasin de donn\u00e9es \u00e0 plusieurs endroits a des effets secondaires n\u00e9gatifs. Voici un moyen de r\u00e9soudre ce probl\u00e8me.<\/p>\n","protected":false},"author":1,"featured_media":221243,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717],"tags":[1167],"class_list":["post-229009","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229009","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=229009"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229009\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/221243"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229009"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229009"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}