{"id":229468,"date":"2022-11-02T18:17:00","date_gmt":"2022-11-02T15:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229468"},"modified":"2022-11-09T07:13:20","modified_gmt":"2022-11-09T04:13:20","slug":"arkiston-kuviopohja","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/arkiston-kuviopohja\/","title":{"rendered":"Arkiston kuviopohja"},"content":{"rendered":"\n<p>Aina kun ty\u00f6skentelet suuremman WordPressiin perustuvan projektin parissa, todenn\u00e4k\u00f6isyys, ett\u00e4 ty\u00f6skentelet useamman kuin yhden tietol\u00e4hteen \u2013 eli WordPress-tietokannan \u2013 kanssa, on normaalia korkeampi. Saatat esimerkiksi ty\u00f6skennell\u00e4 projektin parissa, jonka on koordinoitava tietoja:<\/p>\n<ul>\n<li>WordPress-tietokanta,<\/li>\n<li>help desk -lippuj\u00e4rjestelm\u00e4,<\/li>\n<li>sis\u00e4ll\u00f6n tuontij\u00e4rjestelm\u00e4,<\/li>\n<li>toinen kolmannen osapuolen sovellusliittym\u00e4,<\/li>\n<li>ja mahdollista muutakin.<\/li>\n<\/ul>\n<p>Ja kun n\u00e4in tapahtuu, voi tulla hieman hankalaa kirjoittaa koodia, jonka avulla on helppo hakea tietoa eri paikoista. T\u00e4st\u00e4 kehitt\u00e4j\u00e4t yleens\u00e4 puhuvat, kun he viittaavat &quot;tasojen&quot; k\u00e4sittelyyn sovelluksessaan.<\/p>\n<ul>\n<li>on kerroksia tietojen esitt\u00e4miseksi k\u00e4ytt\u00e4j\u00e4lle,<br \/>\nkerroksia liiketoimintalogiikan (tai toimialueen logiikan) k\u00e4sittelemiseksi,<\/li>\n<li>kerrokset kommunikointiin API:iden kanssa,<\/li>\n<li>ja kerrokset tietojen tallentamista varten.<\/li>\n<\/ul>\n<p>Rehellisesti sanottuna sinun ei tarvitse olla useita tietovarastoja katsellaksesi luodaksesi kerroksen, joka helpottaa tietojen l\u00e4hett\u00e4mist\u00e4 ja hakemista tietokannasta, juuri silloin se on yleisemp\u00e4\u00e4. Voit yht\u00e4 tehokkaasti ty\u00f6skennell\u00e4 yksitt\u00e4isen tietovaraston, kuten WordPress-tietokannan, kanssa, kun toteutat arkistomallia.<\/p>\n<p>Siit\u00e4 huolimatta, jos olet rakentamassa suurempaa verkkosivustoa, verkkosovellusta tai laajennusta, arkistomallin toteuttaminen voi maksaa yll\u00e4pidon, koodin selkeyden ja huolenaiheiden erottamisen.<\/p>\n<p>Mutta miten t\u00e4m\u00e4 voidaan toteuttaa WordPressiss\u00e4? Se ei ole hirve\u00e4n haastavaa, mutta ensin kannattaa tarkistaa arkiston aluke ennen kuin hypp\u00e4\u00e4t mihink\u00e4\u00e4n koodiin.<\/p>\n<h2>Varastokuviopohjamaali<\/h2>\n<p>Ennen kuin tarkastelet todellista toteutusta WordPressiss\u00e4, on t\u00e4rke\u00e4\u00e4 ymm\u00e4rt\u00e4\u00e4, mik\u00e4 arkisto on, miten se on m\u00e4\u00e4ritelty, mit\u00e4 se tarjoaa ja sen yleinen toteutus. Jaan lis\u00e4\u00e4 luettavaa artikkelin lopussa, mutta siihen asti k\u00e4sittelen yleist\u00e4 n\u00e4kemyst\u00e4ni mallista t\u00e4\u00e4ll\u00e4.<\/p>\n<p>Ensinn\u00e4kin t\u00e4m\u00e4n mallin toteuttamisesta voi tulla monimutkaisempi kuin aloittelijoille on tarpeen. T\u00e4m\u00e4 ei tarkoita, etteik\u00f6 varsinainen kuvio olisi ymm\u00e4rt\u00e4misen arvoinen, mutta jos haluat vain kastella itse\u00e4si t\u00e4ll\u00e4, en ole lukijoiden heitt\u00e4misen yst\u00e4v\u00e4 syv\u00e4\u00e4n. En usko, ett\u00e4 se on paras tapa oppia.<\/p>\n<p>Sen sijaan kannattaa purkaa ongelma ja rakentaa se sitten uudelleen hieman tyylikk\u00e4\u00e4mm\u00e4ksi. Joten se on se, mit\u00e4 aion tehd\u00e4.<\/p>\n<h3>Sana irrottamisesta<\/h3>\n<p>Kun puhutaan olio-ohjelmoinnista, puhumme usein ajatuksesta &quot;irrottaa&quot; j\u00e4rjestelm\u00e4n osia. Jos tunnet <a href=\"https:\/\/8thlight.com\/blog\/uncle-bob\/2014\/05\/08\/SingleReponsibilityPrinciple.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kytkenn\u00e4n ja koheesion<\/a>, tied\u00e4t miksi.<\/p>\n<p>Mutta jos ei, riitt\u00e4\u00e4, kun totean, ett\u00e4 mit\u00e4 enemm\u00e4n j\u00e4rjestelm\u00e4n komponentit on kytketty, sit\u00e4 vaikeampi on muuttaa niit\u00e4. He tiet\u00e4v\u00e4t liikaa toisistaan. Eli jos muutat jotakin j\u00e4rjestelm\u00e4n osa-aluetta, se todenn\u00e4k\u00f6isesti kaskadee tai vaikuttaa j\u00e4rjestelm\u00e4n toiseen osaan, jota et koskaan tarkoittanut tapahtuvan. Sitten sinun on k\u00e4ytett\u00e4v\u00e4 paljon enemm\u00e4n aikaa kaikkien n\u00e4iden muiden &quot;kosketuspisteiden&quot; korjaamiseen koko j\u00e4rjestelm\u00e4ss\u00e4, mink\u00e4 ei pit\u00e4isi olla tarpeellista.<\/p>\n<p>Erilaisten strategioiden, kuten arkiston mallin, k\u00e4ytt\u00f6\u00f6notto voi auttaa irrottamaan j\u00e4rjestelm\u00e4n osia. Esimerkki: Esityskerros ei tied\u00e4, miten taustalla oleva tietovarasto on organisaatio. Sen ei tarvitse osata SQL:\u00e4\u00e4. Sen ei tarvitse tiet\u00e4\u00e4, ett\u00e4 se on tietokanta. Sen sijaan sen on vain osattava puhua arkiston kanssa.<\/p>\n<p>Hienoa, eik\u00f6?<\/p>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 voit vaihtaa taustatietos\u00e4il\u00f6n ja olettaen, ett\u00e4 API on vakaa; sovelluksesi toimii edelleen ilman muutoksia. Ja sit\u00e4 tarkoittaa olla todella irrotettu.<\/p>\n<h3>Arkistomallin toteutus<\/h3>\n<p>Milt\u00e4 arkiston malli sitten n\u00e4ytt\u00e4\u00e4? Kuten useimmissa suunnittelumalleissa, kuviossa on yleinen muoto, ja se on aina hy\u00f6dyllist\u00e4, mutta mielest\u00e4ni se auttaa my\u00f6s meit\u00e4 WordPressiss\u00e4 ty\u00f6skentelevi\u00e4 n\u00e4kem\u00e4\u00e4n, kuinka se voisi toimia WordPressin yhteydess\u00e4.\u00a0<\/p>\n<p>Joten ensin haluan hajottaa itse kuvion ja antaa sitten esimerkin siit\u00e4, milt\u00e4 se saattaa n\u00e4ytt\u00e4\u00e4 ty\u00f6skennelless\u00e4ni WordPressin kanssa.<\/p>\n<h3>Arkistomallin yleinen toteutus<\/h3>\n<p>Arkistomallin varsinainen toteutus on melko yksinkertaista. Itse asiassa en ole koskaan varma, onko se niin hy\u00f6dyllinen, koska se n\u00e4ytt\u00e4\u00e4 vain, kuinka tietovarastot, arkisto ja muu sovellus ovat vuorovaikutuksessa kesken\u00e4\u00e4n.<\/p>\n<p>\u00c4l\u00e4 ymm\u00e4rr\u00e4 minua v\u00e4\u00e4rin: kannatan k\u00e4sitteellisi\u00e4 malleja asioiden j\u00e4rjest\u00e4misest\u00e4. Henkil\u00f6kohtaisesti se auttaa minua miettim\u00e4\u00e4n sovelluksen rakennetta sit\u00e4 rakentaessani, mutta jos se on liian yleinen, siit\u00e4 ei ole paljon apua.<\/p>\n<p>Mutta p\u00e4\u00e4st\u00e4ksemme konkreettiseen toteutukseen meid\u00e4n on aloitettava jostain, eik\u00f6 niin? Joten aloitan korkeimmalla mahdollisella tasolla ja ty\u00f6skentelen alasp\u00e4in.<\/p>\n<p>Kuten yll\u00e4 olevasta kuvasta n\u00e4kyy, sinulla on pari tietovarastoa, jotka kaikki luetaan arkiston kautta, ja sitten sovellus kysyy arkistosta, joka puolestaan \u200b\u200bhakee tietoja tietovarastosta.<\/p>\n<p>Kyll\u00e4, on vaihtoehtoja tallentaa tiedot v\u00e4limuistiin, mit\u00e4t\u00f6id\u00e4 v\u00e4limuisti ja kaikkea muuta hauskaa. Mutta se ei kuulu arkiston ensisijaisen piiriin. Joten en aio menn\u00e4 t\u00e4ll\u00e4 tiell\u00e4 toistaiseksi. Ehk\u00e4 jossain tulevassa postauksessa (jos t\u00e4m\u00e4 osoittautuu hy\u00f6dylliseksi sinulle).<\/p>\n<h2>Arkistomalli WordPressiss\u00e4<\/h2>\n<p>T\u00e4m\u00e4n j\u00e4lkeen katsotaanpa perustoteutusta siit\u00e4, milt\u00e4 t\u00e4m\u00e4 voisi n\u00e4ytt\u00e4\u00e4 tavallisessa WordPress-asennuksessa. Eli kaikki, mit\u00e4 meill\u00e4 on, on tietovarasto. Emme kommunikoi mink\u00e4\u00e4n muun kanssa, mutta haluamme varmistaa, ett\u00e4 arkisto k\u00e4sittelee kaiken, mik\u00e4 liittyy tietokantaan tai API:hen.<\/p>\n<p>T\u00e4m\u00e4 n\u00e4ytt\u00e4isi suunnilleen t\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166793-61e79a689f876.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-166793-61e79a689f876.png\" alt=\"Arkiston kuviopohja\" ><\/a><\/p>\n<p>Milt\u00e4 se voisi n\u00e4ytt\u00e4\u00e4 WordPressin kanssa<\/p>\n<p>Ja t\u00e4t\u00e4 voidaan abstraktoida viel\u00e4 pidemm\u00e4lle. Ehk\u00e4 siell\u00e4 on viestivarasto tai k\u00e4ytt\u00e4j\u00e4arkisto. Henkil\u00f6kohtaisesti pid\u00e4n arkistosta jokaiselle entiteettityypille, koska se auttaa hillitsem\u00e4\u00e4n liittyv\u00e4\u00e4 liiketoimintalogiikkaa luomatta niit\u00e4 suuria luokkia, jotka tiet\u00e4v\u00e4t kaiken (ja tarpeettomasti).<\/p>\n<p>T\u00e4m\u00e4 voi siis n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166793-61e79a6e78654.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-166793-61e79a6e78654.png\" alt=\"Arkiston kuviopohja\" ><\/a><\/p>\n<p>Arkiston paketti<\/p>\n<p>Nostetaan sitten viel\u00e4 yksi taso ja sanotaan, ett\u00e4 ty\u00f6skentelet Twitter API:n, ZenDesk API:n, WordPress User API:n ja WordPress Post API:n kanssa. Mit\u00e4 sitten? Tietovarastoja on enemm\u00e4n.<\/p>\n<p>Ehk\u00e4 ne sis\u00e4ltyv\u00e4t nimiavaruuteensa (mik\u00e4 niiden pit\u00e4isi olla), ehk\u00e4 ne toteuttavat yhteist\u00e4 k\u00e4ytt\u00f6liittym\u00e4\u00e4 (jolle on syyt\u00e4), mutta kehitysvaiheessa mielest\u00e4ni on t\u00e4rke\u00e4\u00e4 kertoa selke\u00e4sti, mit\u00e4 arkistoa k\u00e4yt\u00e4t. jotta se olisi mahdollisimman selke\u00e4.<\/p>\n<p>Eli \u00e4l\u00e4 k\u00e4yt\u00e4 yleist\u00e4 ja anna suoritusajan selvitt\u00e4\u00e4 se:<\/p>\n<pre><code>$support_repository = new Support_Repository();\n$support_repository-&gt;get_tickets_for( 'tommcfarlin' );<\/code><\/pre>\n<p>Ole sen sijaan selke\u00e4:<\/p>\n<pre><code>$zendesk_repository = new ZenDesk_Repository();\n$zendesk_repository-&gt;get_tickets_from( 'yesterday' );<\/code><\/pre>\n<p>T\u00e4m\u00e4 saattaa tuntua paljon. En tied\u00e4, koetko t\u00e4m\u00e4n, mutta olio-ohjelmoinnissa on outo tunne, kun haluamme luoda pieni\u00e4, kohdennettuja luokkia, mutta se luo paljon tiedostoja.<\/p>\n<p>Joten sinulla on n\u00e4m\u00e4 siististi asetetut tiedostot, joista jokainen tekee jotain pient\u00e4 ja tarkoituksenmukaista. \u00c4l\u00e4 anna projektin muodostavien tiedostojen m\u00e4\u00e4r\u00e4n antaa vaikutelmaa, ett\u00e4 sinulla on huono arkkitehtuuri.<\/p>\n<h2>Johtop\u00e4\u00e4t\u00f6s<\/h2>\n<p>T\u00e4m\u00e4 on arkiston kuvion aluke. Luonnollisesti t\u00e4h\u00e4n liittyy koodia, mutta ennen kuin sukelsin siihen osaan \u2013 koska koodissa asiat, jotka h\u00e4vi\u00e4v\u00e4t helposti k\u00e4\u00e4nn\u00f6ksiss\u00e4 \u2013 halusin varmistaa, ett\u00e4 autin antamaan havainnollistamisen k\u00e4sitteellisen mallin kehitt\u00e4misess\u00e4 mallin toiminnasta.<\/p>\n<p>T\u00e4st\u00e4 eteenp\u00e4in voimme alkaa puhua mallin toteutuksesta. Joten seuraavan postauksen tai parin seuraavan postauksen aikana aion tehd\u00e4 juuri niin.<\/p>\n<p>Sill\u00e4 v\u00e4lin \u00e4l\u00e4 ep\u00e4r\u00f6i j\u00e4tt\u00e4\u00e4 kommentteja tai kysymyksi\u00e4 siit\u00e4, mit\u00e4 t\u00e4\u00e4ll\u00e4 on k\u00e4sitelty.<\/p>\n<h2>Aiheeseen liittyv\u00e4\u00e4 lukemista<\/h2>\n<ul>\n<li><a href=\"https:\/\/8thlight.com\/blog\/mike-ebert\/2013\/03\/23\/the-repository-pattern.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Varastomalli 8th Lightin kautta<\/a><\/li>\n<li><a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ff649690.aspx\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Arkistomalli MSDN:n kautta<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/clean\/repository\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Arkistomallin toteutus<\/a><\/li>\n<\/ul>\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>Arkistomallin toteuttaminen ei ole hirve\u00e4n vaikeaa, mutta arkiston aluke kannattaa tarkistaa ennen kuin hypp\u00e4\u00e4t mihink\u00e4\u00e4n koodiin.<\/p>\n","protected":false},"author":1,"featured_media":223973,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,917,843],"tags":[1166],"class_list":["post-229468","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-muut","category-opetusohjelmia","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229468","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=229468"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229468\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/223973"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}