{"id":228835,"date":"2022-11-03T09:37:00","date_gmt":"2022-11-03T06:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228835"},"modified":"2022-11-09T04:33:33","modified_gmt":"2022-11-09T01:33:33","slug":"snabb-prototyping-med-wordpress-konceptanalys","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/snabb-prototyping-med-wordpress-konceptanalys\/","title":{"rendered":"Snabb prototyping med WordPress: konceptanalys"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/snabb-prototyping-med-wordpress-fraan-koncept-till-plugin\/\" title=\"I f\u00f6rra inl\u00e4gget\" >I f\u00f6rra inl\u00e4gget<\/a> b\u00f6rjade jag g\u00e5 igenom processen att ta id\u00e9n till ett plugin som snabbt prototypar det till n\u00e5got som fungerar inom WordPress. Och \u00e4ven om det fungerar, f\u00f6ljer det inte n\u00f6dv\u00e4ndigtvis n\u00e5gra objektorienterade principer, och det \u00e4r inte heller p\u00e5 ett st\u00e4lle d\u00e4r vi enkelt kan forts\u00e4tta att l\u00e4gga till funktioner.<\/p>\n<p>Nej, detta \u00e4r inte ett argument f\u00f6r varf\u00f6r objektorientering \u00e4r b\u00e4ttre. Det r\u00e5kar vara mitt f\u00f6redragna s\u00e4tt att skriva kod s\u00e5 jag n\u00e4rmar mig det s\u00e5 h\u00e4r.<\/p>\n<p>Jag vet att exempelkoden jag ger \u00e4r enkel och jag vet att man kan g\u00f6ra ett fall att n\u00e5got s\u00e5dant h\u00e4r kan l\u00e4mnas som det \u00e4r. Men po\u00e4ngen med detta \u00e4r att visa hur man tar ett koncept, prototypar det och sedan flyttar det till n\u00e5got som f\u00f6ljer objektorienterade principer.<\/p>\n<p>Och enligt min erfarenhet \u00e4r det mycket sv\u00e5rare att g\u00f6ra det med ett komplext exempel fr\u00e5n b\u00f6rjan. om du tappar l\u00e4sare fr\u00e5n b\u00f6rjan, vilket hopp finns det d\u00e5 f\u00f6r att de ska f\u00f6rst\u00e5 vad som kommer?<\/p>\n<p>S\u00e5 med det sagt, vi ska ta en titt p\u00e5 koden fr\u00e5n f\u00f6reg\u00e5ende inl\u00e4gg och g\u00f6ra lite av en konceptanalys p\u00e5 den f\u00f6r att se vad som kan fungera bra inom en klass och hur vi kan b\u00f6rja organisera den med hj\u00e4lp av klasser, <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/namnutrymmen-och-autoladdning-i-wordpress\/\" title=\"namnutrymmen\" >namnutrymmen<\/a> och s\u00e5 vidare.<\/p>\n<h2>Konceptanalys<\/h2>\n<p>N\u00e4rhelst det kommer till programmering \u00e4r det s\u00e5 l\u00e4tt att vilja hoppa in i att omedelbart skriva kod och sedan tjafsa om den till inl\u00e4mning tills den g\u00f6r n\u00e5got som vi vill.<\/p>\n<p>Och n\u00e4r det v\u00e4l fungerar k\u00e4nns det som att vi \u00e4r klara och vi kan g\u00e5 vidare till n\u00e4sta uppgift. Men f\u00f6r st\u00f6rre projekt \u00e4r det inte alltid s\u00e5. Faktum \u00e4r att det ofta \u00e4r b\u00e4ttre att g\u00f6ra lite konceptanalys av objektorienterad analys p\u00e5 din design innan du g\u00e5r vidare.<\/p>\n<p>Att bara hoppa in i kodning \u00e4r inte alltid det b\u00e4sta s\u00e4ttet.<\/p>\n<h3>Ett fall f\u00f6r analys<\/h3>\n<p>Exempel: N\u00e4r detta skrivs diskuterar jag och en av mina lagkamrater om vi ska ut\u00f6ka en klass eller skriva en ny klass f\u00f6r att hantera geolokaliseringsinformation f\u00f6r data h\u00e4mtade fr\u00e5n Google Maps API.<\/p>\n<p>Kan jag ving den och skriva n\u00e5got som fungerar? S\u00e4ker. Men kommer det att integreras bra med applikationen? Inte utan konceptanalys, planering och samordning med resten av systemet.<\/p>\n<p>Och det \u00e4r vad syftet med analysen handlar om.<\/p>\n<h3>Analysera v\u00e5rt arbete<\/h3>\n<p>S\u00e5 vad betyder detta f\u00f6r pluginet vi tittade p\u00e5 ig\u00e5r? Just nu har vi f\u00f6ljande:<\/p>\n<ul>\n<li>en funktion som ansvarar f\u00f6r att skapa en metabox och visa inneh\u00e5llet i den,<\/li>\n<li>en funktion f\u00f6r att s\u00f6ka i databasen och h\u00e4mta de senaste inl\u00e4ggen,<\/li>\n<li>en funktion f\u00f6r att visa resultaten i metarutan<\/li>\n<li>en funktion f\u00f6r att visa ett meddelande n\u00e4r det inte finns n\u00e5gra resultat i metarutan<\/li>\n<\/ul>\n<p>Vidare \u00e4r ett antal av dessa funktioner relaterade till krokar som \u00e4r en del av WordPress API. Funktionen f\u00f6r att skapa metaboxen \u00e4r n\u00e4mligen kopplad till WordPress och dess f\u00f6ljefunktion f\u00f6r att rendera displayen \u00e4r alla en del av samma komponent.<\/p>\n<p>Sedan har vi funktionalitet f\u00f6r att s\u00f6ka i databasen och vi har funktioner direkt relaterade till vyer.<\/p>\n<p>S\u00e5 hur skulle det h\u00e4r kunna se ut om vi skulle rita upp det h\u00e4r i olika klasser och filer som skulle hj\u00e4lpa till att skapa detta p\u00e5 ett mer objektorienterat s\u00e4tt?<\/p>\n<h3>Ingen enskild l\u00f6sning<\/h3>\n<p>Det finns ingen enskild l\u00f6sning och vissa l\u00f6sningar \u00e4r mycket mer avancerade \u00e4n andra. Men eftersom jag f\u00f6rs\u00f6ker hitta en balans h\u00e4r, kommer jag att n\u00e4rma mig det h\u00e4r p\u00e5 ett enklare s\u00e4tt \u00e4n att arbeta f\u00f6r mycket med abstraktion, arv, gr\u00e4nssnitt och allt det d\u00e4r.<\/p>\n<h3>Fokusera p\u00e5 det vi har<\/h3>\n<p>L\u00e5t oss nu fokusera p\u00e5 enskilda klasser och det ansvar de kan ha. Till exempel:<\/p>\n<ul>\n<li>Jag tror att vi kommer att beh\u00f6va en klass som representerar metaboxen. Detta b\u00f6r vara ansvarigt f\u00f6r att skapa metaboxen.<\/li>\n<li>Vi beh\u00f6ver ocks\u00e5 en klass som ansvarar f\u00f6r att visa inneh\u00e5llet i metaboxen. Du kanske tycker att det fungerar bra att inkludera en funktion i klassen f\u00f6r metaboxen. Det g\u00f6r det; men om du vill t\u00e4nka p\u00e5 att varje klass har ett enda ansvar, kan vi skapa en klass specifikt f\u00f6r displayen och specifikt f\u00f6r metaboxen, och sedan injicera displayen i metaboxen under instansieringen. Vi kommer att prata mer om detta senare.<\/li>\n<\/ul>\n<p>Vid det h\u00e4r laget kan v\u00e5rt diagram se ut ungef\u00e4r s\u00e5 h\u00e4r:<\/p>\n<p>Att bryta ner metaboxen.<\/p>\n<p>D\u00e4refter m\u00e5ste vi \u00f6verv\u00e4ga den andra funktionaliteten. N\u00e4mligen funktionaliteten f\u00f6r att visa resultaten i metarutan och funktionaliteten f\u00f6r att visa resultaten n\u00e4r det inte finns n\u00e5gra.<\/p>\n<p>F\u00f6r att kunna visa n\u00e5got i metarutan m\u00e5ste vi ha ett s\u00e4tt att fr\u00e5ga databasen f\u00f6r att h\u00e4mta resultaten. D\u00e4rifr\u00e5n m\u00e5ste vi sedan kunna ha ett s\u00e4tt att avg\u00f6ra om det finns resultat, om det inte finns det och sedan injicera dessa resultat i vyn.<\/p>\n<p>Med tanke p\u00e5 denna information l\u00e5ter det som att vi beh\u00f6ver en klass f\u00f6r att s\u00f6ka i databasen och sedan beh\u00f6ver vi en klass f\u00f6r att bredda ett meddelande till displayen i metarutan.<\/p>\n<p>Ett s\u00e4tt att organisera klasserna skulle kanske se ut s\u00e5 h\u00e4r:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166719-61e79938d88c8.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-166719-61e79938d88c8.png\" alt=\"Snabb prototyping med WordPress: konceptanalys\" ><\/a><\/p>\n<p>Fr\u00e5ga i databasen och f\u00f6rbereda meddelanden.<\/p>\n<p>Den slutliga versionen av diagrammet kan vara lite tr\u00e5ngt men vi tittar i slut\u00e4ndan p\u00e5 n\u00e5got s\u00e5 h\u00e4r:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166719-61e7993eaf874.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-166719-61e7993eaf874.png\" alt=\"Snabb prototyping med WordPress: konceptanalys\" ><\/a><\/p>\n<p>Den slutliga organisationen f\u00f6r v\u00e5ra klasser.<\/p>\n<p>F\u00f6r f\u00f6rklarings\u00e4ndam\u00e5l:<\/p>\n<ul>\n<li>Posth\u00e4mtaren fr\u00e5gar databasen efter de tre senaste inl\u00e4ggen.<\/li>\n<li>Postbudb\u00e4raren avg\u00f6r vilket meddelande som ska injiceras p\u00e5 displayen.<\/li>\n<li>Displayen visar meddelandet som har st\u00e4llts in.<\/li>\n<li>Metarutan \u00e5terger sin visning till webbl\u00e4saren.<\/li>\n<\/ul>\n<p>S\u00e5 vi har i princip tagit n\u00e5gra funktioner som kopplats till WordPress och delat upp dem i komponenter som kan kommunicera med varandra, som var och en \u00e4r relativt l\u00e4tt att arbeta med och inte g\u00f6r mer \u00e4n ett enda jobb.<\/p>\n<h2>Konvertera den till kod<\/h2>\n<p>Nu n\u00e4r vi har en id\u00e9 om hur vi kan konvertera det tidigare konceptet till kod, ska vi titta p\u00e5 hur man g\u00f6r det i de kommande artiklarna.<\/p>\n<p>Observera att hur du v\u00e4ljer att implementera din kod eller designa dina klasser kan vara lite annorlunda \u00e4n vad jag har ovan och du kan ha f\u00f6rslag p\u00e5 hur du b\u00e4ttre kan organisera det som st\u00e5r ovan. Om s\u00e5 \u00e4r fallet, l\u00e4mna en kommentar.<\/p>\n<p>I n\u00e4sta inl\u00e4gg kommer vi att titta p\u00e5 att konvertera detta till funktionell kod och efter det kommer vi att titta p\u00e5 att organisera detta i r\u00e4tt namnutrymmen och korrekt filorganisation.<\/p>\n<h2>Serie inl\u00e4gg<\/h2>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/snabb-prototyping-med-wordpress-fraan-koncept-till-plugin\/\" title=\"Snabb prototyping med WordPress: fr\u00e5n koncept till plugin\" >Snabb prototyping med WordPress: fr\u00e5n koncept till plugin<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/concept-analysis\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Snabb prototyping med WordPress: konceptanalys<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/rapid-prototyping-prototype-to-code-del-1\/\" title=\"Rapid Prototyping: Prototype To Code, del 1\">Rapid Prototyping: Prototype To Code, del 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/rapid-prototyping-prototype-to-code-del-2\/\" title=\"Rapid Prototyping: Prototype To Code, del 2\">Rapid Prototyping: Prototype To Code, del 2<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/rapid-prototyping-introduktion-av-autoloading\/\" title=\"Rapid Prototyping: Introduktion av Autoloading\">Rapid Prototyping: Introduktion av Autoloading<\/a><\/li>\n<\/ol>\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>Det \u00e4r ofta b\u00e4ttre att g\u00f6ra lite konceptanalys av objektorienterad analys p\u00e5 din design innan du g\u00e5r vidare.<\/p>\n","protected":false},"author":1,"featured_media":223990,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,922,724],"tags":[1173],"class_list":["post-228835","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-oevrig","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228835","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=228835"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228835\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/223990"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}