{"id":229476,"date":"2022-11-03T19:15:00","date_gmt":"2022-11-03T16:15:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229476"},"modified":"2022-11-09T07:15:40","modified_gmt":"2022-11-09T04:15:40","slug":"arkiston-mallin-edut-miksi-meidaen-pitaeisi-harkita-sitae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/arkiston-mallin-edut-miksi-meidaen-pitaeisi-harkita-sitae\/","title":{"rendered":"Arkiston mallin edut: miksi meid\u00e4n pit\u00e4isi harkita sit\u00e4"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/arkiston-kuviopohja\/\" title=\"Eilen\" >Eilen<\/a> annoin pohjamaalin arkiston kuviolle. Lyhyesti sanottuna se on yksi niist\u00e4 malleista, jotka mielest\u00e4ni jokaisen WordPressin p\u00e4\u00e4lle rakennetun v\u00e4liohjelmiston parissa ty\u00f6skentelevien pit\u00e4isi ymm\u00e4rt\u00e4\u00e4.<\/p>\n<p>Kun annat pohjamaalin t\u00e4llaiselle kuviolle, voi olla vaikeaa tehd\u00e4 oikeutta kuviolle, kun tarvitset:<\/p>\n<ul>\n<li>esitell\u00e4 se,<\/li>\n<li>selitt\u00e4\u00e4 miten se toimii,<\/li>\n<li>kattaa edut,<\/li>\n<li>ja anna pieni esittely.<\/li>\n<\/ul>\n<p>Mutta arkiston todellinen etu ei ole vain tietokerroksen poistaminen muusta sovelluksesta, vaan se voidaan (tai sen pit\u00e4isi) olla helposti vaihdettavissa eri tietovarastoihin ilman API:ta vaihtamatta.<\/p>\n<p>Esimerkiksi yhdess\u00e4 tapauksessa saatat joutua hakemaan tietoja WordPress-tietokannasta, toisissa tapauksissa saatat joutua hakemaan jotain kolmannen osapuolen API:sta tai ehk\u00e4 jostain muusta paikasta sinun t\u00e4ytyy hakea tietoja.<\/p>\n<p>Siit\u00e4 huolimatta arkistomallin taustalla oleva ajatus on, ett\u00e4 sill\u00e4, mit\u00e4 sen takana on, ei ole v\u00e4li\u00e4, kunhan sen tarjoama API toimii sit\u00e4 kutsuvan sovelluksen kerrokselle.<\/p>\n<p>Ja koska olemme k\u00e4sitelleet arkistomallin pohjapiirroksen, katsotaanpa joitain arkistomallin etuja ja kuinka voimme toteuttaa sen WordPress-projektien yhteydess\u00e4.<\/p>\n<h2>Varastomallin edut<\/h2>\n<p>On joitakin tapoja aloittaa kuvion selitt\u00e4minen, joten aloitan yksinkertaisella kaaviolla:<\/p>\n<p>Tietovarastomallin etuihin kuuluu Data Store Abstraction<\/p>\n<p>Huomaa yll\u00e4 olevassa kuvassa, ett\u00e4 siin\u00e4 on kolme p\u00e4\u00e4komponenttia:<\/p>\n<ol>\n<li>verkkotunnuksen logiikka (tai liiketoimintalogiikka), jonka olen merkinnyt sovellukseksi,<\/li>\n<li>arkisto,<\/li>\n<li>tietovarasto,<\/li>\n<\/ol>\n<p>Sovelluksen osalta liiketoimintas\u00e4\u00e4nn\u00f6t pysyv\u00e4t aina suhteellisen johdonmukaisina. Ainakin niiden pit\u00e4isi, eik\u00f6?<\/p>\n<p>Tietovarasto toimii viestint\u00e4v\u00e4lineen\u00e4 liiketoimintalogiikan ja tietovaraston v\u00e4lill\u00e4.<\/p>\n<p>Nyt tietovarasto voi olla tietokanta, ehk\u00e4 tiedostojoukko (jota en suosittele), API kolmannelle osapuolelle, luettelo toisesta sovelluksesta haetuista tiedoista ja niin edelleen.<\/p>\n<p>Asia on siin\u00e4, ett\u00e4 arkisto tarjoaa puhtaan API:n, jolle liiketoimintalogiikka voi kirjoittaa ja josta voi lukea (ja lis\u00e4\u00e4 t\u00e4st\u00e4 hetkess\u00e4) ilman huolta siit\u00e4, mihin tiedot menev\u00e4t tai miten ne tulevat takaisin.<\/p>\n<p>Se on arkiston teht\u00e4v\u00e4. Ja siksi on t\u00e4rke\u00e4\u00e4, ett\u00e4 sovellusliittym\u00e4 on johdonmukainen, ja siksi on t\u00e4rke\u00e4\u00e4 varmistaa, ett\u00e4 sill\u00e4 on sen tietovaraston toteutustiedot, jonka kanssa se on vuorovaikutuksessa.<\/p>\n<h3>Kytkenn\u00e4ss\u00e4<\/h3>\n<p>Sen lis\u00e4ksi, ett\u00e4 sovelluksesi on segmentoitu oikein, arkistokuvio hy\u00f6dytt\u00e4\u00e4 arkkitehtuuria, koska se auttaa erottamaan sovelluksesi osat.<\/p>\n<p>Eli liiketoimintalogiikka ei tied\u00e4 mit\u00e4\u00e4n siit\u00e4, miten tai miss\u00e4 tiedot tallennetaan. Se vain tiet\u00e4\u00e4, ett\u00e4 se voi kirjoittaa sen ja hakea sen ja voi tehd\u00e4 sen puhtaan API:n avulla.<\/p>\n<p>Tietovarasto on vastuussa mainitun tietovaraston viestimisest\u00e4 sarjoittamista ja noutoa varten, mutta sen on tarjottava johdonmukainen API, joten tietokerroksen ei tarvitse tehd\u00e4 syntaksisia harjoituksia tietojensa lukemiseksi ja kirjoittamiseksi.<\/p>\n<h3>Toteutustiedot<\/h3>\n<p>T\u00e4h\u00e4n asti olen edustanut arkistoa konkreettisena luokkana.<\/p>\n<p>Asia on, ett\u00e4 sovelluksella on todenn\u00e4k\u00f6isesti useita tietovarastoja. Ja sen vuoksi on hyv\u00e4 idea olla rajapintoja, jotka jokainen arkisto voi toteuttaa.<\/p>\n<p>N\u00e4in m\u00e4\u00e4rit\u00e4t arkiston tarjoamien menetelmien sopimuksen. Ja t\u00e4ll\u00e4 tavalla voit varmistaa, ett\u00e4 jokainen arkisto on yhdistetty oikeaan tietovarastoon.<\/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=\"Arkiston mallin edut: miksi meid\u00e4n pit\u00e4isi harkita sit\u00e4\" ><\/a><\/p>\n<p>K\u00e4ytt\u00f6liittym\u00e4toteutus useille tietovarastoille.<\/p>\n<p>Oletetaan siis, ett\u00e4 sovelluksesi on keskusteltava WordPress-tietokannan sek\u00e4 kolmannen osapuolen API:n kanssa.<\/p>\n<p>Ihannetapauksessa k\u00e4ytt\u00f6liittym\u00e4 tarjoaisi yhteiset menetelm\u00e4t, mutta toteutustiedot vaihtelevat arkiston mukaan, koska jokaisella arkistolla on tarvittavat valtuustiedot ja kyky kommunikoida tietovaraston kanssa.<\/p>\n<p>Eteneminen k\u00e4ytt\u00f6liittym\u00e4\u00e4n on kuitenkin se, mik\u00e4 antaa kuviolle sen voiman. Verkkotunnuksen logiikan ei tarvitse huolehtia siit\u00e4, kuinka tiedot tallennetaan tai miten ne haetaan. Se yksinkertaisesti kutsuu k\u00e4ytt\u00f6liittym\u00e4ss\u00e4 m\u00e4\u00e4ritellyt menetelm\u00e4t ja tarvittava objekti huolehtii siit\u00e4.<\/p>\n<p>Se yksinkertaisesti kutsuu k\u00e4ytt\u00f6liittym\u00e4ss\u00e4 m\u00e4\u00e4ritellyt menetelm\u00e4t ja tarvittava objekti huolehtii siit\u00e4.<\/p>\n<h2>Milt\u00e4 t\u00e4m\u00e4 n\u00e4ytt\u00e4isi WordPressiss\u00e4?<\/h2>\n<p>T\u00e4m\u00e4 on hyv\u00e4 kysymys (ja ei, en keksinyt sit\u00e4 vain vastatakseni siihen itse \ud83d\ude42), ja voi olla vaikea antaa loistavaa esimerkki\u00e4, koska niin suuri osa tekemisist\u00e4mme on vuorovaikutuksessa suoraan WordPress-tietokannan kanssa.<\/p>\n<p>T\u00e4m\u00e4 ei tarkoita, etteik\u00f6 voisi k\u00e4ytt\u00e4\u00e4 abstraktioita, kuten viestej\u00e4, sivuja, k\u00e4ytt\u00e4ji\u00e4 tai mit\u00e4 tahansa muita mukautettuja viestityyppej\u00e4, joita valitsemme luoda.<\/p>\n<p>Mutta WordPress tarjoaa API:n suurelle osalle t\u00e4st\u00e4. N\u00e4en tapauksen, jossa esimerkiksi k\u00e4ytt\u00e4j\u00e4, jolla on lis\u00e4kentti\u00e4, voisi hy\u00f6ty\u00e4 k\u00e4ytt\u00e4j\u00e4varastosta.<\/p>\n<p>Tai mukautettu postaustyyppi, jossa on paljon metatietoja, voisi my\u00f6s hy\u00f6ty\u00e4 arkistosta, jos tiedot on kapseloitu arkistoon.<\/p>\n<h3>Korkean tason esimerkki<\/h3>\n<p>Oletetaan esimerkiksi, ett\u00e4 sinulla on tapahtumalle mukautettu viestityyppi, ja tapahtumalla on otsikko ja kuvaus, jotka luonnollisesti sopivat postauksen otsikkoon ja sis\u00e4lt\u00f6\u00f6n.<\/p>\n<p>Mutta sitten sill\u00e4 on metatiedot sijainnistaan, alkamisajasta, p\u00e4\u00e4ttymisajasta ja niin edelleen. Tietovarasto voi my\u00f6s kapseloida sen, jotta sinulla voisi olla Tapahtuma-objekti, v\u00e4litt\u00e4\u00e4 se arkistoon ja antaa arkiston l\u00e4hett\u00e4\u00e4 tiedot oikeaan paikkaan tietokannassa.<\/p>\n<p>Ja sama p\u00e4tee tietojen hakemiseen: Se tiet\u00e4\u00e4, mist\u00e4 ne saa, miten tapahtumaobjekti t\u00e4ytet\u00e4\u00e4n ja palautetaan sitten soittajalle.<\/p>\n<h2>Takaisin raiteilleen<\/h2>\n<p>Mutta kaikki t\u00e4m\u00e4 tapahtumasta puhuminen on menossa hieman aiheen vierest\u00e4, joten ehk\u00e4 jatkan keskustelua siit\u00e4 ja kuinka se sopii arkiston kanssa jatkopostauksessa. On selv\u00e4\u00e4, ett\u00e4 kun puhutaan t\u00e4st\u00e4, on paljon katettavaa.<\/p>\n<p>Otan sen mieluummin pienin askelin<\/p>\n<p>Lyhyesti sanottuna, jos sinulla on tapahtumatietovarasto, sinulla on todenn\u00e4k\u00f6isesti tapahtumaobjekti tai tapahtumakokonaisuus. Ja se, miten t\u00e4m\u00e4 sopii WordPressiin, mukautettuihin viestityyppeihin, metatietoihin ja niin edelleen, tuo monimutkaisuuden tason, joka saattaa aluksi tuntua pelottavalta, mutta lopulta kannattaa, kun ty\u00f6skentelet suuremman verkkosovelluksen kanssa.<\/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>Katsotaanpa joitain arkiston mallin etuja ja kuinka voimme toteuttaa sen WordPress-projektien yhteydess\u00e4.<\/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":[719,917,843],"tags":[1166],"class_list":["post-229476","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-muut","category-opetusohjelmia","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229476","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=229476"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229476\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/223872"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}