{"id":230784,"date":"2022-12-19T15:07:00","date_gmt":"2022-12-19T12:07:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230784"},"modified":"2022-11-09T23:58:40","modified_gmt":"2022-11-09T20:58:40","slug":"wordpress-programmering-separera-bekymmer","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-programmering-separera-bekymmer\/","title":{"rendered":"WordPress-programmering: Separera bekymmer"},"content":{"rendered":"\n<p>N\u00e4r det kommer till att skapa klasser f\u00f6r WordPress-plugins har jag f\u00e5tt fr\u00e5gan om varf\u00f6r jag bryr mig om att dela upp funktionalitet i prenumeranter och i andra klasser.<\/p>\n<p>Jag tycker att det h\u00e4r \u00e4r en bra fr\u00e5ga eftersom det hj\u00e4lper att f\u00f6rst\u00e5 tv\u00e5 saker:<\/p>\n<ol>\n<li>rollen som en prenumerant n\u00e4r det g\u00e4ller WordPress-arkitekturen,<\/li>\n<li>de andra klassernas roll n\u00e4r det g\u00e4ller vad det \u00e4r du bygger (och hur detta kan hj\u00e4lpa till med andra saker som enhetstestning och s\u00e5 vidare).<\/li>\n<\/ol>\n<p>S\u00e5 jag t\u00e4nkte varf\u00f6r inte svara i form av ett kort inl\u00e4gg? Det kommer att dokumentera varf\u00f6r bakom vad [och det kommer att ge mig en plats att uppdatera om saker f\u00f6r\u00e4ndras i framtiden].<\/p>\n<h2>WordPress-programmering: Prenumeranter och dom\u00e4nobjekt<\/h2>\n<p>Jag betraktar klasserna som inte \u00e4r abonnentdom\u00e4nobjekt som kommer fr\u00e5n mjukvaruutvecklingsmetoden f\u00f6r dom\u00e4ndriven design.<\/p>\n<p>Det ligger utanf\u00f6r ramen f\u00f6r detta inl\u00e4gg men v\u00e4rt att n\u00e4mna om det inte av n\u00e5gon annan anledning ger ett sammanhang till vad som annars skulle betraktas som jargong.<\/p>\n<h3>1 prenumeranter<\/h3>\n<p>Men f\u00f6rst, prenumeranter.<\/p>\n<p>Eftersom WordPress \u00e4r baserat kring ett hook-system \u2013 ett system som \u00e4r baserat p\u00e5 det h\u00e4ndelsedrivna designm\u00f6nstret \u2013 \u00e4r det bra att ha en klass som reagerar p\u00e5 n\u00e4r en h\u00e4ndelse tas upp.<\/p>\n<p>Detta kan vara f\u00f6r alla f\u00f6rdefinierade WordPress-krokar eller alla anpassade krokar. Det spelar ingen roll.<\/p>\n<p>Och jag vill inte g\u00f6ra klassen mer komplicerad \u00e4n n\u00f6dv\u00e4ndigt s\u00e5 jag tenderar att t\u00e4nka p\u00e5 dem s\u00e5 h\u00e4r:<\/p>\n<p>En abonnent svarar n\u00e4rhelst en specifik h\u00e4ndelse intr\u00e4ffar.<\/p>\n<p>Och det \u00e4r allt. Denna h\u00e4ndelse kan vara n\u00e5got som <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> eller <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/the_content\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">the_content<\/a> eller till och med <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/init\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">init<\/a>. Det spelar ingen roll.<\/p>\n<p>Den v\u00e4ntar p\u00e5 att en h\u00e4ndelse ska intr\u00e4ffa och svarar sedan p\u00e5 vad vi \u00e4n best\u00e4mmer genom att anv\u00e4nda annan kod (vilket \u00e4r d\u00e4r dom\u00e4nobjekt kommer in i bilden).<\/p>\n<h3>2 dom\u00e4nobjekt<\/h3>\n<p>Dessa kan ocks\u00e5 kallas aff\u00e4rsobjekt eller n\u00e5got liknande. Tanken bakom dem \u00e4r denna:<\/p>\n<p>Allt som vi g\u00f6r i objektorienterad programmering \u00e4r t\u00e4nkt att l\u00f6sa ett visst problem och det \u00e4r menat att g\u00f6ra det genom n\u00e5gon typ av objekt som representerar ett verkligt objekt eller \u00e5tminstone en konkret id\u00e9.<\/p>\n<p>S\u00e5 n\u00e4rhelst du arbetar med att tillhandah\u00e5lla en l\u00f6sning f\u00f6r n\u00e5gon, \u00e4r klasserna som du skriver \u2013 objekten de blir n\u00e4r de instansieras \u2013 dom\u00e4nobjekten.<\/p>\n<p>Det \u00e4r ocks\u00e5 de klasser som g\u00f6r sj\u00e4lva arbetet. S\u00e5 du kan t\u00e4nka p\u00e5 det i tre komponenter:<\/p>\n<ol>\n<li><strong>WordPress<\/strong>. K\u00e4rnapplikationen, naturligtvis, v\u00e4cker h\u00e4ndelsen som prenumeranterna svarar p\u00e5.<\/li>\n<li><strong>Prenumeranter<\/strong>. Upps\u00e4ttningen klasser som \u00e4r ansvariga f\u00f6r att lyssna efter en specifik h\u00e4ndelse och sedan instansiera r\u00e4tt objekt f\u00f6r att hantera koden.<\/li>\n<li><strong>Dom\u00e4nobjekt<\/strong>. Koden som faktiskt g\u00f6r jobbet med att ta en upps\u00e4ttning data, arbeta p\u00e5 den och sedan eventuellt returnera ett v\u00e4rde.<\/li>\n<\/ol>\n<p>Dom\u00e4nobjekten \u00e4r d\u00e4r koden f\u00f6r att faktiskt g\u00f6ra n\u00e5got bor. Prenumeranterna \u00e4r som kopplingen mellan WordPress och n\u00e4mnda funktionalitet.<\/p>\n<p>Prenumeranter s\u00e4ger &quot;Denna h\u00e4ndelse har h\u00e4nt och och den h\u00e4r klassen \u00e4r kapabel och ansvarig f\u00f6r att hantera resultaten av den.&quot;<\/p>\n<h2>Hur \u00e4r det med tester och s\u00e5 vidare?<\/h2>\n<p>Tidigare i inl\u00e4gget pratade jag om hur dom\u00e4nobjekt \u00e4r relaterade till enhetstestning och andra kvalitetskontrollrelaterade programmeringstekniker.<\/p>\n<p>\u00c4ven om det h\u00e4r inte \u00e4r inl\u00e4gget f\u00f6r detaljerna \u00e4r det v\u00e4rt att n\u00e4mna att genom att h\u00e5lla dom\u00e4nobjekt och prenumeranter frikopplade fr\u00e5n varandra (och i sin tur fr\u00e5n WordPress) kan vi instansiera, testa och arbeta med objekt som anropas av prenumeranter utan att beh\u00f6va ta med WordPress i v\u00e5rt arbete.<\/p>\n<p>Och detta \u00e4r n\u00e5got som kan vara oerh\u00f6rt anv\u00e4ndbart n\u00e4r man bygger st\u00f6rre l\u00f6sningar. Men k\u00e4rnan i hur man g\u00f6r det \u00e4r inneh\u00e5ll f\u00f6r ett annat inl\u00e4gg.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>N\u00e4r det kommer till WordPress-programmering, s\u00e4rskilt med plugins, varf\u00f6r bry sig om att dela upp funktionalitet i prenumeranter och i andra klasser?<\/p>\n","protected":false},"author":1,"featured_media":234943,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[838,724,868],"tags":[1173],"class_list":["post-230784","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-foer-nyboerjare","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230784"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230784\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/234943"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}