{"id":231378,"date":"2022-12-19T14:45:00","date_gmt":"2022-12-19T11:45:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231378"},"modified":"2022-12-07T10:05:07","modified_gmt":"2022-12-07T07:05:07","slug":"wordpress-ohjelmointi-huolenaiheiden-erottaminen","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-ohjelmointi-huolenaiheiden-erottaminen\/","title":{"rendered":"WordPress-ohjelmointi: huolenaiheiden erottaminen"},"content":{"rendered":"\n<p>Mit\u00e4 tulee luokkien luomiseen WordPress-laajennuksille, minulta on kysytty, miksi vaivaudun erottelemaan toimintoja tilaajiin ja muihin luokkiin.<\/p>\n<p>Mielest\u00e4ni t\u00e4m\u00e4 on hyv\u00e4 kysymys, koska se auttaa ymm\u00e4rt\u00e4m\u00e4\u00e4n kaksi asiaa:<\/p>\n<ol>\n<li>tilaajan rooli WordPress-arkkitehtuuriin liittyen,<\/li>\n<li>muiden luokkien rooli sen suhteen, mit\u00e4 olet rakentamassa (ja kuinka t\u00e4m\u00e4 voi auttaa muissa asioissa, kuten yksikk\u00f6testauksessa ja niin edelleen).<\/li>\n<\/ol>\n<p>Joten ajattelin, miksi en vastaisi lyhyen viestin muodossa? Se dokumentoi miksi-mit\u00e4 takana [ja se antaa minulle paikan p\u00e4ivitt\u00e4\u00e4, jos asiat muuttuvat tulevaisuudessa].<\/p>\n<h2>WordPress-ohjelmointi: Tilaajat ja verkkotunnuksen objektit<\/h2>\n<p>Pid\u00e4n luokat, jotka eiv\u00e4t ole tilaajaverkkoalueobjekteja, per\u00e4isin toimialuel\u00e4ht\u00f6isen suunnittelun ohjelmistokehitysl\u00e4hestymistavasta.<\/p>\n<p>Se ei kuulu t\u00e4m\u00e4n viestin soveltamisalaan, mutta mainitsemisen arvoinen, jos ei mist\u00e4\u00e4n muusta syyst\u00e4 antaa kontekstia sille, mit\u00e4 muuten pidett\u00e4isiin ammattikielt\u00e4.<\/p>\n<h3>1 tilaajaa<\/h3>\n<p>Mutta ensin tilaajat.<\/p>\n<p>Koska WordPress perustuu koukkuj\u00e4rjestelm\u00e4\u00e4n \u2013 tapahtumal\u00e4ht\u00f6iseen suunnittelumalliin perustuvaan j\u00e4rjestelm\u00e4\u00e4n \u2013 on hy\u00f6dyllist\u00e4, ett\u00e4 sinulla on luokka, joka reagoi aina, kun tapahtuma nostetaan esiin.<\/p>\n<p>T\u00e4m\u00e4 voi koskea mit\u00e4 tahansa ennalta m\u00e4\u00e4ritetty\u00e4 WordPress-koukkua tai mukautettuja koukkuja. Ei se mit\u00e4\u00e4n.<\/p>\n<p>Enk\u00e4 halua tehd\u00e4 luokasta monimutkaisempaa kuin on tarpeen, joten minulla on tapana ajatella niit\u00e4 n\u00e4in:<\/p>\n<p>Tilaaja vastaa aina, kun tietty tapahtuma tapahtuu.<\/p>\n<p>Ja siin\u00e4 se. T\u00e4m\u00e4 tapahtuma voi olla esimerkiksi <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/after_setup_theme\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">after_theme_setup<\/a> tai <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/the_content\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">the_content<\/a> tai jopa <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/init\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">init<\/a>. Ei sill\u00e4 ole v\u00e4li\u00e4.<\/p>\n<p>Se odottaa tapahtuman tapahtumista ja vastaa sitten mihin tahansa, mit\u00e4 p\u00e4\u00e4t\u00e4mme k\u00e4ytt\u00e4m\u00e4ll\u00e4 muuta koodia (jolloin verkkotunnuksen objektit tulevat peliin).<\/p>\n<h3>2 Domain Objects<\/h3>\n<p>N\u00e4it\u00e4 voidaan my\u00f6s kutsua liiketoimintaobjekteiksi tai vastaaviksi. Idea niiden takana on t\u00e4m\u00e4:<\/p>\n<p>Kaikki, mit\u00e4 teemme olio-ohjelmoinnissa, on tarkoitettu ratkaisemaan tietty ongelma, ja se on tarkoitus tehd\u00e4 jonkin tyyppisen objektin kautta, joka edustaa todellisen maailman objektia tai ainakin konkreettista ideaa.<\/p>\n<p>Joten aina kun yrit\u00e4t tarjota ratkaisua jollekulle, kirjoittamasi luokat \u2013 objektit, joista niist\u00e4 tulee, kun ne luodaan \u2013 ovat toimialueen objekteja.<\/p>\n<p>N\u00e4m\u00e4 ovat my\u00f6s luokat, jotka tekev\u00e4t varsinaista ty\u00f6t\u00e4. Joten voit ajatella sit\u00e4 kolmella osalla:<\/p>\n<ol>\n<li><strong>WordPress<\/strong>. Ydinsovellus tietysti her\u00e4tt\u00e4\u00e4 tapahtuman, johon tilaajat vastaavat.<\/li>\n<li><strong>Tilaajat<\/strong>. Luokkien joukko, joka vastaa tietyn tapahtuman kuuntelemisesta ja sitten oikean objektin luomisesta koodin k\u00e4sittelemiseksi.<\/li>\n<li><strong>Verkkotunnuksen objektit<\/strong>. Koodi, joka todella ottaa joukon dataa, k\u00e4ytt\u00e4\u00e4 sit\u00e4 ja mahdollisesti palauttaa arvon.<\/li>\n<\/ol>\n<p>Verkkotunnuksen objektit ovat siell\u00e4, miss\u00e4 koodi todella tehd\u00e4 jotain el\u00e4\u00e4. Tilaajat ovat kuin yhteys WordPressin ja mainitun toiminnallisuuden v\u00e4lill\u00e4.<\/p>\n<p>Tilaajat sanovat: &quot;T\u00e4m\u00e4 tapahtuma on tapahtunut ja ja t\u00e4m\u00e4 luokka kykenee ja vastaa k\u00e4sittelem\u00e4\u00e4n sen tuloksia.&quot;<\/p>\n<h2>Ent\u00e4 testaus ja niin edelleen?<\/h2>\n<p>Aiemmin postauksessa puhuin siit\u00e4, kuinka toimialueobjektit liittyv\u00e4t yksikk\u00f6testaukseen ja muihin laadunvalvontaan liittyviin ohjelmointitekniikoihin.<\/p>\n<p>Vaikka t\u00e4m\u00e4 ei olekaan yksityiskohtien viesti, on syyt\u00e4 mainita, ett\u00e4 verkkotunnuksen objektien ja tilaajien pit\u00e4minen irti toisistaan \u200b\u200b(ja vuorostaan \u200b\u200bWordPressist\u00e4) antaa meille mahdollisuuden luoda, testata ja ty\u00f6skennell\u00e4 objektien kanssa, joita tilaajia ilman, ett\u00e4 sinun tarvitsee ottaa WordPressi\u00e4 mukaan ty\u00f6h\u00f6n.<\/p>\n<p>Ja t\u00e4st\u00e4 voi olla valtavasti apua, kun rakennetaan suurempia ratkaisuja. Mutta sen tekemisen ydin on sis\u00e4lt\u00f6\u00e4 toiseen viestiin.<\/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>Mit\u00e4 tulee WordPress-ohjelmointiin, erityisesti lis\u00e4osien kanssa, miksi vaivautua erottelemaan toimintoja tilaajiin ja muihin luokkiin?<\/p>\n","protected":false},"author":1,"featured_media":234936,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,834,864],"tags":[1166],"class_list":["post-231378","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-opas-aloittelijoille","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231378","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=231378"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231378\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/234936"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}