{"id":230831,"date":"2022-12-19T15:11:00","date_gmt":"2022-12-19T12:11:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230831"},"modified":"2022-12-07T10:05:05","modified_gmt":"2022-12-07T07:05:05","slug":"wordpressi-programmeerimine-murede-eraldamine","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-programmeerimine-murede-eraldamine\/","title":{"rendered":"WordPressi programmeerimine: murede eraldamine"},"content":{"rendered":"\n<p>Kui r\u00e4\u00e4kida WordPressi pistikprogrammide jaoks klasside loomisest, on minult k\u00fcsitud, miks ma viitsin funktsionaalsust tellijateks ja muudeks klassideks eraldada.<\/p>\n<p>Ma arvan, et see on hea k\u00fcsimus, sest see aitab m\u00f5ista kahte asja:<\/p>\n<ol>\n<li>abonendi roll seoses WordPressi arhitektuuriga,<\/li>\n<li>teiste klasside roll seoses sellega, mida te ehitate (ja kuidas see v\u00f5ib aidata muudel asjadel, nagu \u00fcksuse testimine ja nii edasi).<\/li>\n<\/ol>\n<p>Seega m\u00f5tlesin, et miks mitte vastata l\u00fchikese postituse vormis? See dokumenteerib p\u00f5hjuse mis taga [ja see annab mulle koha v\u00e4rskendamiseks, kui asjad tulevikus muutuvad].<\/p>\n<h2>WordPressi programmeerimine: abonendid ja domeeniobjektid<\/h2>\n<p>Pean klasse, mis ei ole abonemendi domeeniobjektid, p\u00e4rinevad domeenip\u00f5hise disaini tarkvaraarenduse l\u00e4henemisviisist.<\/p>\n<p>See ei kuulu selle postituse ulatusse, kuid tasub mainida, kui mitte muul p\u00f5hjusel, et see annab konteksti sellele, mida muidu \u017eargooniks peetakse.<\/p>\n<h3>1 tellijat<\/h3>\n<p>Aga k\u00f5igepealt tellijad.<\/p>\n<p>Kuna WordPress p\u00f5hineb konkss\u00fcsteemil \u2013 s\u00fcsteemil, mis p\u00f5hineb s\u00fcndmusep\u00f5hisel kujundusmustril \u2013, on kasulik omada klassi, mis reageerib iga kord, kui s\u00fcndmus t\u00f5statatakse.<\/p>\n<p>See v\u00f5ib olla mis tahes eelm\u00e4\u00e4ratletud WordPressi konksu v\u00f5i mis tahes kohandatud konksu jaoks. Vahet pole.<\/p>\n<p>Ja ma ei taha tundi muuta keerulisemaks kui vaja, nii et ma kipun neist m\u00f5tlema j\u00e4rgmiselt:<\/p>\n<p>Tellija vastab alati, kui konkreetne s\u00fcndmus juhtub.<\/p>\n<p>Ja see ongi k\u00f5ik. See s\u00fcndmus v\u00f5ib olla midagi sellist nagu <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> v\u00f5i <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/the_content\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">the_content<\/a> v\u00f5i isegi <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/init\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">init<\/a>. Vahet pole.<\/p>\n<p>See ootab s\u00fcndmuse toimumist ja reageerib sellele, mida me otsustame, kasutades muud koodi (see on koht, kus domeeniobjektid tulevad m\u00e4ngu).<\/p>\n<h3>2 domeeniobjekti<\/h3>\n<p>Neid v\u00f5ib nimetada ka \u00e4riobjektideks v\u00f5i millekski sarnaseks. Nende idee on j\u00e4rgmine:<\/p>\n<p>K\u00f5ik, mida me objektorienteeritud programmeerimises teeme, on m\u00f5eldud konkreetse probleemi lahendamiseks ja seda tehakse teatud t\u00fc\u00fcpi objekti kaudu, mis esindab reaalse maailma objekti v\u00f5i v\u00e4hemalt konkreetset ideed.<\/p>\n<p>Seega, kui t\u00f6\u00f6tate selle nimel, et pakkuda kellelegi lahendust, on klassid, mida kirjutate \u2013 objektid, mis nendest saab, kui need luuakse \u2013 domeeniobjektid.<\/p>\n<p>Need on ka klassid, mis teevad tegelikku t\u00f6\u00f6d. Nii et v\u00f5ite seda m\u00f5elda kolmes komponendis:<\/p>\n<ol>\n<li><strong>WordPress<\/strong>. P\u00f5hirakendus muidugi, mis t\u00f5stab s\u00fcndmuse, millele tellijad reageerivad.<\/li>\n<li><strong>Tellijad<\/strong>. Klasside kogum, mis vastutab konkreetse s\u00fcndmuse kuulamise ja seej\u00e4rel koodi k\u00e4sitlemiseks sobiva objekti leidmise eest.<\/li>\n<li><strong>Domeeniobjektid<\/strong>. Kood, mis tegelikult teeb andmekogumi v\u00f5tmise, sellega opereerimise ja seej\u00e4rel potentsiaalse v\u00e4\u00e4rtuse tagastamise.<\/li>\n<\/ol>\n<p>Domeeniobjektid on koht, kus elab millegi tegeliku tegemise kood. Tellijad on nagu \u00fchendus WordPressi ja nimetatud funktsioonide vahel.<\/p>\n<p>Tellijad \u00fctlevad: &quot;See s\u00fcndmus on juhtunud ja see klass on v\u00f5imeline ja vastutab selle tulemuste k\u00e4sitlemise eest.&quot;<\/p>\n<h2>Aga testimine ja nii edasi?<\/h2>\n<p>Postituses varem r\u00e4\u00e4kisin, kuidas domeeniobjektid on seotud \u00fcksuse testimise ja muude kvaliteedikontrolliga seotud programmeerimistehnikatega.<\/p>\n<p>Kuigi see postitus pole \u00fcksikasjade jaoks, tasub mainida, et domeeniobjektide ja tellijate \u00fcksteisest (ja omakorda WordPressist) lahti\u00fchendamine v\u00f5imaldab meil luua, testida ja t\u00f6\u00f6tada objekte, mida kutsub esile tellijaid, ilma et oleks vaja WordPressi meie t\u00f6\u00f6sse kaasata.<\/p>\n<p>Ja sellest v\u00f5ib suuremate lahenduste ehitamisel tohutult abi olla. Kuid sisu selle kohta, kuidas seda teha, on sisu m\u00f5ne teise postituse jaoks.<\/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>Kui r\u00e4\u00e4kida WordPressi programmeerimisest, eriti pistikprogrammide puhul, siis milleks on vaja eraldada funktsioone tellijateks ja muudeks klassideks?<\/p>\n","protected":false},"author":1,"featured_media":234935,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,833,863],"tags":[1165],"class_list":["post-230831","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-juhend-algajatele","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230831","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=230831"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230831\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/234935"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}