{"id":229406,"date":"2022-10-25T10:02:00","date_gmt":"2022-10-25T07:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229406"},"modified":"2022-11-09T07:00:47","modified_gmt":"2022-11-09T04:00:47","slug":"piu-oggetti-che-scrivono-dati-come-evitarlo","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/piu-oggetti-che-scrivono-dati-come-evitarlo\/","title":{"rendered":"Pi\u00f9 oggetti che scrivono dati: come evitarlo"},"content":{"rendered":"\n<p>Sai quelle volte in cui stai lavorando su un programma e ci sono alcuni punti nel tuo codice che, a seconda dei requisiti o di un bug che si manifesta in qualche modo, \u00e8 direttamente correlato al fatto che hai pi\u00f9 oggetti che scrivono dati nello stesso archivio dati? Non \u00e8 una buona cosa.<\/p>\n<p>\u00c8 un modo terribile per iniziare un post. Fammi provare di nuovo.<\/p>\n<h2>Pi\u00f9 oggetti che scrivono dati<\/h2>\n<p>Supponiamo che tu stia lavorando su un programma e una delle cose che fa il codice \u00e8 aggiornare un contatore da qualche parte nel database per tenere traccia di quante modifiche si sono verificate in un breve periodo di tempo.<\/p>\n<p>Il problema: hai pi\u00f9 posizioni nel codice che stanno aggiornando questo contatore.<\/p>\n<p>Pi\u00f9 oggetti che scrivono dati (nel caso in cui la mia calligrafia sia illeggibile come sembra).<\/p>\n<p>Non credo che molti di noi abbiano deciso di scrivere codice come questo, ma succede e quando lo fa finisce per avere tutti questi effetti collaterali che generano tutti i tipi di comportamenti stravaganti. (Non conosco il termine accademico ufficiale per questo &#8211; e non intendo <a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">SECCO<\/a> &#8211; ma sto bene con &quot;comportamento eccentrico&quot; per questo post.)<\/p>\n<p>Sappiamo intuitivamente che dovremmo avere un unico luogo in cui tutto questo sta accadendo, fattori esterni \u2013 che si tratti di un&#8217;insinuazione nell&#8217;ambito, un malinteso da parte nostra per comprendere i requisiti o qualsiasi altra cosa \u2013 generano scarsa codifica.<\/p>\n<p>Quindi abbiamo tutte queste <a href=\"https:\/\/wordpress.mediadoma.com\/it\/tipi-di-post-di-wordpress-unastrazione-per-le-entita\/\" title=\"entit\u00e0\">entit\u00e0<\/a> nel nostro sistema, ognuna delle quali sta parlando con un singolo punto nel nostro database (o qualsiasi archivio di dati che ti piace), ma nessuna di loro \u00e8 consapevole che altri stanno parlando con loro.<\/p>\n<h2>Impostare i confini<\/h2>\n<p>Possiamo provare a combattere questo con condizionali e cosa no, ma stiamo solo peggiorando le cose. Allora cosa dovremmo fare?<\/p>\n<p>So che, come per molte cose nella programmazione, ci sono una variet\u00e0 di modi per risolvere questo problema, ma forse uno dei primi passaggi del refactoring \u00e8 avere una classe responsabile dell&#8217;emissione degli aggiornamenti al datastore.<\/p>\n<p>In questo modo, possiamo passare dall&#8217;illustrazione sopra a qualcosa del genere:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167733-61e7a7cc3a1aa.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-167733-61e7a7cc3a1aa.png\" alt=\"Pi\u00f9 oggetti che scrivono dati: come evitarlo\" ><\/a><\/p>\n<p>Pi\u00f9 oggetti che scrivono dati: inviali a una sorta di mediatore.<\/p>\n<p>Cio\u00e8, tutte le entit\u00e0 fanno comunit\u00e0 con questo oggetto e questo oggetto \u2013 e solo questo oggetto pu\u00f2 leggere e scrivere dati nel database.<\/p>\n<p>Ci sono alcuni <a href=\"https:\/\/sourcemaking.com\/design_patterns\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">modelli di progettazione<\/a> che si adattano a questo particolare problema, ma questo esula dallo scopo di questo post. Invece, il punto che sto cercando di fare \u00e8 che se ti trovi di fronte a un problema di:<\/p>\n<ul>\n<li>Le entit\u00e0 scrivono i dati nell&#8217;archivio dati,<\/li>\n<li>Pi\u00f9 entit\u00e0 lo stanno facendo,<\/li>\n<li>E sta generando conseguenze non intenzionali,<\/li>\n<\/ul>\n<p>Quindi prova a creare una classe o un insieme di classi strettamente responsabili della lettura e della scrittura dei dati. Lascia che le informazioni passino solo attraverso quelle classi piuttosto che avere pi\u00f9 classi per la manipolazione dei dati.<\/p>\n<p>Semplifica il test, semplifica il debug e, in definitiva, semplifica la lettura.<\/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>Avere pi\u00f9 oggetti che scrivono dati in un singolo datastore in pi\u00f9 posizioni ha effetti collaterali negativi. Ecco un modo per risolverlo.<\/p>\n","protected":false},"author":1,"featured_media":221243,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[720],"tags":[1168],"class_list":["post-229406","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sviluppatore","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229406","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=229406"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229406\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/221243"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}