{"id":230813,"date":"2022-12-21T10:22:00","date_gmt":"2022-12-21T07:22:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230813"},"modified":"2022-12-21T10:26:15","modified_gmt":"2022-12-21T07:26:15","slug":"sugestie-dotyczace-organizacji-kodu-proceduralnego","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/sugestie-dotyczace-organizacji-kodu-proceduralnego\/","title":{"rendered":"Sugestie dotycz\u0105ce organizacji kodu proceduralnego"},"content":{"rendered":"\n<p>Bo o ile pisz\u0119 \u2013 i jestem fanem \u2013 programowania obiektowego, to niewiele pisz\u0119 o czasach, w kt\u00f3rych pracuj\u0119 z <a href=\"https:\/\/en.wikipedia.org\/wiki\/Procedural_programming\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">baz\u0105 kodu proceduralnego<\/a>.<\/p>\n<blockquote>\n<p>Programowanie proceduralne to paradygmat programowania wywodz\u0105cy si\u0119 z programowania strukturalnego, oparty na koncepcji wywo\u0142ania procedury. Procedury, znane r\u00f3wnie\u017c jako procedury, podprogramy lub funkcje, zawieraj\u0105 po prostu seri\u0119 krok\u00f3w obliczeniowych do wykonania.<\/p>\n<\/blockquote>\n<p>Czasami dochodz\u0119 do tego z wymaga\u0144 projektu, czasami z projektu, kt\u00f3ry odziedziczy\u0142em, a czasami z czego\u015b innego.<\/p>\n<p>My\u015bl\u0119, \u017ce wa\u017cne jest, aby\u015bmy jako programi\u015bci nie trzymali si\u0119 jednego paradygmatu na tyle wysoko, \u017ce unikaliby\u015bmy pracy z innymi sposobami pisania kodu. W ko\u0144cu akt pisania kodu polega w istocie na rozwi\u0105zaniu problemu.<\/p>\n<p>Spos\u00f3b rozwi\u0105zania problemu mo\u017cna uzna\u0107 za drugorz\u0119dny.<\/p>\n<p>Niezale\u017cnie od tego, kiedy pracuj\u0119 z baz\u0105 kodu; jednak jest napisane, nadal staram si\u0119, aby by\u0142a zorganizowana w spos\u00f3b sp\u00f3jny, jak naj\u0142atwiejszy do na\u015bladowania i mo\u017cliwy do utrzymania w czasie.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160742-61e711c032aea.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-160742-61e711c032aea.png\" alt=\"Sugestie dotycz\u0105ce organizacji kodu proceduralnego\"><\/a><\/p>\n<p>Pomy\u015bla\u0142em, \u017ce podziel\u0119 si\u0119 tym, jak podchodz\u0119 do pisania wtyczek do WordPressa za pomoc\u0105 programowania proceduralnego w por\u00f3wnaniu z programowaniem obiektowym i jak organizuj\u0119 kod proceduralny.<\/p>\n<p>Je\u015bli nic wi\u0119cej, by\u0107 mo\u017ce da ci to pomys\u0142y na obecny lub przysz\u0142y projekt.<\/p>\n<h2>Organizacja kodu proceduralnego<\/h2>\n<p>Je\u015bli chodzi o prac\u0119 z kodem proceduralnym, istnieje du\u017cy potencja\u0142 na umieszczenie prawie wszystkiego w jednym, monolitycznym pliku.<\/p>\n<p>Nie jestem zwolennikiem tego podej\u015bcia, poniewa\u017c utrudnia to znalezienie miejsca, w kt\u00f3rym co\u015b znajduje si\u0119 w pliku (przynajmniej je\u015bli jeste\u015b kim\u015b, kto dopiero wchodzi do projektu).<\/p>\n<p>W tym celu to s\u0105 rzeczy, kt\u00f3re zwykle robi\u0119.<\/p>\n<ol>\n<li><strong>Oddzielne akcje i filtry<\/strong>. Zazwyczaj wykonuj\u0119 wszystkie dzia\u0142ania i umieszczam je w jednym pliku, a wszystkie filtry umieszczam w innym pliku. Mo\u017cliwe jest r\u00f3wnie\u017c dalsze rozdzielenie tych plik\u00f3w na podkatalogi (je\u015bli nie r\u00f3wnie\u017c przestrzenie nazw) na podstawie ich obszar\u00f3w zainteresowania. Na przyk\u0142ad wszelkie akcje zwi\u0105zane z obszarem administracyjnym mog\u0105 znajdowa\u0107 si\u0119 w podkatalogu <strong>admin .<\/strong><\/li>\n<li><strong>Napisz plik debugowania<\/strong>. Zwykle do\u0142\u0105czam prosty skrypt debugowania do wtyczki, dzi\u0119ki czemu mog\u0119 \u0142atwo wy\u015bwietla\u0107 informacje debugowania na ekranie, pisa\u0107 do pliku dziennika debugowania lub pisa\u0107 do obu. Mo\u017ce to by\u0107 wygodne, ale pomaga w \u0142atwy spos\u00f3b zobaczy\u0107, co si\u0119 dzieje, bez konieczno\u015bci <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/korzystanie-z-xdebug-z-usluga-valet-i-wordpress\/\" title=\"uruchamiania Xdebug\">uruchamiania Xdebug<\/a> i przechodzenia przez kod (chyba \u017ce jest to bardziej skomplikowany problem).<\/li>\n<li><strong>Autoloader<\/strong>. Je\u015bli u\u017cywasz kodu proceduralnego, mo\u017cesz w og\u00f3le nie u\u017cywa\u0107 <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/przestrzenie-nazw-i-automatyczne-ladowanie-w-wordpress\/\" title=\"przestrzeni nazw\">przestrzeni nazw<\/a>, ale je\u015bli tak, do\u0142\u0105czam r\u00f3wnie\u017c autoloader, kt\u00f3ry napisa\u0142em, aby u\u0142atwi\u0107 automatyczne do\u0142\u0105czanie plik\u00f3w. Jest to co\u015b innego ni\u017c autoloader <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/kompozytor-dla-wordpressa-czesc-1\/\" title=\"ni\u017c generowany przez Composer\">ni\u017c generowany przez Composer<\/a>, ale nadal robi to samo.<\/li>\n<\/ol>\n<p>Oczywi\u015bcie w powy\u017cszych zaleceniach nie ma nic z natury skomplikowanego. W rzeczywisto\u015bci powiedzia\u0142bym, \u017ce kt\u00f3rykolwiek z powy\u017cszych, zw\u0142aszcza pierwszy krok mo\u017ce znacznie poprawi\u0107 \u0142atwo\u015b\u0107 zarz\u0105dzania kodem proceduralnym.<\/p>\n<h2>G\u0142\u00f3wny plik wtyczki<\/h2>\n<p>Je\u015bli zdecydujesz si\u0119 wykona\u0107 wszystkie powy\u017csze czynno\u015bci, ostateczna wersja pliku startowego wtyczki powinna by\u0107 naprawd\u0119 prosta. W rzeczywisto\u015bci mo\u017ce to wygl\u0105da\u0107 na co\u015b tak prostego <a href=\"https:\/\/gist.github.com\/tommcfarlin\/777bb0180968134a3c40ebecb241d2ad\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jak to<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Plugin Name: Acme Plugin\n * Plugin URI:  https:\/\/acmeplugins.com\/acme\n * Description: This is the plugin description.\n * Version:     1.0.0\n * Author:      Acme Plugins Co.\n * Author URI:  https:\/\/acmeplugins.com\/acme\n * License:     GPL-3.0+\n * License URI: http:\/\/www.gnu.org\/licenses\/gpl-3.0.txt\n *\n * @since   1.0.0\n * @package Acme\n *\/\n\nnamespace Acme;\n\ndefined( 'WPINC') || die;\n\n\/\/ Include the custom autoloader.\nrequire_once __DIR__. '\/inc\/autoload.php';\n\n\/\/ Include action and filters.\nrequire_once __DIR__. '\/inc\/actions.php';\nrequire_once __DIR__. '\/inc\/filters.php';\n<\/code><\/pre>\n<p>Ponownie, zak\u0142adamy, \u017ce stosujesz wszystkie trzy zalecenia. Je\u015bli nie, Twoja implementacja mo\u017ce si\u0119 r\u00f3\u017cni\u0107.<\/p>\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>Jak pisz\u0119 wtyczki do WordPressa za pomoc\u0105 programowania proceduralnego kontra programowanie obiektowe i jak organizuj\u0119 kod proceduralny.<\/p>\n","protected":false},"author":1,"featured_media":235594,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,919,845,866],"tags":[1169],"class_list":["post-230813","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230813","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=230813"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230813\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/235594"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230813"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230813"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}