{"id":229387,"date":"2022-11-03T19:39:00","date_gmt":"2022-11-03T16:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229387"},"modified":"2022-11-09T06:48:07","modified_gmt":"2022-11-09T03:48:07","slug":"avantages-du-modele-de-referentiel-pourquoi-devrions-nous-lenvisager","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/avantages-du-modele-de-referentiel-pourquoi-devrions-nous-lenvisager\/","title":{"rendered":"Avantages du mod\u00e8le de r\u00e9f\u00e9rentiel\u00a0: pourquoi devrions-nous l&rsquo;envisager\u00a0?"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/lamorce-du-modele-de-referentiel\/\" title=\"Hier\" >Hier<\/a>, j&rsquo;ai donn\u00e9 une amorce sur le mod\u00e8le de r\u00e9f\u00e9rentiel. En bref, c&rsquo;est l&rsquo;un de ces mod\u00e8les que je pense que toute personne travaillant sur un middleware construit sur WordPress devrait comprendre.<\/p>\n<p>Lorsque vous donnez une introduction \u00e0 un motif comme celui-ci, il peut \u00eatre difficile de rendre justice au motif lorsque vous devez\u00a0:<\/p>\n<ul>\n<li>le pr\u00e9senter,<\/li>\n<li>expliquer comment \u00e7a marche,<\/li>\n<li>couvrir les prestations,<\/li>\n<li>et faire une petite d\u00e9mo.<\/li>\n<\/ul>\n<p>Mais le v\u00e9ritable avantage du r\u00e9f\u00e9rentiel r\u00e9side non seulement dans l&rsquo;abstraction de la couche de donn\u00e9es du reste de l&rsquo;application, mais aussi dans le fait qu&rsquo;elle peut (ou devrait) pouvoir \u00eatre facilement \u00e9chang\u00e9e avec divers magasins de donn\u00e9es sans changer l&rsquo;API.<\/p>\n<p>Par exemple, dans un cas, vous devrez peut-\u00eatre r\u00e9cup\u00e9rer des donn\u00e9es de la base de donn\u00e9es WordPress, dans d&rsquo;autres cas, vous devrez peut-\u00eatre r\u00e9cup\u00e9rer quelque chose \u00e0 partir d&rsquo;une API tierce, ou peut-\u00eatre qu&rsquo;il y a un autre endroit \u00e0 partir duquel vous devez r\u00e9cup\u00e9rer des donn\u00e9es.<\/p>\n<p>Quoi qu&rsquo;il en soit, l&rsquo;id\u00e9e derri\u00e8re le mod\u00e8le de r\u00e9f\u00e9rentiel est que tout ce qui se trouve derri\u00e8re n&rsquo;a pas d&rsquo;importance tant que l&rsquo;API qu&rsquo;il fournit fonctionne pour la couche de l&rsquo;application qui l&rsquo;appelle.<\/p>\n<p>Et puisque nous avons couvert une introduction au mod\u00e8le de r\u00e9f\u00e9rentiel, examinons certains des avantages du mod\u00e8le de r\u00e9f\u00e9rentiel et comment nous pouvons l&rsquo;impl\u00e9menter dans le contexte de projets WordPress.<\/p>\n<h2>Avantages du mod\u00e8le de r\u00e9f\u00e9rentiel<\/h2>\n<p>Il existe plusieurs fa\u00e7ons de commencer \u00e0 expliquer le mod\u00e8le, je vais donc commencer par un sch\u00e9ma simple\u00a0:<\/p>\n<p>Les avantages du mod\u00e8le de r\u00e9f\u00e9rentiel incluent l&rsquo;abstraction du magasin de donn\u00e9es<\/p>\n<p>Remarquez dans l&rsquo;image ci-dessus, il y a trois composants principaux\u00a0:<\/p>\n<ol>\n<li>la logique de domaine (ou la logique m\u00e9tier) que j&rsquo;ai \u00e9tiquet\u00e9e &quot;App&quot;,<\/li>\n<li>le r\u00e9f\u00e9rentiel,<\/li>\n<li>le magasin de donn\u00e9es,<\/li>\n<\/ol>\n<p>Concernant l&rsquo;application, les r\u00e8gles m\u00e9tier resteront toujours relativement coh\u00e9rentes. Au moins, ils devraient, non?<\/p>\n<p>Le r\u00e9f\u00e9rentiel est ce qui agit comme un moyen de communication entre la logique m\u00e9tier et le magasin de donn\u00e9es.<\/p>\n<p>D\u00e9sormais, le magasin de donn\u00e9es peut \u00eatre une base de donn\u00e9es, peut-\u00eatre un ensemble de fichiers (ce que je ne recommanderais pas), une API destin\u00e9e \u00e0 un tiers, une liste d&rsquo;informations extraites d&rsquo;une autre application, etc.<\/p>\n<p>Le fait est que le r\u00e9f\u00e9rentiel fournira une API propre dans laquelle la logique m\u00e9tier peut \u00e9crire et lire (et plus \u00e0 ce sujet dans un instant) sans se soucier des d\u00e9tails sur l&rsquo;endroit o\u00f9 les donn\u00e9es vont ou comment elles reviennent.<\/p>\n<p>C&rsquo;est le travail du r\u00e9f\u00e9rentiel. Et c&rsquo;est ce qui rend important d&rsquo;avoir une API coh\u00e9rente et c&rsquo;est ce qui est important pour s&rsquo;assurer qu&rsquo;elle dispose des d\u00e9tails d&rsquo;impl\u00e9mentation du magasin de donn\u00e9es avec lequel elle interagit.<\/p>\n<h3>Sur couplage<\/h3>\n<p>En plus d&rsquo;avoir votre application correctement segment\u00e9e, le mod\u00e8le de r\u00e9f\u00e9rentiel profite \u00e0 l&rsquo;architecture en ce sens qu&rsquo;il aide \u00e0 d\u00e9coupler les parties de votre application.<\/p>\n<p>C&rsquo;est-\u00e0-dire que la logique m\u00e9tier ne sait rien de comment ni o\u00f9 les donn\u00e9es sont stock\u00e9es. Il sait juste qu&rsquo;il peut l&rsquo;\u00e9crire et le r\u00e9cup\u00e9rer et il peut le faire en utilisant une API propre.<\/p>\n<p>Le r\u00e9f\u00e9rentiel est responsable de la communication dudit magasin de donn\u00e9es pour orchestrer la s\u00e9rialisation et la r\u00e9cup\u00e9ration, mais doit fournir une API coh\u00e9rente, de sorte que la couche de donn\u00e9es n&rsquo;a pas \u00e0 faire de gymnastique syntaxique pour lire et \u00e9crire ses informations.<\/p>\n<h3>D\u00e9tails d&rsquo;impl\u00e9mentation<\/h3>\n<p>Jusqu&rsquo;\u00e0 pr\u00e9sent, j&rsquo;ai repr\u00e9sent\u00e9 le r\u00e9f\u00e9rentiel comme une classe concr\u00e8te.<\/p>\n<p>Le fait est qu&rsquo;une application aura probablement plusieurs r\u00e9f\u00e9rentiels. Et \u00e0 cause de cela, c&rsquo;est une bonne id\u00e9e d&rsquo;avoir des interfaces que chaque r\u00e9f\u00e9rentiel peut impl\u00e9menter.<\/p>\n<p>C&rsquo;est ainsi que vous d\u00e9finissez le contrat de m\u00e9thodes que le r\u00e9f\u00e9rentiel fournira. Et c&rsquo;est ainsi que vous pouvez vous assurer que chaque r\u00e9f\u00e9rentiel est connect\u00e9 au magasin de donn\u00e9es appropri\u00e9.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166772-61e79a138aeb3.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-166772-61e79a138aeb3.png\" alt=\"Avantages du mod\u00e8le de r\u00e9f\u00e9rentiel\u00a0: pourquoi devrions-nous l&#039;envisager\u00a0?\" ><\/a><\/p>\n<p>Une impl\u00e9mentation d&rsquo;interface pour plusieurs r\u00e9f\u00e9rentiels.<\/p>\n<p>Supposons donc que votre application doive communiquer avec la base de donn\u00e9es WordPress ainsi qu&rsquo;avec une API tierce.<\/p>\n<p>Id\u00e9alement, l&rsquo;interface fournirait un ensemble commun de m\u00e9thodes, mais les d\u00e9tails de mise en \u0153uvre varieraient en fonction du r\u00e9f\u00e9rentiel, car chaque r\u00e9f\u00e9rentiel disposera des informations d&rsquo;identification n\u00e9cessaires et de la capacit\u00e9 de communiquer avec le magasin de donn\u00e9es.<\/p>\n<p>L&rsquo;avanc\u00e9e vers l&rsquo;interface est cependant ce qui donne au motif sa puissance. La logique du domaine n&rsquo;a pas \u00e0 se soucier de la mani\u00e8re dont les informations sont enregistr\u00e9es ou r\u00e9cup\u00e9r\u00e9es. Il appelle simplement les m\u00e9thodes telles que d\u00e9finies dans l&rsquo;interface et l&rsquo;objet n\u00e9cessaire s&rsquo;en charge.<\/p>\n<p>Il appelle simplement les m\u00e9thodes telles que d\u00e9finies dans l&rsquo;interface et l&rsquo;objet n\u00e9cessaire s&rsquo;en charge.<\/p>\n<h2>\u00c0 quoi cela ressemblerait-il dans WordPress\u00a0?<\/h2>\n<p>C&rsquo;est une bonne question (et non je ne l&rsquo;ai pas invent\u00e9e juste pour y r\u00e9pondre par moi-m\u00eame \ud83d\ude42), et il peut \u00eatre difficile de donner un bon exemple car une grande partie de ce que nous faisons interagit directement avec la base de donn\u00e9es WordPress.<\/p>\n<p>Cela ne signifie pas qu&rsquo;il n&rsquo;y a pas d&rsquo;abstractions que nous pouvons utiliser telles que les publications, les pages, les utilisateurs ou tout autre type de publication personnalis\u00e9 que nous choisissons de cr\u00e9er.<\/p>\n<p>Mais WordPress fournit une API pour une grande partie de cela. Je peux voir un cas dans lequel, par exemple, un utilisateur avec des champs suppl\u00e9mentaires qui ont \u00e9t\u00e9 ajout\u00e9s pourrait b\u00e9n\u00e9ficier d&rsquo;un r\u00e9f\u00e9rentiel d&rsquo;utilisateurs.<\/p>\n<p>Ou un type de publication personnalis\u00e9 avec beaucoup de m\u00e9tadonn\u00e9es pourrait \u00e9galement b\u00e9n\u00e9ficier d&rsquo;un r\u00e9f\u00e9rentiel en ayant les d\u00e9tails encapsul\u00e9s dans le r\u00e9f\u00e9rentiel.<\/p>\n<h3>Un exemple de haut niveau<\/h3>\n<p>Supposons, par exemple, que vous ayez un type de publication personnalis\u00e9 pour un \u00e9v\u00e9nement, et que l&rsquo;\u00e9v\u00e9nement ait un titre et une description qui s&rsquo;int\u00e9greraient naturellement dans le titre et le contenu de la publication.<\/p>\n<p>Mais ensuite, il a des m\u00e9tadonn\u00e9es sur son emplacement, son heure de d\u00e9but, son heure de fin, etc. Cela pourrait \u00e9galement \u00eatre encapsul\u00e9 par le r\u00e9f\u00e9rentiel afin que vous puissiez avoir un objet Event, le transmettre au r\u00e9f\u00e9rentiel, puis laisser le r\u00e9f\u00e9rentiel envoyer les informations au bon endroit dans la base de donn\u00e9es.<\/p>\n<p>Et il en va de m\u00eame pour la r\u00e9cup\u00e9ration des informations: il sait o\u00f9 les obtenir, comment remplir un objet Event, puis les restitue \u00e0 l&rsquo;appelant.<\/p>\n<h2>Retour sur la bonne voie<\/h2>\n<p>Mais toutes ces discussions sur un \u00e9v\u00e9nement deviennent un peu hors sujet, alors je vais peut-\u00eatre continuer \u00e0 en parler et comment cela s&rsquo;int\u00e8gre au r\u00e9f\u00e9rentiel dans un post de suivi. De toute \u00e9vidence, quand on parle de cela, il y a beaucoup \u00e0 couvrir.<\/p>\n<p>Je pr\u00e9f\u00e8re le faire par petites \u00e9tapes<\/p>\n<p>En bref, si vous avez un r\u00e9f\u00e9rentiel d&rsquo;\u00e9v\u00e9nements, vous avez probablement un objet Event ou une entit\u00e9 Event. Et la fa\u00e7on dont cela s&rsquo;int\u00e8gre dans WordPress, les types de publication personnalis\u00e9s, les m\u00e9tadonn\u00e9es, etc. introduit un niveau de complexit\u00e9 qui peut sembler intimidant au d\u00e9but, mais qui finit par payer lorsque vous travaillez avec une application Web plus grande.<\/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>Jetons un coup d&rsquo;\u0153il \u00e0 certains des avantages du mod\u00e8le de r\u00e9f\u00e9rentiel et \u00e0 la mani\u00e8re dont nous pouvons l&rsquo;impl\u00e9menter dans le contexte de projets WordPress.<\/p>\n","protected":false},"author":1,"featured_media":223872,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,717,841],"tags":[1167],"class_list":["post-229387","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-developpeur","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229387","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=229387"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229387\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223872"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}