{"id":228471,"date":"2022-10-25T10:10:00","date_gmt":"2022-10-25T07:10:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228471"},"modified":"2022-11-09T02:43:26","modified_gmt":"2022-11-08T23:43:26","slug":"flera-objekt-som-skriver-data-hur-man-undviker-detta","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/flera-objekt-som-skriver-data-hur-man-undviker-detta\/","title":{"rendered":"Flera objekt som skriver data: Hur man undviker detta"},"content":{"rendered":"\n<p>Du vet de tillf\u00e4llen d\u00e5 du arbetar med ett program, och det finns vissa st\u00e4llen i din kod som, beroende p\u00e5 kraven eller en bugg som visar sig p\u00e5 n\u00e5got s\u00e4tt, \u00e4r direkt relaterade till det faktum att du har flera objekt som skriver data till samma datalager? Det \u00e4r inte bra.<\/p>\n<p>Det \u00e4r ett hemskt s\u00e4tt att starta ett inl\u00e4gg. L\u00e5t mig f\u00f6rs\u00f6ka igen.<\/p>\n<h2>Flera objekt som skriver data<\/h2>\n<p>S\u00e4g att du arbetar med ett program och en av sakerna som koden g\u00f6r \u00e4r att uppdatera en r\u00e4knare n\u00e5gonstans i databasen f\u00f6r att sp\u00e5ra hur m\u00e5nga \u00e4ndringar som har skett under en kort tidsperiod.<\/p>\n<p>Problemet: Du har flera platser i koden som uppdaterar den h\u00e4r r\u00e4knaren.<\/p>\n<p>Flera objekt som skriver data (ifall min handstil \u00e4r s\u00e5 ol\u00e4slig som den verkar).<\/p>\n<p>Jag tror inte att m\u00e5nga av oss t\u00e4nkte skriva s\u00e5dan h\u00e4r kod, men det h\u00e4nder, och n\u00e4r det g\u00f6r det slutar det med att f\u00e5 alla dessa biverkningar som bara f\u00f6der upp alla typer av funky beteende. (Jag vet inte den officiella, akademiska termen f\u00f6r det \u2013 och jag menar inte <a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">DRY<\/a> \u2013 men jag \u00e4r okej med &quot;funky beteende&quot; f\u00f6r det h\u00e4r inl\u00e4gget.)<\/p>\n<p>Vi vet intuitivt att vi borde ha en enda plats d\u00e4r allt detta h\u00e4nder, externa faktorer \u2013 vare sig det \u00e4r omfattningskrypning, ett missf\u00f6rst\u00e5nd fr\u00e5n v\u00e5r sida f\u00f6r att f\u00f6rst\u00e5 kraven eller vad som helst \u2013 f\u00f6der d\u00e5lig kodning.<\/p>\n<p>S\u00e5 d\u00e5 har vi alla dessa <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-inlaeggstyper-en-abstraktion-foer-enheter\/\" title=\"enheter\">enheter<\/a> i hela v\u00e5rt system som var och en pratar med en enda punkt i v\u00e5r databas (eller vilket datalager du vill), men ingen av dem \u00e4r medveten om att andra talar till dem.<\/p>\n<h2>S\u00e4tt upp gr\u00e4nser<\/h2>\n<p>Vi kan f\u00f6rs\u00f6ka bek\u00e4mpa detta med villkor och vad inte, men vi g\u00f6r det bara v\u00e4rre. S\u00e5 vad ska vi g\u00f6ra?<\/p>\n<p>Jag vet, som med m\u00e5nga saker inom programmering, det finns en m\u00e4ngd olika s\u00e4tt att l\u00f6sa detta p\u00e5, men kanske \u00e4r ett av de f\u00f6rsta stegen av refactoring att ha en klass som ansvarar f\u00f6r att utf\u00e4rda uppdateringar till datalagret.<\/p>\n<p>P\u00e5 s\u00e5 s\u00e4tt kan vi g\u00e5 fr\u00e5n illustrationen ovan till n\u00e5got s\u00e5 h\u00e4r:<\/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=\"Flera objekt som skriver data: Hur man undviker detta\" ><\/a><\/p>\n<p>Flera objekt som skriver data: Skicka den till en sorts medlare.<\/p>\n<p>Det vill s\u00e4ga alla entitetsgemenskaper med detta objekt och det h\u00e4r objektet \u2013 och endast detta objekt kan l\u00e4sa och skriva data till databasen.<\/p>\n<p>Det finns n\u00e5gra <a href=\"https:\/\/sourcemaking.com\/design_patterns\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">designm\u00f6nster<\/a> som skulle passa just detta problem, men det ligger utanf\u00f6r ramen f\u00f6r detta inl\u00e4gg. Ist\u00e4llet, po\u00e4ngen som jag f\u00f6rs\u00f6ker g\u00f6ra \u00e4r att om du befinner dig inf\u00f6r ett problem av:<\/p>\n<ul>\n<li>Entiteter skriver data till datalagret,<\/li>\n<li>Flera enheter g\u00f6r det,<\/li>\n<li>Och det f\u00f6der oavsiktliga konsekvenser,<\/li>\n<\/ul>\n<p>F\u00f6rs\u00f6k sedan att skapa en klass eller upps\u00e4ttning klass som \u00e4r strikt ansvarig f\u00f6r att l\u00e4sa och skriva data. L\u00e5t bara informationen passera genom dessa klasser ist\u00e4llet f\u00f6r att ha flera klasser g\u00f6r datamanipulationen.<\/p>\n<p>Det g\u00f6r det l\u00e4ttare att testa, det g\u00f6r det l\u00e4ttare att fels\u00f6ka, och det g\u00f6r det i slut\u00e4ndan l\u00e4ttare att l\u00e4sa.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Att ha flera objekt som skriver data till ett enda datalager p\u00e5 flera st\u00e4llen har negativa bieffekter. H\u00e4r \u00e4r ett s\u00e4tt att fixa det.<\/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":[724],"tags":[1173],"class_list":["post-228471","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228471","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=228471"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228471\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/221243"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228471"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228471"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228471"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}