{"id":2320,"date":"2019-11-04T13:29:54","date_gmt":"2019-11-04T10:29:54","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2320"},"modified":"2024-12-16T22:32:32","modified_gmt":"2024-12-16T19:32:32","slug":"command-pattern","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/fr\/2019\/11\/04\/command-pattern\/","title":{"rendered":"Commande de mod\u00e8le"},"content":{"rendered":"<p><a href=\"https:\/\/pixabay.com\/illustrations\/vegan-go-vegan-compassion-sign-1343429\/\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2327\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/11\/govegan.png\" alt=\"\" width=\"400\" height=\"260\" srcset=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/11\/govegan.png 400w, https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/11\/govegan-300x195.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>Le mod\u00e8le de commande fait r\u00e9f\u00e9rence aux mod\u00e8les de conception comportementale.<\/p>\n<p>C&#8217;est le mod\u00e8le avec lequel je suis rest\u00e9 le plus longtemps, il est si simple qu&#8217;il en est tr\u00e8s complexe. Mais personnellement, je trouve que la beaut\u00e9 de l&#8217;auto-apprentissage est que vous avez tout le temps du monde pour rechercher un certain sujet sous tous les angles.<\/p>\n<p>Ainsi, dans le GoF, l&#8217;applicabilit\u00e9 est d\u00e9crite de mani\u00e8re assez succincte et claire\u00a0:<br \/><b><i>Encapsule une requ\u00eate en tant qu&#8217;objet, vous permettant de param\u00e9trer des clients avec diff\u00e9rentes requ\u00eates, d&#8217;utiliser des files d&#8217;attente, de consigner les requ\u00eates et d&#8217;effectuer des op\u00e9rations d&#8217;annulation.<\/i><\/b><\/p>\n<p>Impl\u00e9mentons maintenant une version simple de la commande \u00e0 partir de la description\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>string fakeTrumpsRequest = \u201cSELECT * from Users where name beginsWith DonaldTrump\u201d\n<\/code><\/pre>\n<\/div>\n<p>Nous avons encapsul\u00e9 la requ\u00eate dans un objet de classe cha\u00eene, il peut \u00eatre utilis\u00e9 pour configurer les clients, ajouter des commandes \u00e0 la file d&#8217;attente, enregistrer, annuler (en utilisant le mod\u00e8le \u00ab\u00a0Snapshot\u00a0\u00bb)<\/p>\n<p>Il me semble que cela suffit amplement pour effectuer des requ\u00eates SQL et autres, mais il y a ensuite des d\u00e9tails d&#8217;impl\u00e9mentation, diff\u00e9rentes options d&#8217;application, la base de code du mod\u00e8le, les r\u00f4les client et les classes auxiliaires.<\/ p><\/p>\n<h3>Pi\u00e8ces mat\u00e9rielles<\/h3>\n<p>Le <\/p>\n<p>mod\u00e8le de commande commence par un <b>protocole de commande<\/b>, qui contient une seule m\u00e9thode <b>execute()<\/b>. Vient ensuite la <b>Commande sp\u00e9cifique et le r\u00e9cepteur<\/b>. Le CC impl\u00e9mente l&#8217;op\u00e9ration sur le r\u00e9cepteur, d\u00e9crit la connexion entre le r\u00e9cepteur et l&#8217;action. Quelque chose n&#8217;est pas clair ? Moi aussi, mais passons \u00e0 autre chose. Le <b>Client <\/b>cr\u00e9e une instance d&#8217;une <b>Commande Sp\u00e9cifique<\/b>, l&#8217;associe au <b>R\u00e9cepteur<\/b>. <b>Invocateur<\/b> &#8211; objet qui ex\u00e9cute le processus de lancement des <b>Commandes<\/b>.<\/p>\n<p>Essayons maintenant de comprendre \u00e0 l&#8217;aide d&#8217;un exemple, disons que nous voulons mettre \u00e0 jour myOS sur myPhone, pour ce faire, nous lan\u00e7ons l&#8217;application myOS_Update\u00a0!, nous y appuyons sur le bouton Mettre \u00e0 jour maintenant, apr\u00e8s 10 secondes, le syst\u00e8me le fera\u00a0! signaler une mise \u00e0 jour r\u00e9ussie.<\/p>\n<p><b>Le client <\/b>dans l&#8217;exemple ci-dessus est l&#8217;application myOS_Update!, l&#8217;<b>Invoker<\/b> est le bouton &#8220;Mettre \u00e0 jour maintenant\u00a0!&#8221;, il lance la <b>Commande sp\u00e9cifique <\/ b>mettre \u00e0 jour le syst\u00e8me \u00e0 l&#8217;aide de la m\u00e9thode execute(), qui acc\u00e8de au <b>R\u00e9cepteur<\/b>&#8211; D\u00e9mon de mise \u00e0 jour du syst\u00e8me d&#8217;exploitation.<\/p>\n<h3>Utiliser un exemple<\/h3>\n<p>Acceptons l&#8217;interface utilisateur de l&#8217;application myOS_Update\u00a0! si bon qu&#8217;ils ont d\u00e9cid\u00e9 de le vendre en tant que produit distinct pour fournir une interface permettant de mettre \u00e0 jour d&#8217;autres syst\u00e8mes d&#8217;exploitation. Dans ce cas, nous impl\u00e9menterons une application avec prise en charge des extensions via des biblioth\u00e8ques, dans les biblioth\u00e8ques il y aura des impl\u00e9mentations de <b>Commandes sp\u00e9cifiques, r\u00e9cepteurs<\/b>, nous laisserons <b>Invoker<\/b> statique\/immuable. , <b>Client<\/b>, protocole <b>Commandes<\/b>.<\/p>\n<p>Ainsi, il n&#8217;est pas n\u00e9cessaire de prendre en charge le code mutable, puisque notre code restera inchang\u00e9, des probl\u00e8mes ne peuvent survenir que lorsqu&#8217;il est impl\u00e9ment\u00e9 c\u00f4t\u00e9 client, en raison d&#8217;erreurs dans le code de leurs <b>Commandes sp\u00e9cifiques<\/b> et <b> R\u00e9cepteurs<\/b>. De plus, dans cette impl\u00e9mentation, il n&#8217;est pas n\u00e9cessaire de transf\u00e9rer le code source de l&#8217;application principale, c&#8217;est-\u00e0-dire que nous avons encapsul\u00e9 les commandes et les interactions de l&#8217;interface utilisateur \u00e0 l&#8217;aide du mod\u00e8le <b>Command<\/b>.<\/p>\n<h3>Sources<\/h3>\n<p><a href=\"https:\/\/refactoring.guru\/ru\/design-patterns\/command\" target=\"_blank\" rel=\"noopener\">https:\/\/refactoring.guru\/ru\/design-patterns\/command <\/a><br \/><a href=\"https:\/\/www.amazon.com\/Design-Patterns-Elements-Reusable-Object-Oriented\/dp\/0201633612\" target=\"_blank\" rel=\"noopener\">https:\/\/www.amazon.com\/Design-Patterns-Elements-Reusable-Object-Oriented\/dp\/0201633612<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le mod\u00e8le de commande fait r\u00e9f\u00e9rence aux mod\u00e8les de conception comportementale. C&#8217;est le mod\u00e8le avec lequel je suis rest\u00e9 le plus longtemps, il est si simple qu&#8217;il en est tr\u00e8s complexe. Mais personnellement, je trouve que la beaut\u00e9 de l&#8217;auto-apprentissage est que vous avez tout le temps du monde pour rechercher un certain sujet sous<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/fr\/2019\/11\/04\/command-pattern\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Commande de mod\u00e8le&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"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,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[127,95],"class_list":["post-2320","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-command","tag-patterns","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"fr","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=2320"}],"version-history":[{"count":14,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2320\/revisions"}],"predecessor-version":[{"id":3935,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2320\/revisions\/3935"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=2320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=2320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=2320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}