{"id":229748,"date":"2022-11-03T19:15:00","date_gmt":"2022-11-03T16:15:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229748"},"modified":"2022-11-09T16:12:58","modified_gmt":"2022-11-09T13:12:58","slug":"vantaggi-del-modello-di-repository-perche-dovremmo-considerarlo","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/vantaggi-del-modello-di-repository-perche-dovremmo-considerarlo\/","title":{"rendered":"Vantaggi del modello di repository: perch\u00e9 dovremmo considerarlo"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/it\/il-primer-del-modello-di-repository\/\" title=\"Ieri\" >Ieri<\/a> ho fornito un primer sul pattern del repository. In breve, \u00e8 uno di quei modelli che penso che chiunque lavori su un middleware basato su WordPress dovrebbe capire.<\/p>\n<p>Quando si fornisce un primer su un modello come questo, pu\u00f2 essere difficile rendere giustizia al modello quando \u00e8 necessario:<\/p>\n<ul>\n<li>introdurlo,<\/li>\n<li>spiega come funziona,<\/li>\n<li>coprire i benefici,<\/li>\n<li>e fai una piccola demo.<\/li>\n<\/ul>\n<p>Ma il vero vantaggio del repository risiede non solo nell&#8217;astrazione del livello dati dal resto dell&#8217;applicazione, ma anche nel fatto che pu\u00f2 (o dovrebbe) essere facilmente scambiato con vari archivi di dati senza modificare l&#8217;API.<\/p>\n<p>Ad esempio, in un caso, potrebbe essere necessario recuperare i dati dal database di WordPress, in altri casi potrebbe essere necessario recuperare qualcosa da un&#8217;API di terze parti o forse c&#8217;\u00e8 un altro posto da cui \u00e8 necessario recuperare i dati.<\/p>\n<p>Indipendentemente da ci\u00f2, l&#8217;idea alla base del modello di repository \u00e8 che qualunque cosa si trovi dietro non ha importanza fintanto che l&#8217;API che fornisce funziona per il livello dell&#8217;applicazione che vi chiama.<\/p>\n<p>E poich\u00e9 abbiamo trattato un primer sul pattern del repository, diamo un&#8217;occhiata ad alcuni dei vantaggi del pattern del repository e come possiamo implementarlo nel contesto dei progetti WordPress.<\/p>\n<h2>Vantaggi del modello di repository<\/h2>\n<p>Ci sono alcuni modi per iniziare a spiegare lo schema, quindi inizier\u00f2 con un diagramma semplice:<\/p>\n<p>I vantaggi del modello di repository includono l&#8217;astrazione dell&#8217;archivio dati<\/p>\n<p>Nota nell&#8217;immagine sopra, ci sono tre componenti principali:<\/p>\n<ol>\n<li>la logica di dominio (o la logica di business) che ho etichettato come &quot;App&quot;,<\/li>\n<li>il deposito,<\/li>\n<li>l&#8217;archivio dati,<\/li>\n<\/ol>\n<p>Per quanto riguarda l&#8217;applicazione, le regole aziendali rimarranno sempre relativamente coerenti. Almeno dovrebbero, giusto?<\/p>\n<p>Il repository \u00e8 ci\u00f2 che funge da mezzo di comunicazione tra la logica aziendale e l&#8217;archivio dati.<\/p>\n<p>Ora l&#8217;archivio dati pu\u00f2 essere un database, forse un insieme di file (che non consiglierei), un&#8217;API di terze parti, un elenco di informazioni recuperate da un&#8217;altra applicazione e cos\u00ec via.<\/p>\n<p>Il punto \u00e8 che il repository fornir\u00e0 un&#8217;API pulita in cui la logica aziendale pu\u00f2 scrivere e leggere (e altro su questo in un momento) senza preoccuparsi dei dettagli di dove stanno andando i dati o di come stanno tornando.<\/p>\n<p>Questo \u00e8 il lavoro del repository. Ed \u00e8 questo che rende importante avere un&#8217;API coerente ed \u00e8 ci\u00f2 che \u00e8 importante per assicurarsi che disponga dei dettagli di implementazione dell&#8217;archivio dati con cui sta interagendo.<\/p>\n<h3>Sull&#8217;accoppiamento<\/h3>\n<p>Oltre ad avere la tua applicazione adeguatamente segmentata, il modello di repository avvantaggia l&#8217;architettura in quanto aiuta a disaccoppiare le parti della tua applicazione.<\/p>\n<p>Cio\u00e8, la logica aziendale non sa nulla su come o dove vengono archiviati i dati. Sa solo che pu\u00f2 scriverlo e recuperarlo e pu\u00f2 farlo utilizzando un&#8217;API pulita.<\/p>\n<p>Il repository \u00e8 responsabile della comunicazione di detto archivio dati per orchestrare la serializzazione e il recupero, ma deve fornire un&#8217;API coerente, quindi il livello dati non deve eseguire alcuna ginnastica sintattica per leggere e scrivere le sue informazioni.<\/p>\n<h3>Dettagli di implementazione<\/h3>\n<p>Fino a questo punto, ho rappresentato il repository come una classe concreta.<\/p>\n<p>Il fatto \u00e8 che un&#8217;applicazione avr\u00e0 probabilmente pi\u00f9 repository. E per questo motivo, \u00e8 una buona idea disporre di interfacce che ogni repository pu\u00f2 implementare.<\/p>\n<p>Questo \u00e8 il modo in cui definisci il contratto dei metodi che il repository fornir\u00e0. Ed \u00e8 cos\u00ec che puoi assicurarti che ogni repository sia connesso all&#8217;archivio dati appropriato.<\/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=\"Vantaggi del modello di repository: perch\u00e9 dovremmo considerarlo\" ><\/a><\/p>\n<p>Un&#8217;implementazione dell&#8217;interfaccia per pi\u00f9 repository.<\/p>\n<p>Quindi supponiamo che la tua applicazione debba comunicare con il database di WordPress e con un&#8217;API di terze parti.<\/p>\n<p>Idealmente, l&#8217;interfaccia fornirebbe un insieme comune di metodi, ma i dettagli di implementazione varierebbero in base al repository perch\u00e9 ogni repository avr\u00e0 le credenziali e la capacit\u00e0 necessarie per comunicare con l&#8217;archivio dati.<\/p>\n<p>Tuttavia, l&#8217;avanzamento all&#8217;interfaccia \u00e8 ci\u00f2 che conferisce al modello la sua potenza. La logica del dominio non deve preoccuparsi di come vengono salvate le informazioni o di come vengono recuperate. Chiama semplicemente i metodi definiti nell&#8217;interfaccia e l&#8217;oggetto necessario si prende cura di esso.<\/p>\n<p>Chiama semplicemente i metodi definiti nell&#8217;interfaccia e l&#8217;oggetto necessario si prende cura di esso.<\/p>\n<h2>Come sarebbe in WordPress?<\/h2>\n<p>Questa \u00e8 una buona domanda (e no, non me la sono inventata solo per rispondere da solo \ud83d\ude42), e pu\u00f2 essere difficile dare un ottimo esempio perch\u00e9 gran parte di ci\u00f2 che facciamo interagisce direttamente con il database di WordPress.<\/p>\n<p>Ci\u00f2 non significa che non ci siano astrazioni che possiamo utilizzare come post, pagine, utenti o qualsiasi altro tipo di post personalizzato che scegliamo di creare.<\/p>\n<p>Ma WordPress fornisce un&#8217;API per gran parte di questo. Riesco a vedere un caso in cui, ad esempio, un utente con campi aggiuntivi che sono stati aggiunti potrebbe trarre vantaggio da un repository utente.<\/p>\n<p>Oppure un tipo di post personalizzato con molti metadati potrebbe anche trarre vantaggio da un repository avendo i dettagli incapsulati nel repository.<\/p>\n<h3>Un esempio di alto livello<\/h3>\n<p>Supponiamo, ad esempio, di avere un tipo di post personalizzato per un evento e che l&#8217;evento abbia un titolo e una descrizione che si adatterebbero naturalmente al titolo e al contenuto del post.<\/p>\n<p>Ma poi ha metadati sulla sua posizione, la sua ora di inizio, la sua ora di fine e cos\u00ec via. Questo potrebbe anche essere incapsulato dal repository in modo da poter avere un oggetto Event, passarlo al repository e quindi lasciare che il repository invii le informazioni nella posizione corretta nel database.<\/p>\n<p>E lo stesso vale per il recupero delle informazioni: sa dove trovarle, come popolare un oggetto Evento e quindi restituirlo al chiamante.<\/p>\n<h2>Di nuovo in pista<\/h2>\n<p>Ma tutto questo parlare di un evento sta diventando un po&#8217; fuori tema, quindi forse continuer\u00f2 a parlarne e di come si adatta al repository in un post di follow-up. Chiaramente, quando si parla di questo, c&#8217;\u00e8 molto da coprire.<\/p>\n<p>Preferirei prenderlo a piccoli passi<\/p>\n<p>In breve, se si dispone di un repository di eventi \u00e8 probabile che si disponga di un oggetto Evento o di un&#8217;entit\u00e0 Evento. E come questo si adatta a WordPress, tipi di post personalizzati, metadati e cos\u00ec via introduce un livello di complessit\u00e0 che pu\u00f2 sembrare scoraggiante all&#8217;inizio, ma alla fine si ripaga quando si lavora con un&#8217;applicazione web pi\u00f9 grande.<\/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>Diamo un&#8217;occhiata ad alcuni dei vantaggi del modello di repository e come possiamo implementarlo nel contesto dei progetti 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":[918,720,844],"tags":[1168],"class_list":["post-229748","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229748","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=229748"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229748\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/223872"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}