{"id":231570,"date":"2022-12-19T15:16:00","date_gmt":"2022-12-19T12:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231570"},"modified":"2022-12-07T10:05:10","modified_gmt":"2022-12-07T07:05:10","slug":"programmazione-wordpress-separare-le-preoccupazioni","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/programmazione-wordpress-separare-le-preoccupazioni\/","title":{"rendered":"Programmazione WordPress: separare le preoccupazioni"},"content":{"rendered":"\n<p>Quando si tratta di creare classi per i plugin di WordPress, mi \u00e8 stato chiesto perch\u00e9 mi preoccupo di separare le funzionalit\u00e0 in iscritti e in altre classi.<\/p>\n<p>Penso che questa sia una buona domanda perch\u00e9 aiuta a capire due cose:<\/p>\n<ol>\n<li>il ruolo di un abbonato in relazione all&#8217;architettura di WordPress,<\/li>\n<li>il ruolo delle altre classi in relazione a ci\u00f2 che stai costruendo (e come questo pu\u00f2 aiutare con altre cose come unit test e cos\u00ec via).<\/li>\n<\/ol>\n<p>Quindi ho pensato perch\u00e9 non rispondere sotto forma di un breve post? Documenter\u00e0 il perch\u00e9 dietro il cosa [e mi dar\u00e0 un posto dove aggiornarmi se le cose cambieranno in futuro].<\/p>\n<h2>Programmazione WordPress: abbonati e oggetti di dominio<\/h2>\n<p>Considero le classi che non sono oggetti di dominio di abbonati che provengono dall&#8217;approccio di sviluppo software della progettazione basata sul dominio.<\/p>\n<p>Questo \u00e8 al di fuori dello scopo di questo post, ma vale la pena menzionarlo se non altro perch\u00e9 fornisce un contesto a ci\u00f2 che altrimenti sarebbe considerato gergo.<\/p>\n<h3>1 Abbonati<\/h3>\n<p>Ma prima, gli abbonati.<\/p>\n<p>Poich\u00e9 WordPress si basa su un sistema di hook, un sistema basato sul modello di progettazione basato sugli eventi, \u00e8 utile disporre di una classe che risponda ogni volta che viene generato un evento.<\/p>\n<p>Questo pu\u00f2 essere per qualsiasi hook WordPress predefinito o qualsiasi hook personalizzato. Non importa.<\/p>\n<p>E non voglio rendere la lezione pi\u00f9 complicata del necessario, quindi tendo a pensarle in questo modo:<\/p>\n<p>Un abbonato risponde ogni volta che si verifica un evento specifico.<\/p>\n<p>E questo \u00e8 tutto. Questo evento pu\u00f2 essere qualcosa come <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> o <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/the_content\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">the_content<\/a> o anche <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/init\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">init<\/a>. Non importa.<\/p>\n<p>Aspetta che si verifichi un evento, quindi risponde in qualunque cosa decidiamo attraverso l&#8217;uso di altro codice (che \u00e8 dove entrano in gioco gli oggetti di dominio).<\/p>\n<h3>2 oggetti di dominio<\/h3>\n<p>Questi possono anche essere chiamati oggetti aziendali o qualcosa di simile. L&#8217;idea alla base \u00e8 questa:<\/p>\n<p>Tutto ci\u00f2 che facciamo nella programmazione orientata agli oggetti ha lo scopo di risolvere un problema particolare ed \u00e8 pensato per farlo attraverso un tipo di oggetto che rappresenta un oggetto del mondo reale o almeno un&#8217;idea concreta.<\/p>\n<p>Quindi, ogni volta che stai lavorando per fornire una soluzione a qualcuno, le classi che stai scrivendo \u2013 gli oggetti che diventeranno quando istanziati \u2013 sono gli oggetti di dominio.<\/p>\n<p>Queste sono anche le classi che svolgono il lavoro vero e proprio. Quindi puoi pensarlo in tre componenti:<\/p>\n<ol>\n<li><strong>WordPress<\/strong>. L&#8217;applicazione principale, ovviamente, che genera l&#8217;evento a cui rispondono gli abbonati.<\/li>\n<li><strong>Abbonati<\/strong>. L&#8217;insieme di classi responsabili dell&#8217;ascolto di un evento specifico e quindi della creazione di un&#8217;istanza dell&#8217;oggetto appropriato per gestire il codice.<\/li>\n<li><strong>Oggetti di dominio<\/strong>. Il codice che esegue effettivamente il lavoro di prendere un insieme di dati, operare su di esso e quindi potenzialmente restituire un valore.<\/li>\n<\/ol>\n<p>Gli oggetti di dominio sono dove risiede il codice per fare effettivamente qualcosa. Gli abbonati sono come la connessione tra WordPress e detta funzionalit\u00e0.<\/p>\n<p>Gli abbonati dicono &quot;Questo evento si \u00e8 verificato e questa classe \u00e8 in grado e responsabile di gestirne i risultati&quot;.<\/p>\n<h2>Che dire di test e cos\u00ec via?<\/h2>\n<p>In precedenza nel post, ho parlato di come gli oggetti di dominio sono correlati agli unit test e ad altre tecniche di programmazione relative al controllo qualit\u00e0.<\/p>\n<p>Anche se questo non \u00e8 il post per i dettagli, vale la pena ricordare che mantenere gli oggetti di dominio e gli abbonati disaccoppiati l&#8217;uno dall&#8217;altro (e, a sua volta, da WordPress) ci consente di creare un&#8217;istanza, testare e lavorare con oggetti invocati da iscritti senza dover portare WordPress nel nostro lavoro.<\/p>\n<p>E questo \u00e8 qualcosa che pu\u00f2 essere immensamente utile quando si creano soluzioni pi\u00f9 grandi. Ma il succo di come farlo \u00e8 contenuto per un altro post.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando si tratta di programmazione WordPress, in particolare con i plug-in, perch\u00e9 preoccuparsi di separare le funzionalit\u00e0 in abbonati e in altre classi?<\/p>\n","protected":false},"author":1,"featured_media":234939,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[835,720,865],"tags":[1168],"class_list":["post-231570","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guida-per-principianti","category-sviluppatore","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=231570"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231570\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/234939"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}