{"id":231279,"date":"2022-12-19T14:42:00","date_gmt":"2022-12-19T11:42:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231279"},"modified":"2022-12-07T10:05:08","modified_gmt":"2022-12-07T07:05:08","slug":"programmation-wordpress-separer-les-preoccupations","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/programmation-wordpress-separer-les-preoccupations\/","title":{"rendered":"Programmation WordPress : S\u00e9parer les pr\u00e9occupations"},"content":{"rendered":"\n<p>En ce qui concerne la cr\u00e9ation de classes pour les plugins WordPress, on m&rsquo;a demand\u00e9 pourquoi je m&#8217;emb\u00eatais \u00e0 s\u00e9parer les fonctionnalit\u00e9s en abonn\u00e9s et en autres classes.<\/p>\n<p>Je pense que c&rsquo;est une bonne question car elle aide \u00e0 comprendre deux choses :<\/p>\n<ol>\n<li>le r\u00f4le d&rsquo;un abonn\u00e9 en ce qui concerne l&rsquo;architecture WordPress,<\/li>\n<li>le r\u00f4le des autres classes en ce qui concerne ce que vous construisez (et comment cela peut aider avec d&rsquo;autres choses comme les tests unitaires, etc.).<\/li>\n<\/ol>\n<p>Alors j&rsquo;ai pens\u00e9 pourquoi ne pas r\u00e9pondre sous la forme d&rsquo;un court message? Il documentera le pourquoi derri\u00e8re le quoi [et cela me donnera un endroit pour mettre \u00e0 jour si les choses changent \u00e0 l&rsquo;avenir].<\/p>\n<h2>Programmation WordPress\u00a0: Abonn\u00e9s et objets de domaine<\/h2>\n<p>Je consid\u00e8re les classes qui ne sont pas des objets de domaine abonn\u00e9s qui proviennent de l&rsquo;approche de d\u00e9veloppement logiciel de la conception dirig\u00e9e par le domaine.<\/p>\n<p>Cela sort du cadre de cet article, mais il convient de le mentionner, si ce n&rsquo;est pour aucune autre raison, cela donne un contexte \u00e0 ce qui serait autrement consid\u00e9r\u00e9 comme du jargon.<\/p>\n<h3>1 Abonn\u00e9s<\/h3>\n<p>Mais d&rsquo;abord, les abonn\u00e9s.<\/p>\n<p>\u00c9tant donn\u00e9 que WordPress est bas\u00e9 sur un syst\u00e8me de hook &#8211; un syst\u00e8me bas\u00e9 sur le mod\u00e8le de conception pilot\u00e9 par les \u00e9v\u00e9nements &#8211; il est utile d&rsquo;avoir une classe qui r\u00e9pond \u00e0 chaque fois qu&rsquo;un \u00e9v\u00e9nement est d\u00e9clench\u00e9.<\/p>\n<p>Cela peut \u00eatre pour n&rsquo;importe quel crochet WordPress pr\u00e9d\u00e9fini ou pour n&rsquo;importe quel crochet personnalis\u00e9. Ce n&rsquo;est pas important.<\/p>\n<p>Et je ne veux pas rendre la classe plus compliqu\u00e9e que n\u00e9cessaire donc j&rsquo;ai tendance \u00e0 penser \u00e0 eux comme ceci :<\/p>\n<p>Un abonn\u00e9 r\u00e9pond chaque fois qu&rsquo;un \u00e9v\u00e9nement sp\u00e9cifique se produit.<\/p>\n<p>Et c&rsquo;est tout. Cet \u00e9v\u00e9nement peut \u00eatre quelque chose comme <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/after_setup_theme\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">after_theme_setup<\/a> ou <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/the_content\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">the_content<\/a> ou m\u00eame <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/init\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">init<\/a>. Cela n&rsquo;a pas d&rsquo;importance.<\/p>\n<p>Il attend qu&rsquo;un \u00e9v\u00e9nement se produise, puis r\u00e9pond dans tout ce que nous d\u00e9cidons gr\u00e2ce \u00e0 l&rsquo;utilisation d&rsquo;un autre code (c&rsquo;est l\u00e0 que les objets de domaine entrent en jeu).<\/p>\n<h3>2 objets de domaine<\/h3>\n<p>Ceux-ci peuvent \u00e9galement \u00eatre appel\u00e9s objets m\u00e9tier ou quelque chose de similaire. L&rsquo;id\u00e9e derri\u00e8re eux est la suivante :<\/p>\n<p>Tout ce que nous faisons dans la programmation orient\u00e9e objet est destin\u00e9 \u00e0 r\u00e9soudre un probl\u00e8me particulier et il est cens\u00e9 le faire \u00e0 travers un type d&rsquo;objet qui repr\u00e9sente un objet du monde r\u00e9el ou au moins une id\u00e9e concr\u00e8te.<\/p>\n<p>Ainsi, chaque fois que vous travaillez pour fournir une solution \u00e0 quelqu&rsquo;un, les classes que vous \u00e9crivez &#8211; les objets qu&rsquo;elles deviendront une fois instanci\u00e9es &#8211; sont les objets du domaine.<\/p>\n<p>Ce sont aussi les classes qui font le travail r\u00e9el. Vous pouvez donc le penser en trois composantes :<\/p>\n<ol>\n<li><strong>WordPress<\/strong>. L&rsquo;application de base, bien s\u00fbr, qui d\u00e9clenche l&rsquo;\u00e9v\u00e9nement auquel les abonn\u00e9s r\u00e9pondent.<\/li>\n<li><strong>Abonn\u00e9s<\/strong>. L&rsquo;ensemble des classes responsables de l&rsquo;\u00e9coute d&rsquo;un \u00e9v\u00e9nement sp\u00e9cifique, puis de l&rsquo;instanciation de l&rsquo;objet appropri\u00e9 pour g\u00e9rer le code.<\/li>\n<li><strong>Objets de domaine<\/strong>. Le code qui effectue r\u00e9ellement le travail consistant \u00e0 prendre un ensemble de donn\u00e9es, \u00e0 op\u00e9rer dessus, puis \u00e0 renvoyer potentiellement une valeur.<\/li>\n<\/ol>\n<p>Les objets de domaine sont l&rsquo;endroit o\u00f9 vit le code pour faire quelque chose. Les abonn\u00e9s sont comme le lien entre WordPress et ladite fonctionnalit\u00e9.<\/p>\n<p>Les abonn\u00e9s disent &quot;Cet \u00e9v\u00e9nement s&rsquo;est produit et cette classe est capable et responsable d&rsquo;en g\u00e9rer les r\u00e9sultats.&quot;<\/p>\n<h2>Qu&rsquo;en est-il des tests et ainsi de suite\u00a0?<\/h2>\n<p>Plus t\u00f4t dans l&rsquo;article, j&rsquo;ai expliqu\u00e9 comment les objets de domaine sont li\u00e9s aux tests unitaires et \u00e0 d&rsquo;autres techniques de programmation li\u00e9es au contr\u00f4le de la qualit\u00e9.<\/p>\n<p>Bien que ce ne soit pas l&rsquo;article pour les d\u00e9tails, il convient de mentionner que le fait de garder les objets de domaine et les abonn\u00e9s d\u00e9coupl\u00e9s les uns des autres (et, \u00e0 leur tour, de WordPress) nous permet d&rsquo;instancier, de tester et de travailler avec des objets qui sont invoqu\u00e9s par abonn\u00e9s sans avoir besoin d&rsquo;apporter WordPress dans notre travail.<\/p>\n<p>Et c&rsquo;est quelque chose qui peut \u00eatre extr\u00eamement utile lors de la cr\u00e9ation de solutions plus importantes. Mais l&rsquo;essentiel de la fa\u00e7on de le faire est contenu pour un autre poste.<\/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>En ce qui concerne la programmation WordPress, en particulier avec les plugins, pourquoi s&#8217;emb\u00eater \u00e0 s\u00e9parer les fonctionnalit\u00e9s en abonn\u00e9s et en autres classes ?<\/p>\n","protected":false},"author":1,"featured_media":234937,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717,832,862],"tags":[1167],"class_list":["post-231279","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","category-guide-pour-les-debutants","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231279","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=231279"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231279\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/234937"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}