{"id":229173,"date":"2022-10-25T10:08:00","date_gmt":"2022-10-25T07:08:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229173"},"modified":"2022-11-09T05:56:48","modified_gmt":"2022-11-09T02:56:48","slug":"tietojen-kirjoittaminen-useisiin-objekteihin-kuinka-vaelttaeae-taemae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/tietojen-kirjoittaminen-useisiin-objekteihin-kuinka-vaelttaeae-taemae\/","title":{"rendered":"Tietojen kirjoittaminen useisiin objekteihin: Kuinka v\u00e4ltt\u00e4\u00e4 t\u00e4m\u00e4"},"content":{"rendered":"\n<p>Tied\u00e4t ne ajat, kun ty\u00f6skentelet ohjelman parissa, ja koodissasi on paikkoja, jotka vaatimuksista tai jollakin tavalla ilmenev\u00e4st\u00e4 virheest\u00e4 riippuen liittyv\u00e4t suoraan siihen, ett\u00e4 sinulla on useita objekteja kirjoittamassa tietoja. samaan tietovarastoon? Se ei ole hyv\u00e4 asia.<\/p>\n<p>Se on kauhea tapa aloittaa postaus. Anna minun kokeilla sit\u00e4 uudelleen.<\/p>\n<h2>Useita kohteita kirjoittavat tietoja<\/h2>\n<p>Oletetaan, ett\u00e4 ty\u00f6skentelet ohjelman parissa ja yksi koodin teht\u00e4vist\u00e4 on p\u00e4ivitt\u00e4\u00e4 laskurin jossain tietokannassa seuratakseen kuinka monta muutosta on tapahtunut pienen ajanjakson aikana.<\/p>\n<p>Ongelma: Sinulla on useita paikkoja koodissa, jotka p\u00e4ivitt\u00e4v\u00e4t t\u00e4t\u00e4 laskuria.<\/p>\n<p>Useita objekteja kirjoittavat tiedot (jos k\u00e4sialani on niin lukukelvoton kuin milt\u00e4 se n\u00e4ytt\u00e4\u00e4).<\/p>\n<p>En usko, ett\u00e4 monet meist\u00e4 aikovat kirjoittaa t\u00e4llaista koodia, mutta niin tapahtuu, ja kun se tekee, se saa kaikki n\u00e4m\u00e4 sivuvaikutukset, jotka vain synnytt\u00e4v\u00e4t kaikenlaista funky-k\u00e4ytt\u00e4ytymist\u00e4. (En tied\u00e4 virallista, akateemista termi\u00e4 sille \u2013 enk\u00e4 tarkoita <a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">KUIVAA<\/a> \u2013 mutta t\u00e4m\u00e4n postauksen &quot;funky-k\u00e4ytt\u00e4ytyminen&quot; sopii minulle.)<\/p>\n<p>Tied\u00e4mme intuitiivisesti, ett\u00e4 meill\u00e4 pit\u00e4isi olla yksi paikka, jossa t\u00e4m\u00e4 kaikki tapahtuu, ulkoiset tekij\u00e4t &#8211; olipa se sitten laajuus, v\u00e4\u00e4rinymm\u00e4rrys meilt\u00e4 vaatimusten ymm\u00e4rt\u00e4misess\u00e4 tai mik\u00e4 tahansa &#8211; synnytt\u00e4v\u00e4t huonoa koodausta.<\/p>\n<p>Joten meill\u00e4 on kaikki n\u00e4m\u00e4 <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-viestityypit-abstraktio-entiteeteille\/\" title=\"entiteetit\">entiteetit<\/a> koko j\u00e4rjestelm\u00e4ss\u00e4mme, joista jokainen puhuu yhdelle pisteelle tietokannassamme (tai mihin tahansa haluamaasi tietovarastoon), mutta yksik\u00e4\u00e4n niist\u00e4 ei ole tietoinen muiden puhuvan heille.<\/p>\n<h2>Aseta rajat<\/h2>\n<p>Voimme yritt\u00e4\u00e4 taistella t\u00e4t\u00e4 vastaan \u200b\u200behdoin ja mill\u00e4 ei, mutta teemme siit\u00e4 vain pahemman. Joten mit\u00e4 meid\u00e4n pit\u00e4isi tehd\u00e4?<\/p>\n<p>Tied\u00e4n, kuten monien ohjelmoinnin asioiden kanssa, on olemassa useita tapoja ratkaista t\u00e4m\u00e4, mutta ehk\u00e4 yksi ensimm\u00e4isist\u00e4 uudelleenj\u00e4rjestelyn vaiheista on saada luokka, joka vastaa p\u00e4ivitysten julkaisemisesta tietovarastoon.<\/p>\n<p>T\u00e4ll\u00e4 tavalla voimme siirty\u00e4 yll\u00e4 olevasta kuvasta johonkin t\u00e4llaiseen:<\/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=\"Tietojen kirjoittaminen useisiin objekteihin: Kuinka v\u00e4ltt\u00e4\u00e4 t\u00e4m\u00e4\" ><\/a><\/p>\n<p>Tietojen kirjoittaminen useisiin objekteihin: L\u00e4het\u00e4 se er\u00e4\u00e4nlaiselle v\u00e4litt\u00e4j\u00e4lle.<\/p>\n<p>Eli kaikki entiteetit ovat yhteis\u00f6ss\u00e4 t\u00e4m\u00e4n objektin ja t\u00e4m\u00e4n objektin kanssa \u2013 ja vain t\u00e4m\u00e4 objekti voi lukea ja kirjoittaa tietoja tietokantaan.<\/p>\n<p>On olemassa muutamia <a href=\"https:\/\/sourcemaking.com\/design_patterns\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">suunnittelumalleja<\/a>, jotka sopivat t\u00e4h\u00e4n ongelmaan, mutta ne eiv\u00e4t kuulu t\u00e4m\u00e4n viestin soveltamisalaan. Sen sijaan yrit\u00e4n korostaa, ett\u00e4 jos kohtaat seuraavan ongelman:<\/p>\n<ul>\n<li>Entiteetit kirjoittavat tietoja tietovarastoon,<\/li>\n<li>Useat tahot tekev\u00e4t sit\u00e4,<\/li>\n<li>Ja se synnytt\u00e4\u00e4 tahattomia seurauksia,<\/li>\n<\/ul>\n<p>Yrit\u00e4 sitten luoda luokka tai luokkaryhm\u00e4, joka on tiukasti vastuussa tietojen lukemisesta ja kirjoittamisesta. Anna tiedon kulkea vain n\u00e4iden luokkien l\u00e4pi sen sijaan, ett\u00e4 useat luokat k\u00e4sittelev\u00e4t tietoja.<\/p>\n<p>Se helpottaa testaamista, helpottaa virheenkorjausta ja helpottaa viime k\u00e4dess\u00e4 lukemista.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Useiden objektien kirjoittamisella yhteen tietovarastoon useissa paikoissa on kielteisi\u00e4 sivuvaikutuksia. T\u00e4ss\u00e4 on tapa korjata se.<\/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":[719],"tags":[1166],"class_list":["post-229173","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=229173"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/221243"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}