{"id":228946,"date":"2022-11-03T19:47:00","date_gmt":"2022-11-03T16:47:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228946"},"modified":"2022-11-09T04:54:51","modified_gmt":"2022-11-09T01:54:51","slug":"hoidla-mustri-eelised-miks-peaksime-seda-kaaluma","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/hoidla-mustri-eelised-miks-peaksime-seda-kaaluma\/","title":{"rendered":"Hoidla mustri eelised: miks peaksime seda kaaluma"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/et\/hoidla-mustri-praimer\/\" title=\"Eile\" >Eile<\/a> andsin hoidla mustrile krundi. L\u00fchidalt \u00f6eldes on see \u00fcks neist mustritest, millest peaks minu arvates aru saama iga\u00fcks, kes t\u00f6\u00f6tab WordPressi peale ehitatud vahevaraga.<\/p>\n<p>Sellisele mustrile kruntv\u00e4rvi andmisel v\u00f5ib olla keeruline mustrile \u00f5iglust anda, kui teil on vaja:<\/p>\n<ul>\n<li>tutvustage seda,<\/li>\n<li>selgitage, kuidas see t\u00f6\u00f6tab,<\/li>\n<li>katta h\u00fcved,<\/li>\n<li>ja tee v\u00e4ike demo.<\/li>\n<\/ul>\n<p>Kuid hoidla tegelik eelis ei seisne mitte ainult andmekihi eraldamises \u00fclej\u00e4\u00e4nud rakendusest, vaid selles, et seda saab (v\u00f5i peaks) saama h\u00f5lpsasti vahetada erinevate andmesalvedega ilma API-d muutmata.<\/p>\n<p>N\u00e4iteks \u00fchel juhul peate v\u00f5ib-olla hankima andmed WordPressi andmebaasist, teistel juhtudel peate v\u00f5ib-olla hankima midagi kolmanda osapoole API-st v\u00f5i v\u00f5ib-olla on m\u00f5ni muu koht, kust peate andmeid hankima.<\/p>\n<p>Hoolimata sellest seisneb hoidla mustri idee selles, et mis iganes selle taga asub, ei oma t\u00e4htsust seni, kuni selle pakutav API t\u00f6\u00f6tab seda kutsuva rakenduse kihi jaoks.<\/p>\n<p>Ja kuna oleme k\u00e4sitlenud hoidla mustri aabitsat, vaatame m\u00f5nda hoidla mustri eelist ja seda, kuidas saaksime seda WordPressi projektide kontekstis rakendada.<\/p>\n<h2>Hoidla mustri eelised<\/h2>\n<p>Mustri selgitamise alustamiseks on m\u00f5ned viisid, seega alustan lihtsa diagrammiga:<\/p>\n<p>Hoidla mustri eelised h\u00f5lmavad andmehoidla abstraktsiooni<\/p>\n<p>Pange t\u00e4hele, et \u00fclaloleval pildil on kolm p\u00f5hikomponenti:<\/p>\n<ol>\n<li>domeeniloogika (v\u00f5i \u00e4riloogika), mille olen sildistanud rakenduseks,<\/li>\n<li>hoidla,<\/li>\n<li>andmehoidla,<\/li>\n<\/ol>\n<p>Rakenduse osas j\u00e4\u00e4vad \u00e4rireeglid alati suhteliselt j\u00e4rjepidevaks. V\u00e4hemalt peaksid, eks?<\/p>\n<p>Hoidla on see, mis toimib sidevahendina \u00e4riloogika ja andmesalve vahel.<\/p>\n<p>N\u00fc\u00fcd v\u00f5ib andmesalv olla andmebaas, v\u00f5ib-olla failide komplekt (mida ma ei soovitaks), API kolmandale osapoolele, teisest rakendusest hangitud teabe loend jne.<\/p>\n<p>Asi on selles, et hoidla pakub puhast API-d, millele \u00e4riloogika saab kirjutada ja millest lugeda (ja sellest hetkega rohkem), ilma et peaks muretsema \u00fcksikasjade p\u00e4rast, kuhu andmed liiguvad v\u00f5i kuidas need tagasi tulevad.<\/p>\n<p>See on hoidla \u00fclesanne. Ja see teebki oluliseks j\u00e4rjepideva API olemasolu ja just seet\u00f5ttu on oluline tagada, et sellel on selle andmesalve juurutamise \u00fcksikasjad, millega see suhtleb.<\/p>\n<h3>Sidumisel<\/h3>\n<p>Peale selle, et teie rakendus on \u00f5igesti segmenteeritud, on hoidla muster arhitektuurile kasulik, kuna see aitab teie rakenduse osi lahti siduda.<\/p>\n<p>See t\u00e4hendab, et \u00e4riloogika ei tea midagi selle kohta, kuidas v\u00f5i kus andmeid hoitakse. Ta lihtsalt teab, et suudab seda kirjutada ja hankida ning saab seda teha puhta API abil.<\/p>\n<p>Hoidla vastutab nimetatud andmesalve edastamise eest, et korraldada serialiseerimist ja otsimist, kuid see peab pakkuma \u00fchtset API-d, nii et andmekiht ei pea oma teabe lugemiseks ja kirjutamiseks s\u00fcntaksiharjutusi tegema.<\/p>\n<h3>Rakenduse \u00fcksikasjad<\/h3>\n<p>Kuni selle hetkeni olen esindanud hoidlat konkreetse klassina.<\/p>\n<p>Asi on selles, et rakendusel on t\u00f5en\u00e4oliselt mitu hoidlat. Ja seet\u00f5ttu on hea m\u00f5te omada liideseid, mida iga hoidla saab rakendada.<\/p>\n<p>Nii saate m\u00e4\u00e4ratleda hoidla pakutavate meetodite lepingu. Ja nii saate tagada, et iga hoidla on \u00fchendatud \u00f5ige andmesalvega.<\/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=\"Hoidla mustri eelised: miks peaksime seda kaaluma\" ><\/a><\/p>\n<p>Liidese teostus mitme hoidla jaoks.<\/p>\n<p>Oletame, et teie rakendus peab suhtlema nii WordPressi andmebaasiga kui ka kolmanda osapoole API-ga.<\/p>\n<p>Ideaaljuhul pakuks liides \u00fchtset meetodite komplekti, kuid juurutamise \u00fcksikasjad varieeruksid hoidlap\u00f5hiselt, kuna igal hoidlal on vajalikud mandaadid ja v\u00f5ime andmesalvega suhelda.<\/p>\n<p>Liidese edenemine annab aga mustrile selle j\u00f5u. Domeeniloogika ei pea muretsema selle p\u00e4rast, kuidas teavet salvestatakse v\u00f5i kuidas see v\u00e4lja tuuakse. See lihtsalt kutsub liideses m\u00e4\u00e4ratletud meetodeid ja vajalik objekt hoolitseb selle eest.<\/p>\n<p>See lihtsalt kutsub liideses m\u00e4\u00e4ratletud meetodeid ja vajalik objekt hoolitseb selle eest.<\/p>\n<h2>Kuidas see WordPressis v\u00e4lja n\u00e4eks?<\/h2>\n<p>See on hea k\u00fcsimus (ja ei, ma ei m\u00f5elnud seda v\u00e4lja lihtsalt selleks, et sellele ise vastata \ud83d\ude42) ja suurep\u00e4rast n\u00e4idet v\u00f5ib olla raske tuua, kuna suur osa meie tegemistest suhtleb otse WordPressi andmebaasiga.<\/p>\n<p>See ei t\u00e4henda, et meil poleks kasutada abstraktsioone, nagu postitused, lehed, kasutajad v\u00f5i mis tahes muud kohandatud postituse t\u00fc\u00fcbid, mille loomiseks otsustame.<\/p>\n<p>Kuid WordPress pakub suure osa jaoks API-d. N\u00e4en juhtumit, kus n\u00e4iteks kasutaja, kellel on lisatud t\u00e4iendavaid v\u00e4lju, v\u00f5iks kasu saada kasutajahoidlast.<\/p>\n<p>V\u00f5i v\u00f5ib hoidlast kasu saada ka kohandatud postituse t\u00fc\u00fcp, millel on palju metaandmeid, kuna \u00fcksikasjad on hoidlasse kapseldatud.<\/p>\n<h3>K\u00f5rgetasemeline n\u00e4ide<\/h3>\n<p>Oletagem n\u00e4iteks, et teil on s\u00fcndmuse jaoks kohandatud postituse t\u00fc\u00fcp ning s\u00fcndmuse pealkiri ja kirjeldus, mis loomulikult sobiksid postituse pealkirja ja postituse sisuga.<\/p>\n<p>Kuid siis on sellel metaandmed oma asukoha, algusaja, l\u00f5puaja ja muu kohta. Selle v\u00f5ib ka hoidla kapseldada, et saaksite omada s\u00fcndmuse objekti, edastada selle hoidlasse ja lasta hoidlal saata teave \u00f5igesse kohta andmebaasis.<\/p>\n<p>Sama kehtib ka teabe hankimise kohta: ta teab, kust seda hankida, kuidas s\u00fcndmuse objekti sisestada ja seej\u00e4rel helistajale tagasi anda.<\/p>\n<h2>Tagasi \u00f5igele teele<\/h2>\n<p>Kuid kogu see jutt s\u00fcndmusest l\u00e4heb teemast veidi k\u00f5rvale, nii et v\u00f5ib-olla j\u00e4tkan sellest r\u00e4\u00e4kimist ja sellest, kuidas see hoidlaga sobib, \u00fches j\u00e4relpostituses. Selge on see, et sellest r\u00e4\u00e4kides on palju k\u00e4sitleda.<\/p>\n<p>Ma eelistan seda teha v\u00e4iksemate sammudega<\/p>\n<p>L\u00fchidalt, kui teil on s\u00fcndmuste hoidla, on teil t\u00f5en\u00e4oliselt s\u00fcndmuse objekt v\u00f5i s\u00fcndmuse olem. Ja kuidas see sobib WordPressi, kohandatud postitust\u00fc\u00fcpide, metaandmete ja muuga, toob kaasa keerukuse taseme, mis v\u00f5ib alguses tunduda hirmutav, kuid l\u00f5puks tasub end \u00e4ra suurema veebirakendusega t\u00f6\u00f6tades.<\/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>Vaatame m\u00f5ningaid hoidla mustri eeliseid ja seda, kuidas saaksime seda WordPressi projektide kontekstis rakendada.<\/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":[718,916,842],"tags":[1165],"class_list":["post-228946","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-muud","category-opetused","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=228946"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228946\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/223872"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}