{"id":230289,"date":"2022-12-09T18:20:00","date_gmt":"2022-12-09T15:20:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230289"},"modified":"2022-12-09T18:41:38","modified_gmt":"2022-12-09T15:41:38","slug":"nie-przesadzaj-z-inzynieria-rozwiazania","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/nie-przesadzaj-z-inzynieria-rozwiazania\/","title":{"rendered":"Nie przesadzaj z in\u017cynieri\u0105 rozwi\u0105zania"},"content":{"rendered":"\n<p>Je\u015bli pochodzisz ze \u015brodowiska zorientowanego obiektowo lub pr\u00f3bujesz budowa\u0107 wszystkie swoje rozwi\u0105zania dla WordPressa przy u\u017cyciu technik zorientowanych obiektowo, to b\u0119d\u0105 chwile, w kt\u00f3rych mo\u017ce si\u0119 wydawa\u0107, \u017ce wbijasz gw\u00f3\u017ad\u017a m\u0142otem kowalskim.<\/p>\n<p>Za\u0142\u00f3\u017cmy na przyk\u0142ad, \u017ce kto\u015b przychodzi do Ciebie i potrzebuje opracowanej niestandardowej wtyczki, kt\u00f3ra wsp\u00f3\u0142pracuje z wtyczk\u0105 innej firmy, ale musi zrobi\u0107 tylko jedn\u0105 rzecz.<\/p>\n<p>Czy warto po\u015bwi\u0119ci\u0107 czas na stworzenie <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/klasy-abstrakcyjne-czesc-2-klasy-abstrakcyjne-i-interfejsy\/\" title=\"interfejsu\">interfejsu<\/a><\/strong>, implementacj\u0119 wspomnianego interfejsu w konkretnej klasie, skonfigurowanie <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/organizowanie-typow-widokow-i-subskrybentow-wordpress\/\" title=\"subskrybent\u00f3w\">subskrybent\u00f3w<\/a><\/strong>, <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/krotka-uwaga-na-temat-kodu-testow-jednostkowych-w-projektach-wordpress\/\" title=\"napisanie test\u00f3w jednostkowych\">napisanie test\u00f3w jednostkowych<\/a><\/strong> i tak dalej?<\/p>\n<p>Widz\u0119 apel, ale generalnie m\u00f3wi\u0119 nie. Je\u015bli sednem tego, co musisz zrobi\u0107, jest uwzgl\u0119dnienie styl\u00f3w lub plik\u00f3w JavaScript lub obu, to dlaczego nie polega\u0107 na natywnych interfejsach API WordPress i programowaniu proceduralnym?<\/p>\n<h2>Nie przesadzaj z in\u017cynieri\u0105<\/h2>\n<p>Za\u0142\u00f3\u017cmy, \u017ce przychodzi do Ciebie potencjalny klient, kt\u00f3ry:<\/p>\n<ul>\n<li>pracuje z bardzo napi\u0119tym bud\u017cetem,<\/li>\n<li>ma wtyczk\u0119 innej firmy, kt\u00f3ra nie pasuje do tego motywu,<\/li>\n<li>wymaga jedynie lekkiej stylizacji,<\/li>\n<li>i ma fundusze, aby zleci\u0107 ci prac\u0119.<\/li>\n<\/ul>\n<p>Zak\u0142adaj\u0105c, \u017ce wszystko powy\u017csze jest prawd\u0105, powiedzia\u0142bym, \u017ce rozwi\u0105zanie problemu wydaje si\u0119 do\u015b\u0107 proste, prawda? Musimy przeprowadzi\u0107 audyt witryny, aby\u015bmy mogli:<\/p>\n<ul>\n<li>okre\u015bli\u0107 kolorystyk\u0119,<\/li>\n<li>znale\u017a\u0107 niezb\u0119dne selektory dla CSS,<\/li>\n<li>nast\u0119pnie zacznij budowa\u0107 wtyczk\u0119.<\/li>\n<\/ul>\n<p>Teraz, je\u015bli chodzi o to, nadal staram si\u0119 stosowa\u0107 gar\u015b\u0107 najlepszych praktyk. Mimo \u017ce mam tendencj\u0119 do programowania obiektowego, nie zawsze go u\u017cywam ani nie zawsze go polecam.<\/p>\n<p>Zamiast tego my\u015bl\u0119, \u017ce u\u017cycie prostej funkcji lub zestawu funkcji pod\u0142\u0105czonych do API WordPress w spos\u00f3b proceduralny dzia\u0142a dobrze. Nie oznacza to jednak, \u017ce nie powinni\u015bmy d\u0105\u017cy\u0107 do stworzenia solidnej struktury organizacji plik\u00f3w, poniewa\u017c nigdy nie wiadomo, kiedy b\u0119dziesz musia\u0142 wr\u00f3ci\u0107, aby utrzyma\u0107 projekt.<\/p>\n<p>W tym celu oto, co zwykle robi\u0119:<\/p>\n<ul>\n<li>utworzy\u0107 katalog asset\u00f3w dla arkuszy styl\u00f3w i JavaScript (dla obu lub jednego z nich \u2013 w zale\u017cno\u015bci od tego, co jest konieczne),<\/li>\n<li>utworzy\u0107 katalog <strong>src<\/strong> dla kodu, kt\u00f3ry b\u0119dzie odpowiedzialny za podpi\u0119cie si\u0119 pod WordPressa,<\/li>\n<li>dodaj zwyk\u0142y plik <strong>LICENSE, README<\/strong> i plik startowy wtyczki.<\/li>\n<\/ul>\n<p>Wynikowy katalog mo\u017ce wygl\u0105da\u0107 mniej wi\u0119cej tak:<\/p>\n<p>Stamt\u0105d nawet nie zawracam sobie g\u0142owy automatycznym \u0142adowaniem. Zamiast tego do\u0142\u0105czam pliki do katalogu \u017ar\u00f3d\u0142owego. Mo\u017cesz iterowa\u0107 przez te pliki zamiast robi\u0107 co\u015b <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/8d4e8a93a673d86f44d39c6e2893530e#file-00-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">takiego<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Acme Plugin Example\n *\n * @author    Tom McFarlin &lt;tom@pressware.co&gt;\n * @license   GPL-3.0+\n * @link      https:\/\/pressware.co\n * @since     1.0.0\n * @copyright 2018 Tom McFarlin\n *\n * @wordpress-plugin\n * Plugin Name: Acme Plugin Example\n * Description: Provides consistent styling across the site for certain elements.\n * Version:     1.0.0\n * Author:      Tom McFarlin\n * Author URI:  https:\/\/tommcfarlin.com\n * License:     GPL-3.0+\n * License URI: http:\/\/www.gnu.org\/licenses\/gpl-3.0.txt\n *\/\n\ninclude_once plugin_dir_path(__FILE__).'src\/AddStyles.php';\ninclude_once plugin_dir_path(__FILE__).'src\/AddScripts.php';\n<\/code><\/pre>\n<p>Ale to mo\u017ce zale\u017ce\u0107 od tego, kiedy i co robisz.<\/p>\n<h2>To jest zbyt proste<\/h2>\n<p>Mo\u017ce. Oto rzecz: za ka\u017cdym razem, gdy kto\u015b ugruntuje si\u0119 w u\u017cywaniu okre\u015blonego paradygmatu programowania, wspomniana osoba pr\u00f3buje zastosowa\u0107 go wsz\u0119dzie i pr\u00f3buje to robi\u0107 przez ca\u0142y czas.<\/p>\n<p>Nie wszyscy, ale wielu. Ja r\u00f3wnie\u017c.<\/p>\n<p>A kiedy zauwa\u017cysz, \u017ce co\u015b przesadzasz, dlaczego nie cofn\u0105\u0107 si\u0119 o krok i spr\u00f3bowa\u0107 nieco upro\u015bci\u0107 swoj\u0105 prac\u0119?<\/p>\n<p>Problem jest nadal rozwi\u0105zany, i to w spos\u00f3b, kt\u00f3ry ma znacznie mniejsze koszty.<\/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>Je\u015bli sednem tego, co musisz zrobi\u0107, jest uwzgl\u0119dnienie styl\u00f3w lub plik\u00f3w JavaScript lub obu, nie przepracowuj rozwi\u0105zania bardziej ni\u017c to konieczne.<\/p>\n","protected":false},"author":1,"featured_media":236233,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,805,866],"tags":[1169],"class_list":["post-230289","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-php-7","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230289","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=230289"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230289\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/236233"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}