{"id":229379,"date":"2022-11-02T18:41:00","date_gmt":"2022-11-02T15:41:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229379"},"modified":"2022-11-09T06:45:48","modified_gmt":"2022-11-09T03:45:48","slug":"lamorce-du-modele-de-referentiel","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/lamorce-du-modele-de-referentiel\/","title":{"rendered":"L&rsquo;amorce du mod\u00e8le de r\u00e9f\u00e9rentiel"},"content":{"rendered":"\n<p>Chaque fois que vous travaillez sur un projet plus important bas\u00e9 sur WordPress, les chances que vous travailliez avec plus d&rsquo;une source de donn\u00e9es, c&rsquo;est-\u00e0-dire la base de donn\u00e9es WordPress, sont plus \u00e9lev\u00e9es que la normale. Par exemple, vous travaillez peut-\u00eatre sur un projet qui doit coordonner des informations provenant de\u00a0:<\/p>\n<ul>\n<li>la base de donn\u00e9es WordPress,<\/li>\n<li>un syst\u00e8me de ticket d&rsquo;assistance,<\/li>\n<li>un syst\u00e8me d&rsquo;importation de contenu,<\/li>\n<li>une autre API tierce,<\/li>\n<li>et \u00e9ventuellement plus.<\/li>\n<\/ul>\n<p>Et lorsque cela se produit, il peut devenir un peu fastidieux d&rsquo;\u00e9crire du code qui facilite la r\u00e9cup\u00e9ration d&rsquo;informations \u00e0 partir de ces diff\u00e9rents endroits. C&rsquo;est ce dont les d\u00e9veloppeurs parlent g\u00e9n\u00e9ralement lorsqu&rsquo;ils se r\u00e9f\u00e8rent \u00e0 la gestion des &quot;couches&quot; dans leur application.<\/p>\n<ul>\n<li>il y a des couches pour pr\u00e9senter des informations \u00e0 l&rsquo;utilisateur, des<br \/>\ncouches pour g\u00e9rer la logique m\u00e9tier (ou logique de domaine),<\/li>\n<li>des couches pour communiquer avec les API,<\/li>\n<li>et des couches pour stocker des donn\u00e9es.<\/li>\n<\/ul>\n<p>Honn\u00eatement, vous n&rsquo;avez pas besoin d&rsquo;avoir une vari\u00e9t\u00e9 de magasins de donn\u00e9es \u00e0 surveiller pour cr\u00e9er une couche qui facilite l&rsquo;envoi et la r\u00e9cup\u00e9ration des donn\u00e9es de la base de donn\u00e9es, c&rsquo;est juste quand c&rsquo;est plus courant. Vous pouvez tout aussi efficacement travailler avec un seul magasin de donn\u00e9es, comme la base de donn\u00e9es WordPress, lors de la mise en \u0153uvre du mod\u00e8le de r\u00e9f\u00e9rentiel.<\/p>\n<p>Quoi qu&rsquo;il en soit, si vous cr\u00e9ez un site Web, une application Web ou un plug-in de plus grande taille, la mise en \u0153uvre du mod\u00e8le de r\u00e9f\u00e9rentiel peut s&rsquo;av\u00e9rer payante en termes de maintenance, de clart\u00e9 du code et de s\u00e9paration des pr\u00e9occupations.<\/p>\n<p>Mais comment cela pourrait-il \u00eatre impl\u00e9ment\u00e9 dans WordPress? Ce n&rsquo;est pas tr\u00e8s difficile, mais d&rsquo;abord, cela vaut la peine de revoir une introduction au r\u00e9f\u00e9rentiel avant de sauter dans n&rsquo;importe quel code.<\/p>\n<h2>Une introduction au mod\u00e8le de r\u00e9f\u00e9rentiel<\/h2>\n<p>Avant d&rsquo;examiner une impl\u00e9mentation r\u00e9elle dans WordPress, il est important de comprendre ce qu&rsquo;est le r\u00e9f\u00e9rentiel, comment il est d\u00e9fini, ce qu&rsquo;il propose et une impl\u00e9mentation g\u00e9n\u00e9rique de celui-ci. Je partagerai quelques lectures suppl\u00e9mentaires \u00e0 la fin de l&rsquo;article, mais jusque-l\u00e0, je couvrirai ici mon point de vue g\u00e9n\u00e9ral sur le mod\u00e8le.<\/p>\n<p>Tout d&rsquo;abord, une mise en \u0153uvre de ce mod\u00e8le peut devenir plus compliqu\u00e9e que n\u00e9cessaire pour les d\u00e9butants. Cela ne veut pas dire que le mod\u00e8le r\u00e9el ne vaut pas la peine d&rsquo;\u00eatre compris, mais si vous cherchez simplement \u00e0 vous mouiller avec cela, je ne suis pas fan de jeter les lecteurs dans les profondeurs. Je ne pense pas que ce soit la meilleure fa\u00e7on d&rsquo;apprendre.<\/p>\n<p>Au lieu de cela, cela vaut la peine de d\u00e9composer le probl\u00e8me puis de le reconstruire en quelque chose d&rsquo;un peu plus \u00e9l\u00e9gant. C&rsquo;est donc ce que je vais essayer de faire.<\/p>\n<h3>Un mot sur le d\u00e9couplage<\/h3>\n<p>Quand on parle de programmation orient\u00e9e objet, on parle souvent de l&rsquo;id\u00e9e de &quot;d\u00e9coupler&quot; des parties du syst\u00e8me. Si vous \u00eates familier avec le <a href=\"https:\/\/8thlight.com\/blog\/uncle-bob\/2014\/05\/08\/SingleReponsibilityPrinciple.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">couplage et la coh\u00e9sion<\/a>, alors vous savez pourquoi.<\/p>\n<p>Mais si ce n&rsquo;est pas le cas, il suffit de dire que plus les composants de votre syst\u00e8me sont coupl\u00e9s, plus ils sont difficiles \u00e0 modifier. Ils en savent trop l&rsquo;un sur l&rsquo;autre. C&rsquo;est-\u00e0-dire que si vous changez l&rsquo;un des aspects du syst\u00e8me, cela va probablement se r\u00e9percuter en cascade ou avoir un impact sur une autre partie du syst\u00e8me que vous n&rsquo;auriez jamais voulu voir se produire. Ensuite, vous devez passer beaucoup plus de temps \u00e0 r\u00e9parer tous ces autres &quot;points de contact&quot; dans le syst\u00e8me qui ne devraient pas \u00eatre n\u00e9cessaires.<\/p>\n<p>La mise en \u0153uvre de diverses strat\u00e9gies, comme le mod\u00e8le de r\u00e9f\u00e9rentiel, peut aider \u00e0 d\u00e9coupler des parties du syst\u00e8me. Exemple concret\u00a0: la couche de pr\u00e9sentation ne sait pas comment le magasin de donn\u00e9es sous-jacent est organis\u00e9. Il n&rsquo;a pas besoin de conna\u00eetre SQL. Il n&rsquo;a pas besoin de savoir qu&rsquo;il s&rsquo;agit d&rsquo;une base de donn\u00e9es. Au lieu de cela, il a juste besoin de savoir comment parler au r\u00e9f\u00e9rentiel.<\/p>\n<p>Bonne droite?<\/p>\n<p>Cela signifie que vous pouvez \u00e9changer le magasin de donn\u00e9es principal et, en supposant que votre API est solide\u00a0; votre application continuera \u00e0 fonctionner avec peu ou pas de changement. Et c&rsquo;est ce que cela signifie d&rsquo;\u00eatre vraiment d\u00e9coupl\u00e9.<\/p>\n<h3>Une impl\u00e9mentation du mod\u00e8le de r\u00e9f\u00e9rentiel<\/h3>\n<p>Alors, \u00e0 quoi ressemble le mod\u00e8le de r\u00e9f\u00e9rentiel\u00a0? Comme pour la plupart des mod\u00e8les de conception, il existe une forme g\u00e9n\u00e9rique du mod\u00e8le, et c&rsquo;est toujours utile, mais je pense que cela aide \u00e9galement ceux d&rsquo;entre nous qui travaillent dans WordPress \u00e0 voir comment cela pourrait fonctionner dans le contexte de, vous savez, WordPress.\u00a0<\/p>\n<p>Donc, d&rsquo;abord, je veux d\u00e9composer le mod\u00e8le lui-m\u00eame, puis donner un exemple de ce \u00e0 quoi il pourrait ressembler lorsque vous travaillez avec WordPress.<\/p>\n<h3>Une impl\u00e9mentation g\u00e9n\u00e9rique du mod\u00e8le de r\u00e9f\u00e9rentiel<\/h3>\n<p>L&rsquo;impl\u00e9mentation r\u00e9elle du mod\u00e8le de r\u00e9f\u00e9rentiel est assez simple. En fait, je ne suis jamais s\u00fbr que ce soit si utile, car cela montre simplement comment les magasins de donn\u00e9es, le r\u00e9f\u00e9rentiel et le reste de l&rsquo;application interagissent les uns avec les autres.<\/p>\n<p>Ne vous m\u00e9prenez pas: je suis pour les mod\u00e8les conceptuels de la fa\u00e7on dont les choses sont organis\u00e9es. Personnellement, cela m&rsquo;aide \u00e0 r\u00e9fl\u00e9chir \u00e0 la structure d&rsquo;une application lors de sa construction, mais si c&rsquo;est trop g\u00e9n\u00e9ral, ce n&rsquo;est pas d&rsquo;une grande aide.<\/p>\n<p>Mais pour arriver \u00e0 un outil concret, il faut bien commencer quelque part, n&rsquo;est-ce pas? Donc, je vais commencer au plus haut niveau possible et travailler vers le bas.<\/p>\n<p>Comme vous pouvez le voir dans l&rsquo;image ci-dessus, vous avez quelques magasins de donn\u00e9es qui sont tous lus via le r\u00e9f\u00e9rentiel, puis l&rsquo;application interroge le r\u00e9f\u00e9rentiel qui, \u00e0 son tour, r\u00e9cup\u00e8re les informations du magasin de donn\u00e9es.<\/p>\n<p>Oui, il existe des options pour mettre en cache les informations, invalider le cache et toutes ces choses amusantes. Mais cela sort du cadre d&rsquo;un primaire du r\u00e9f\u00e9rentiel. Je ne vais donc pas m&rsquo;engager dans cette voie particuli\u00e8re pour l&rsquo;instant. Peut-\u00eatre dans un prochain post (si celui-ci s&rsquo;av\u00e8re utile pour vous).<\/p>\n<h2>Le mod\u00e8le de r\u00e9f\u00e9rentiel dans WordPress<\/h2>\n<p>Cela dit, examinons une impl\u00e9mentation de base de ce \u00e0 quoi cela pourrait ressembler dans une installation WordPress standard. Autrement dit, tout ce que nous avons est le magasin de donn\u00e9es. Nous ne communiquons avec rien d&rsquo;autre, mais nous voulons nous assurer que tout ce qui s&rsquo;interface avec la base de donn\u00e9es ou l&rsquo;API est g\u00e9r\u00e9 par le r\u00e9f\u00e9rentiel<\/p>\n<p>Cela ressemblerait \u00e0 ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166793-61e79a689f876.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-166793-61e79a689f876.png\" alt=\"L&#039;amorce du mod\u00e8le de r\u00e9f\u00e9rentiel\" ><\/a><\/p>\n<p>\u00c0 quoi cela pourrait ressembler avec WordPress<\/p>\n<p>Et cela peut \u00eatre encore plus abstrait. Peut-\u00eatre y a-t-il un d\u00e9p\u00f4t de publication ou un d\u00e9p\u00f4t d&rsquo;utilisateurs. Personnellement, je suis fan d&rsquo;avoir un r\u00e9f\u00e9rentiel pour chaque type d&rsquo;entit\u00e9 car cela aide \u00e0 contenir la logique m\u00e9tier associ\u00e9e sans cr\u00e9er ces grandes classes qui savent tout (et inutilement).<\/p>\n<p>Cela pourrait donc ressembler \u00e0 ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166793-61e79a6e78654.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-166793-61e79a6e78654.png\" alt=\"L&#039;amorce du mod\u00e8le de r\u00e9f\u00e9rentiel\" ><\/a><\/p>\n<p>Un ensemble de r\u00e9f\u00e9rentiels<\/p>\n<p>Prenons ensuite un niveau suppl\u00e9mentaire et disons que vous travaillez avec l&rsquo;API Twitter, l&rsquo;API ZenDesk, l&rsquo;API utilisateur WordPress et l&rsquo;API WordPress Post. Alors quoi? Il y a plus de d\u00e9p\u00f4ts.<\/p>\n<p>Peut-\u00eatre qu&rsquo;ils sont contenus dans leur espace de noms (ce qu&rsquo;ils devraient \u00eatre), peut-\u00eatre qu&rsquo;ils impl\u00e9mentent une interface commune (pour laquelle il y a un cas pour cela), mais pendant le temps de d\u00e9veloppement, je pense qu&rsquo;il est important d&rsquo;indiquer explicitement quel r\u00e9f\u00e9rentiel vous utilisez donc pour \u00eatre le plus clair possible.<\/p>\n<p>Autrement dit, n&rsquo;utilisez pas de g\u00e9n\u00e9rique et laissez le runtime le comprendre\u00a0:<\/p>\n<pre><code>$support_repository = new Support_Repository();\n$support_repository-&gt;get_tickets_for( 'tommcfarlin' );<\/code><\/pre>\n<p>Soyez plut\u00f4t explicite :<\/p>\n<pre><code>$zendesk_repository = new ZenDesk_Repository();\n$zendesk_repository-&gt;get_tickets_from( 'yesterday' );<\/code><\/pre>\n<p>Cela peut sembler beaucoup. Je ne sais pas si vous rencontrez cela, mais il y a un sentiment \u00e9trange dans la programmation orient\u00e9e objet o\u00f9 nous voulons cr\u00e9er les petites classes cibl\u00e9es mais cela cr\u00e9e beaucoup de fichiers.<\/p>\n<p>Vous avez donc ces fichiers soigneusement configur\u00e9s, chacun faisant quelque chose de petit et de utile. Ne laissez pas le nombre de fichiers qui composent un projet donner l&rsquo;impression que vous avez une mauvaise architecture.<\/p>\n<h2>Conclusion<\/h2>\n<p>Ceci est l&rsquo;amorce du mod\u00e8le de r\u00e9f\u00e9rentiel. Naturellement, il y a du code qui va avec, mais avant de plonger dans cette partie &#8211; parce que le code est l&rsquo;endroit o\u00f9 les choses se perdent facilement dans la traduction &#8211; je voulais m&rsquo;assurer d&rsquo;avoir aid\u00e9 \u00e0 fournir une illustration pour d\u00e9velopper un mod\u00e8le conceptuel du fonctionnement du mod\u00e8le.<\/p>\n<p>\u00c0 partir de l\u00e0, nous pouvons commencer \u00e0 parler d&rsquo;une impl\u00e9mentation du mod\u00e8le. Donc, au cours du prochain article ou des deux prochains articles, je vais faire exactement cela.<\/p>\n<p>En attendant, n&rsquo;h\u00e9sitez pas \u00e0 laisser des commentaires ou des questions sur ce qui a \u00e9t\u00e9 couvert ici.<\/p>\n<h2>Lecture connexe<\/h2>\n<ul>\n<li><a href=\"https:\/\/8thlight.com\/blog\/mike-ebert\/2013\/03\/23\/the-repository-pattern.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Le mod\u00e8le de r\u00e9f\u00e9rentiel via la 8e lumi\u00e8re<\/a><\/li>\n<li><a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ff649690.aspx\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Le mod\u00e8le de r\u00e9f\u00e9rentiel via MSDN<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/clean\/repository\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Une impl\u00e9mentation du mod\u00e8le de r\u00e9f\u00e9rentiel<\/a><\/li>\n<\/ul>\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>L&rsquo;impl\u00e9mentation du mod\u00e8le de r\u00e9f\u00e9rentiel n&rsquo;est pas tr\u00e8s difficile, mais cela vaut la peine de revoir une introduction au r\u00e9f\u00e9rentiel avant de sauter dans n&rsquo;importe quel code.<\/p>\n","protected":false},"author":1,"featured_media":223973,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,717,841],"tags":[1167],"class_list":["post-229379","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229379","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=229379"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229379\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223973"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}