{"id":228937,"date":"2022-11-02T18:53:00","date_gmt":"2022-11-02T15:53:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228937"},"modified":"2022-11-09T04:52:31","modified_gmt":"2022-11-09T01:52:31","slug":"hoidla-mustri-praimer","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/hoidla-mustri-praimer\/","title":{"rendered":"Hoidla mustri praimer"},"content":{"rendered":"\n<p>Kui t\u00f6\u00f6tate suurema WordPressil p\u00f5hineva projekti kallal, on t\u00f5en\u00e4osus, et t\u00f6\u00f6tate rohkem kui \u00fche andmeallikaga \u2013 st WordPressi andmebaasiga \u2013 tavalisest suurem. N\u00e4iteks v\u00f5ite t\u00f6\u00f6tada projekti kallal, mis peab koordineerima teavet:<\/p>\n<ul>\n<li>WordPressi andmebaas,<\/li>\n<li>kasutajatoe piletim\u00fc\u00fcgis\u00fcsteem,<\/li>\n<li>sisu importimise s\u00fcsteem,<\/li>\n<li>muu kolmanda osapoole API,<\/li>\n<li>ja v\u00f5imalik rohkemgi.<\/li>\n<\/ul>\n<p>Ja kui see juhtub, v\u00f5ib olla veidi t\u00fclikas kirjutada koodi, mis h\u00f5lbustab teabe hankimist erinevatest kohtadest. Sellest tavaliselt r\u00e4\u00e4givad arendajad, kui nad viitavad oma rakenduses &quot;kihtide&quot; k\u00e4sitlemisele.<\/p>\n<ul>\n<li>on kihid teabe esitamiseks kasutajale,<br \/>\nkihid \u00e4riloogika (v\u00f5i domeeniloogika) k\u00e4sitlemiseks,<\/li>\n<li>API-dega suhtlemise kihid,<\/li>\n<li>ja kihid andmete salvestamiseks.<\/li>\n<\/ul>\n<p>Ausalt \u00f6eldes ei pea te j\u00e4lgimiseks omama erinevaid andmesalve, et luua kiht, mis lihtsustab andmete saatmist ja sealt v\u00e4ljav\u00f5tmist, just siis on see tavalisem. Hoidla mustri rakendamisel saate sama t\u00f5husalt t\u00f6\u00f6tada \u00fche andmesalvega, n\u00e4iteks WordPressi andmebaasiga.<\/p>\n<p>Olenemata sellest, kui loote suuremat veebisaiti, veebirakendust v\u00f5i pistikprogrammi, v\u00f5ib hoidla mustri rakendamine teenida kasu hoolduse, koodi selguse ja probleemide eraldamise osas.<\/p>\n<p>Kuid kuidas saaks seda WordPressis rakendada? See ei ole v\u00e4ga keeruline, kuid k\u00f5igepealt tasub enne mis tahes koodi juurde h\u00fcppamist \u00fcle vaadata hoidla aabits.<\/p>\n<h2>Hoidla mustri kruntv\u00e4rv<\/h2>\n<p>Enne WordPressi tegeliku juurutamise vaatamist on oluline m\u00f5ista, mis hoidla on, kuidas see on m\u00e4\u00e4ratletud, mida see pakub ja selle \u00fcldist juurutust. Jagan artikli l\u00f5pus t\u00e4iendavat lugemist, kuid seni k\u00e4sitlen siin oma \u00fcldist mustrit.<\/p>\n<p>Esiteks v\u00f5ib selle mustri rakendamine muutuda algajatele vajalikust keerulisemaks. See ei t\u00e4henda, et tegelik muster ei v\u00e4\u00e4riks m\u00f5istmist, kuid kui tahate end sellega lihtsalt m\u00e4rjaks saada, ei ole ma lugejate s\u00fcgavasse otsa viskamise f\u00e4nn. Ma ei arva, et see on parim viis \u00f5ppimiseks.<\/p>\n<p>Selle asemel tasub probleem lahti murda ja siis see millekski veidi elegantsemaks \u00fcmber ehitada. Nii et see on see, mida ma kavatsen teha.<\/p>\n<h3>M\u00f5ni s\u00f5na lahtisidumise kohta<\/h3>\n<p>Objektorienteeritud programmeerimisest r\u00e4\u00e4kides r\u00e4\u00e4gime sageli s\u00fcsteemi osade lahtisidumise ideest. Kui olete <a href=\"https:\/\/8thlight.com\/blog\/uncle-bob\/2014\/05\/08\/SingleReponsibilityPrinciple.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sidumise ja \u00fchtekuuluvusega<\/a> tuttav, siis teate, miks.<\/p>\n<p>Kui aga mitte, siis piisab, kui \u00f6elda, et mida rohkem \u00fchendatud on teie s\u00fcsteemi komponendid, seda raskem on neid muuta. Nad teavad \u00fcksteisest liiga palju. See t\u00e4hendab, et kui muudate m\u00f5nda s\u00fcsteemi aspekti, siis t\u00f5en\u00e4oliselt l\u00e4heb see kaskaadiks v\u00f5i m\u00f5jutab s\u00fcsteemi teist osa, mida te kunagi ei kavatsenud juhtuda. Siis j\u00e4\u00e4te \u00fcle, kui peate kulutama palju rohkem aega k\u00f5igi nende muude &quot;puutepunktide&quot; parandamisele kogu s\u00fcsteemis, mis ei peaks olema vajalik.<\/p>\n<p>Erinevate strateegiate (nt hoidla muster) rakendamine v\u00f5ib aidata s\u00fcsteemi osi lahti siduda. N\u00e4ide: esitluskiht ei tea, kuidas selle aluseks olev andmesalv on organiseeritud. See ei pea SQL-i teadma. See ei pea teadma, et see on andmebaas. Selle asemel peab see lihtsalt teadma, kuidas hoidlaga r\u00e4\u00e4kida.<\/p>\n<p>Tore, eks?<\/p>\n<p>See t\u00e4hendab, et saate taustaandmete salve v\u00e4lja vahetada ja eeldusel, et teie API on kindel; teie rakendus j\u00e4tkab t\u00f6\u00f6tamist ilma muudatusteta. Ja seda t\u00e4hendabki olla t\u00f5eliselt lahutatud.<\/p>\n<h3>Hoidla mustri rakendamine<\/h3>\n<p>Kuidas siis hoidla muster v\u00e4lja n\u00e4eb? Nagu enamiku kujundusmustrite puhul, on mustril ka \u00fcldine vorm ja see on alati kasulik, kuid ma arvan, et see aitab ka meil, kes WordPressis t\u00f6\u00f6tavad, n\u00e4ha, kuidas see v\u00f5iks WordPressi kontekstis t\u00f6\u00f6tada.\u00a0<\/p>\n<p>Esiteks tahan ma mustri enda lahti teha ja seej\u00e4rel tuua n\u00e4ite, milline see WordPressiga t\u00f6\u00f6tades v\u00e4lja n\u00e4eb.<\/p>\n<h3>Hoidla mustri \u00fcldine teostus<\/h3>\n<p>Hoidla mustri tegelik rakendamine on \u00fcsna lihtne. Tegelikult pole ma kunagi kindel, kas see on nii kasulik, sest see lihtsalt n\u00e4itab, kuidas andmesalved, hoidla ja \u00fclej\u00e4\u00e4nud rakendus omavahel suhtlevad.<\/p>\n<p>\u00c4rge saage minust valesti aru: pooldan asjade korraldamise kontseptuaalseid mudeleid. Minul isiklikult aitab see rakenduse ehitamisel m\u00f5elda selle \u00fclesehitusele, aga kui see on liiga \u00fcldine, pole sellest palju abi.<\/p>\n<p>Kuid selleks, et j\u00f5uda konkreetse t\u00f6\u00f6vahendini, peame kuskilt alustama, eks? Nii et alustan v\u00f5imalikult k\u00f5rgelt tasemelt ja t\u00f6\u00f6tan allapoole.<\/p>\n<p>Nagu n\u00e4ete \u00fclaltoodud pildil, on teil paar andmesalvet, mida k\u00f5iki loetakse hoidla kaudu, ja seej\u00e4rel teeb rakendus hoidlast p\u00e4ringu, mis omakorda hangib andmesalvest teavet.<\/p>\n<p>Jah, on v\u00f5imalusi teabe vahem\u00e4llu salvestamiseks, vahem\u00e4lu kehtetuks muutmiseks ja muuks muuks l\u00f5busaks. Kuid see on v\u00e4ljaspool hoidla esmase funktsiooni ulatust. Nii et ma ei l\u00e4he praegu sellele konkreetsele teele. V\u00f5ib-olla m\u00f5nes tulevases postituses (kui see peaks teile kasulikuks osutuma).<\/p>\n<h2>WordPressi hoidla muster<\/h2>\n<p>Seda arvestades vaatame p\u00f5hirakendust selle kohta, kuidas see standardse WordPressi installi puhul v\u00e4lja n\u00e4eb. See t\u00e4hendab, et meil on ainult andmesalv. Me ei suhtle millegi muuga, kuid tahame olla kindlad, et hoidla k\u00e4sitleb k\u00f5ike, mis on liidesega andmebaasi v\u00f5i API-ga<\/p>\n<p>See n\u00e4eks v\u00e4lja umbes selline:<\/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=\"Hoidla mustri praimer\" ><\/a><\/p>\n<p>Kuidas see WordPressiga v\u00e4lja n\u00e4eb<\/p>\n<p>Ja seda saab veelgi abstraktsemalt v\u00f5tta. V\u00f5ib-olla on seal postituste hoidla v\u00f5i kasutajate hoidla. Isiklikult olen selle f\u00e4nn, et igat t\u00fc\u00fcpi olemi jaoks on hoidla, kuna see aitab kaasata seotud \u00e4riloogikale, ilma et tekiks suuri klasse, mis teavad k\u00f5ike (ja asjatult).<\/p>\n<p>Nii et see v\u00f5ib v\u00e4lja n\u00e4ha selline:<\/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=\"Hoidla mustri praimer\" ><\/a><\/p>\n<p>Hoidlate pakett<\/p>\n<p>Seej\u00e4rel t\u00f5stkem see veel \u00fche taseme v\u00f5rra k\u00f5rgemale ja \u00fctleme, et t\u00f6\u00f6tate Twitteri API, ZenDeski API, WordPressi kasutaja API ja WordPress Posti API-ga. Siis mida? Hoidlaid on rohkem.<\/p>\n<p>V\u00f5ib-olla sisalduvad need nende nimeruumis (mis nad peaksid olema), v\u00f5ib-olla rakendavad nad \u00fchist liidest (mille jaoks on selleks p\u00f5hjus), kuid arenduse ajal on minu arvates oluline selgelt \u00f6elda, millist hoidlat te kasutate. et see oleks v\u00f5imalikult selge.<\/p>\n<p>See t\u00e4hendab, et \u00e4rge kasutage \u00fcldist ja laske k\u00e4itusajal see v\u00e4lja m\u00f5elda:<\/p>\n<pre><code>$support_repository = new Support_Repository();\n$support_repository-&gt;get_tickets_for( 'tommcfarlin' );<\/code><\/pre>\n<p>Selle asemel olge selges\u00f5naline:<\/p>\n<pre><code>$zendesk_repository = new ZenDesk_Repository();\n$zendesk_repository-&gt;get_tickets_from( 'yesterday' );<\/code><\/pre>\n<p>See v\u00f5ib tunduda palju. Ma ei tea, kas te seda kogete, kuid objektorienteeritud programmeerimisel on veider tunne, kus me tahame luua v\u00e4ikseid, keskendunud klasse, kuid see loob palju faile.<\/p>\n<p>Nii et teil on need korralikult seadistatud failid, millest iga\u00fcks teeb midagi v\u00e4ikest ja sihip\u00e4rast. \u00c4rge laske projekti koostavate failide arvul j\u00e4tta muljet, et teil on kehv arhitektuur.<\/p>\n<h2>J\u00e4reldus<\/h2>\n<p>See on hoidla mustri praimer. Loomulikult on sellega kaasas kood, kuid enne sellesse ossa sukeldumist \u2013 kuna kood on koht, kus asjad l\u00e4hevad t\u00f5lkimisel kergesti kaduma \u2013 tahtsin veenduda, et aitasin luua illustratsiooni mustri toimimise kontseptuaalse mudeli v\u00e4ljat\u00f6\u00f6tamiseks.<\/p>\n<p>Siit saame hakata r\u00e4\u00e4kima mustri rakendamisest. Nii et j\u00e4rgmise postituse v\u00f5i paari j\u00e4rgmise postituse jooksul teen t\u00e4pselt seda.<\/p>\n<p>Seni \u00e4rge k\u00f5helge j\u00e4tke kommentaare v\u00f5i k\u00fcsimusi siin k\u00e4sitletu kohta.<\/p>\n<h2>Seotud lugemine<\/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\">Hoidla muster 8. valguse kaudu<\/a><\/li>\n<li><a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ff649690.aspx\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hoidla muster MSDN-i kaudu<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/clean\/repository\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Hoidla mustri rakendamine<\/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>Hoidla mustri juurutamine ei ole v\u00e4ga raske, kuid enne mis tahes koodi juurde h\u00fcppamist tasub hoidla aabits \u00fcle vaadata.<\/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":[718,894,916,842],"tags":[1165],"class_list":["post-228937","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-muud","category-opetused","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228937","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=228937"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228937\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/223973"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228937"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228937"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}