{"id":228837,"date":"2022-11-03T09:39:00","date_gmt":"2022-11-03T06:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228837"},"modified":"2022-11-09T04:35:50","modified_gmt":"2022-11-09T01:35:50","slug":"szybkie-prototypowanie-z-wordpress-analiza-koncepcji","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-z-wordpress-analiza-koncepcji\/","title":{"rendered":"Szybkie prototypowanie z WordPress: analiza koncepcji"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-z-wordpress-od-koncepcji-do-wtyczki\/\" title=\"W poprzednim po\u015bcie\" >W poprzednim po\u015bcie<\/a> zacz\u0105\u0142em przechodzi\u0107 przez proces przekszta\u0142cania pomys\u0142u na wtyczk\u0119, kt\u00f3ra szybko j\u0105 prototypuje, w co\u015b, co dzia\u0142a w WordPressie. I chocia\u017c to dzia\u0142a, niekoniecznie jest zgodne z zasadami zorientowanymi obiektowo, ani nie jest to miejsce, w kt\u00f3rym mo\u017cemy \u0142atwo dodawa\u0107 funkcje.<\/p>\n<p>Nie, to nie jest argument, dlaczego orientacja obiektowa jest lepsza. Tak si\u0119 sk\u0142ada, \u017ce \u200b\u200bjest to m\u00f3j ulubiony spos\u00f3b pisania kodu, wi\u0119c podchodz\u0119 do tego w ten spos\u00f3b.<\/p>\n<p>Wiem, \u017ce przyk\u0142adowy kod, kt\u00f3ry podaj\u0119, jest prosty i wiem, \u017ce mo\u017cna sprawi\u0107, \u017ce co\u015b takiego mo\u017cna pozostawi\u0107 bez zmian. Ale chodzi o to, aby pokaza\u0107, jak wzi\u0105\u0107 koncepcj\u0119, stworzy\u0107 jej prototyp, a nast\u0119pnie przenie\u015b\u0107 j\u0105 do czego\u015b, co jest zgodne z zasadami zorientowanymi obiektowo.<\/p>\n<p>Z mojego do\u015bwiadczenia wynika, \u017ce \u200b\u200bjest to o wiele trudniejsze od samego pocz\u0105tku na z\u0142o\u017conym przyk\u0142adzie. je\u015bli stracisz czytelnik\u00f3w od samego pocz\u0105tku, to jaka jest nadzieja, \u017ce \u200b\u200bzrozumiej\u0105, co nadchodzi?<\/p>\n<p>Maj\u0105c to na uwadze, przyjrzymy si\u0119 kodowi z poprzedniego postu i przeprowadzimy na nim troch\u0119 analizy koncepcji, aby zobaczy\u0107, co mo\u017ce dobrze dzia\u0142a\u0107 w klasie i jak mo\u017cemy zacz\u0105\u0107 organizowa\u0107 j\u0105 za pomoc\u0105 klas, <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/przestrzenie-nazw-i-automatyczne-ladowanie-w-wordpress\/\" title=\"przestrzenie nazw\" >przestrzenie nazw<\/a> i tak dalej.<\/p>\n<h2>Analiza koncepcji<\/h2>\n<p>Kiedykolwiek przychodzi do programowania, tak \u0142atwo jest chcie\u0107 natychmiast przej\u015b\u0107 do pisania kodu, a nast\u0119pnie zmusi\u0107 go do z\u0142o\u017cenia, a\u017c zrobi co\u015b, czego chcemy.<\/p>\n<p>A kiedy to zadzia\u0142a, wydaje si\u0119, \u017ce sko\u0144czyli\u015bmy i mo\u017cemy przej\u015b\u0107 do nast\u0119pnego zadania. Ale w przypadku wi\u0119kszych projekt\u00f3w nie zawsze tak jest. W rzeczywisto\u015bci cz\u0119sto lepiej jest przeprowadzi\u0107 troch\u0119 analizy koncepcji analizy obiektowej w swoim projekcie przed przej\u015bciem do przodu.<\/p>\n<p>Proste przej\u015bcie do kodowania nie zawsze jest najlepszym podej\u015bciem.<\/p>\n<h3>Przypadek do analizy<\/h3>\n<p>Przyk\u0142ad: w momencie pisania tego tekstu, jeden z moich koleg\u00f3w z zespo\u0142u i ja dyskutujemy, czy powinni\u015bmy rozszerzy\u0107 klas\u0119, czy napisa\u0107 now\u0105 klas\u0119 do obs\u0142ugi informacji o geolokalizacji dla danych pobranych z Google Maps API.<\/p>\n<p>Czy mog\u0119 to zrobi\u0107 i napisa\u0107 co\u015b, co dzia\u0142a? Pewny. Ale czy dobrze zintegruje si\u0119 z aplikacj\u0105? Nie bez analizy koncepcji, planowania i koordynacji z reszt\u0105 systemu.<\/p>\n<p>I o to w\u0142a\u015bnie chodzi w analizie.<\/p>\n<h3>Analizowanie naszej pracy<\/h3>\n<p>Wi\u0119c co to oznacza dla wtyczki, kt\u00f3r\u0105 ogl\u0105dali\u015bmy wczoraj? W tej chwili mamy:<\/p>\n<ul>\n<li>funkcja odpowiedzialna za tworzenie metaboxa i wy\u015bwietlanie w nim zawarto\u015bci,<\/li>\n<li>funkcja odpytywania bazy danych i pobierania ostatnich najnowszych post\u00f3w,<\/li>\n<li>funkcja wy\u015bwietlania wynik\u00f3w w metabox<\/li>\n<li>funkcja do wy\u015bwietlania wiadomo\u015bci, gdy w meta polu nie ma wynik\u00f3w<\/li>\n<\/ul>\n<p>Co wi\u0119cej, wiele z tych funkcji jest powi\u0105zanych z hookami, kt\u00f3re s\u0105 cz\u0119\u015bci\u0105 API WordPressa. Mianowicie, funkcja tworzenia metaboxa jest pod\u0142\u0105czona do WordPressa, a towarzysz\u0105ca mu funkcja renderowania wy\u015bwietlacza jest cz\u0119\u015bci\u0105 tego samego komponentu.<\/p>\n<p>Nast\u0119pnie mamy funkcjonalno\u015b\u0107 do odpytywania bazy danych oraz funkcje bezpo\u015brednio zwi\u0105zane z widokami.<\/p>\n<p>Jak wi\u0119c mog\u0142oby to wygl\u0105da\u0107, gdyby\u015bmy podzielili to na r\u00f3\u017cne klasy i pliki, kt\u00f3re pomog\u0142yby stworzy\u0107 to w spos\u00f3b bardziej zorientowany obiektowo?<\/p>\n<h3>Brak jednego rozwi\u0105zania<\/h3>\n<p>Nie ma jednego rozwi\u0105zania, a niekt\u00f3re rozwi\u0105zania s\u0105 znacznie bardziej zaawansowane ni\u017c inne. Ale poniewa\u017c staram si\u0119 zachowa\u0107 r\u00f3wnowag\u0119, zamierzam podej\u015b\u0107 do tego w prostszy spos\u00f3b ni\u017c za du\u017co pracy z abstrakcj\u0105, dziedziczeniem, interfejsami i tym wszystkim.<\/p>\n<h3>Koncentrowanie si\u0119 na tym, co mamy<\/h3>\n<p>Na razie skupmy si\u0119 na poszczeg\u00f3lnych zaj\u0119ciach i obowi\u0105zkach, jakie mog\u0105 pe\u0142ni\u0107. Na przyk\u0142ad:<\/p>\n<ul>\n<li>My\u015bl\u0119, \u017ce b\u0119dziemy potrzebowa\u0107 klasy, kt\u00f3ra reprezentuje pole meta. Powinno to by\u0107 odpowiedzialne za stworzenie pola meta.<\/li>\n<li>B\u0119dziemy te\u017c potrzebowa\u0107 klasy odpowiedzialnej za wy\u015bwietlanie zawarto\u015bci pola meta. Mo\u017cesz pomy\u015ble\u0107, \u017ce do\u0142\u0105czenie funkcji do klasy dla pola meta dzia\u0142a dobrze. To robi; je\u015bli jednak chcesz my\u015ble\u0107 o ka\u017cdej klasie jako o pojedynczej odpowiedzialno\u015bci, mo\u017cemy utworzy\u0107 klas\u0119 specjalnie dla wy\u015bwietlacza i specjalnie dla pola meta, a nast\u0119pnie wstrzykn\u0105\u0107 ekran do pola meta podczas tworzenia instancji. Porozmawiamy o tym p\u00f3\u017aniej.<\/li>\n<\/ul>\n<p>W tym momencie nasz diagram mo\u017ce wygl\u0105da\u0107 mniej wi\u0119cej tak:<\/p>\n<p>Rozk\u0142adanie meta boxu.<\/p>\n<p>Nast\u0119pnie musimy rozwa\u017cy\u0107 inn\u0105 funkcjonalno\u015b\u0107. Mianowicie funkcjonalno\u015b\u0107 wy\u015bwietlania wynik\u00f3w w polu meta i funkcjonalno\u015b\u0107 wy\u015bwietlania wynik\u00f3w, gdy ich nie ma.<\/p>\n<p>Aby wy\u015bwietli\u0107 cokolwiek w polu meta, musimy mie\u0107 spos\u00f3b na zapytanie bazy danych w celu pobrania wynik\u00f3w. Stamt\u0105d musimy by\u0107 w stanie okre\u015bli\u0107, czy istniej\u0105 wyniki, a je\u015bli nie, a nast\u0119pnie wprowadzi\u0107 te wyniki do widoku.<\/p>\n<p>Bior\u0105c pod uwag\u0119 te informacje, wygl\u0105da na to, \u017ce potrzebujemy klasy do odpytywania bazy danych, a nast\u0119pnie potrzebujemy klasy, aby rozszerzy\u0107 komunikat na wy\u015bwietlanie pola meta.<\/p>\n<p>By\u0107 mo\u017ce jeden ze sposob\u00f3w organizacji zaj\u0119\u0107 wygl\u0105da\u0142by tak:<\/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=\"Szybkie prototypowanie z WordPress: analiza koncepcji\" ><\/a><\/p>\n<p>Przeszukiwanie bazy danych i przygotowywanie wiadomo\u015bci.<\/p>\n<p>Ostateczna wersja diagramu mo\u017ce by\u0107 troch\u0119 ciasna, ale ostatecznie patrzymy na co\u015b takiego:<\/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=\"Szybkie prototypowanie z WordPress: analiza koncepcji\" ><\/a><\/p>\n<p>Ostateczna organizacja naszych zaj\u0119\u0107.<\/p>\n<p>Do cel\u00f3w wyja\u015bnienia:<\/p>\n<ul>\n<li>Program pobieraj\u0105cy posty pyta baz\u0119 danych o ostatnie trzy najnowsze posty.<\/li>\n<li>Komunikator pocztowy okre\u015bli, kt\u00f3r\u0105 wiadomo\u015b\u0107 wstawi\u0107 na wy\u015bwietlacz.<\/li>\n<li>Wy\u015bwietlacz wy\u015bwietli ustawiony komunikat.<\/li>\n<li>Metabox wyrenderuje swoje wy\u015bwietlanie w przegl\u0105darce internetowej.<\/li>\n<\/ul>\n<p>Wi\u0119c zasadniczo wzi\u0119li\u015bmy kilka funkcji, kt\u00f3re by\u0142y pod\u0142\u0105czone do WordPressa i podzielili\u015bmy je na komponenty, kt\u00f3re mog\u0105 si\u0119 ze sob\u0105 komunikowa\u0107, z kt\u00f3rych ka\u017cda jest stosunkowo \u0142atwa w obs\u0142udze i nie wykonuje wi\u0119cej ni\u017c jednej pracy.<\/p>\n<h2>Konwersja na kod<\/h2>\n<p>Teraz, gdy mamy pomys\u0142, jak przekonwertowa\u0107 poprzedni\u0105 koncepcj\u0119 na kod, przyjrzymy si\u0119, jak to zrobi\u0107 w kilku nast\u0119pnych artyku\u0142ach.<\/p>\n<p>Zauwa\u017c, \u017ce spos\u00f3b, w jaki zdecydujesz si\u0119 zaimplementowa\u0107 sw\u00f3j kod lub zaprojektowa\u0107 swoje klasy, mo\u017ce by\u0107 nieco inny ni\u017c to, co mam powy\u017cej i mo\u017cesz mie\u0107 sugestie, jak lepiej zorganizowa\u0107 to, co powy\u017cej. Je\u015bli tak jest, zostaw komentarz.<\/p>\n<p>W nast\u0119pnym po\u015bcie przyjrzymy si\u0119 przekszta\u0142ceniu tego w funkcjonalny kod, a nast\u0119pnie przyjrzymy si\u0119 zorganizowaniu tego we w\u0142a\u015bciwe przestrzenie nazw i w\u0142a\u015bciw\u0105 organizacj\u0119 plik\u00f3w.<\/p>\n<h2>Posty z serii<\/h2>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-z-wordpress-od-koncepcji-do-wtyczki\/\" title=\"Szybkie prototypowanie z WordPress: od koncepcji do wtyczki\" >Szybkie prototypowanie z WordPress: od koncepcji do wtyczki<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/concept-analysis\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Szybkie prototypowanie z WordPress: analiza koncepcji<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-prototypowanie-do-kodu-czesc-1\/\" title=\"Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 1\">Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-prototypowanie-do-kodu-czesc-2\/\" title=\"Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 2\">Szybkie prototypowanie: Prototypowanie do kodu, cz\u0119\u015b\u0107 2<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/szybkie-prototypowanie-przedstawiamy-automatyczne-ladowanie\/\" title=\"Szybkie prototypowanie: Przedstawiamy automatyczne \u0142adowanie\">Szybkie prototypowanie: Przedstawiamy automatyczne \u0142adowanie<\/a><\/li>\n<\/ol>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cz\u0119sto lepiej zrobi\u0107 troch\u0119 analizy koncepcji analizy obiektowej w projekcie przed przej\u015bciem do przodu.<\/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":[721,919,845],"tags":[1169],"class_list":["post-228837","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228837","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=228837"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228837\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/223990"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228837"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228837"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228837"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}