{"id":3931,"date":"2019-01-17T01:50:00","date_gmt":"2019-01-17T00:50:00","guid":{"rendered":"https:\/\/wlc.team\/?p=3931"},"modified":"2026-10-08T14:01:59","modified_gmt":"2026-10-08T13:01:59","slug":"dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu","status":"publish","type":"post","link":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/","title":{"rendered":"Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Wytyczne, kt\u00f3rych programista powinien przestrzega\u0107 na co dzie\u0144, s\u0105 tak samo wa\u017cne jak w ka\u017cdej dziedzinie. Stosowanie tych zasad mo\u017ce z pocz\u0105tku wydawa\u0107 si\u0119 \u017cmudne i czasoch\u0142onne, ale z czasem korzy\u015bci staj\u0105 si\u0119 widoczne. Skr\u00f3ty, kt\u00f3re mog\u0105 oszcz\u0119dzi\u0107 czas, bywaj\u0105 te\u017c \u017ar\u00f3d\u0142em r\u00f3\u017cnych problem\u00f3w w p\u00f3\u017aniejszych etapach projektu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do\u015bwiadczenie pokazuje, \u017ce za\u015bmiecony kod powoduje problemy, gdy tylko zaczyna si\u0119 go rozbudowywa\u0107. W\u0142a\u015bnie dlatego Robert Martin (znany jako Uncle Bob) zebra\u0142 zestaw regu\u0142 pisania dobrego kodu, kt\u00f3re pozwalaj\u0105 tworzy\u0107 proste, \u0142atwe w modyfikacji oprogramowanie. Uzupe\u0142nieniem tego podej\u015bcia jest podstawowa zasada KISS, kt\u00f3rej autorem jest Kelly Johnson.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>W skr\u00f3cie:<\/strong> KISS (\u201ekeep it simple, stupid\u201d) oznacza wyb\u00f3r najprostszego projektu, kt\u00f3ry rozwi\u0105zuje problem. SOLID to zestaw pi\u0119ciu zasad projektowania obiektowego: jedna odpowiedzialno\u015b\u0107 (Single responsibility), otwarte-zamkni\u0119te (Open\/closed), podstawienie Liskov (Liskov substitution), segregacja interfejs\u00f3w (Interface segregation) i odwr\u00f3cenie zale\u017cno\u015bci (Dependency inversion). Razem utrzymuj\u0105 kod czytelny, \u0142atwy do rozbudowy i testowania.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Czym jest KISS?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">KISS to termin stworzony w latach 60. XX wieku, kt\u00f3ry mia\u0142 odzwierciedla\u0107 podej\u015bcie do tworzenia prostych, trwa\u0142ych samolot\u00f3w, kt\u00f3re mo\u017cna \u0142atwo naprawi\u0107 w sytuacji awaryjnej. Pomys\u0142 zosta\u0142 od tamtej pory przyj\u0119ty w wielu dziedzinach nauki i in\u017cynierii.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">KISS jest te\u017c u\u017cywany przy rozwi\u0105zywaniu problem\u00f3w programistycznych. W dos\u0142ownym t\u0142umaczeniu oznacza \u201e<em>keep it simple, stupid<\/em>\u201d lub \u201e<em>keep it stupid simple<\/em>\u201d. Przyjmuje si\u0119 jednak, \u017ce sformu\u0142owanie nie mia\u0142o brzmie\u0107 negatywnie, lecz sugerowa\u0107, \u017ce prosty projekt sprawia, \u017ce serwis i utrzymanie s\u0105 dziecinnie \u0142atwe.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zastosowanie KISS w programowaniu mo\u017cna rozpatrywa\u0107 w trzech aspektach:<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>upraszczanie kodu dla bie\u017c\u0105cego i przysz\u0142ego wsp\u00f3lnego rozwoju. Z mojej perspektywy to nic innego jak umiej\u0119tne stosowanie zasad SOLID<\/li>\n\n\n\n<li>pisanie tylko tyle kodu, ile potrzeba do przej\u015bcia testu jednostkowego, co wi\u0105\u017ce si\u0119 z TDD i pierwsz\u0105 zasad\u0105 SOLID, czyli jedn\u0105 odpowiedzialno\u015bci\u0105<\/li>\n\n\n\n<li>intuicyjne podej\u015bcie do pisania oprogramowania, przyst\u0119pne i \u0142atwe do zrozumienia dla ka\u017cdego<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Samo KISS nie ustala sztywnych regu\u0142 implementacji kodu, podobnie jak wi\u0119kszo\u015b\u0107 zasad SOLID, kt\u00f3re s\u0105 og\u00f3lnymi wytycznymi tworzenia kodu zgodnego z SOLID.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Z czego sk\u0142ada si\u0119 SOLID?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pi\u0119\u0107 zasad SOLID zebra\u0142 i spopularyzowa\u0142, jak ju\u017c wspomniano, Robert Martin. Sam akronim pochodzi od Michaela Feathersa, a poszczeg\u00f3lne zasady opieraj\u0105 si\u0119 na wcze\u015bniejszych pracach, takich jak zasada otwarte-zamkni\u0119te Bertranda Meyera i zasada podstawienia Barbary Liskov.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Single responsibility (jedna odpowiedzialno\u015b\u0107)<\/li>\n\n\n\n<li>Open \/ Closed (otwarte-zamkni\u0119te)<\/li>\n\n\n\n<li>Liskov substitution (podstawienie Liskov)<\/li>\n\n\n\n<li>Interface segregation (segregacja interfejs\u00f3w)<\/li>\n\n\n\n<li>Dependency inversion (odwr\u00f3cenie zale\u017cno\u015bci)<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Zasada<\/th><th>W jednym zdaniu<\/th><th>Typowy sygna\u0142 naruszenia<\/th><\/tr><\/thead><tbody><tr><td>Jedna odpowiedzialno\u015b\u0107<\/td><td>Klasa lub metoda ma jeden pow\u00f3d do zmiany<\/td><td>Klasa, kt\u00f3ra waliduje dane, zapisuje je i wysy\u0142a e-maile<\/td><\/tr><tr><td>Otwarte-zamkni\u0119te<\/td><td>Nowe zachowanie dodajesz przez rozszerzenie, a nie edycj\u0119 przetestowanego kodu<\/td><td>Ka\u017cdy nowy przypadek to kolejny <code>if<\/code> w istniej\u0105cej metodzie<\/td><\/tr><tr><td>Podstawienie Liskov<\/td><td>Klasa pochodna mo\u017ce zast\u0105pi\u0107 bazow\u0105 bez psucia zachowania<\/td><td>Podklasa, kt\u00f3ra dla odziedziczonej metody zg\u0142asza \u201enieobs\u0142ugiwane\u201d<\/td><\/tr><tr><td>Segregacja interfejs\u00f3w<\/td><td>Wiele ma\u0142ych interfejs\u00f3w dla klient\u00f3w jest lepsze ni\u017c jeden du\u017cy<\/td><td>Klasy zmuszone do implementacji metod, kt\u00f3rych nie u\u017cywaj\u0105<\/td><\/tr><tr><td>Odwr\u00f3cenie zale\u017cno\u015bci<\/td><td>Zale\u017c od abstrakcji, a nie od konkretnych implementacji<\/td><td>Klasy, kt\u00f3re same tworz\u0105 swoje zale\u017cno\u015bci przez <code>new<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Jedna odpowiedzialno\u015b\u0107<\/strong> m\u00f3wi sama za siebie. Ka\u017cda klasa lub metoda powinna odpowiada\u0107 za jedn\u0105, osobn\u0105 funkcjonalno\u015b\u0107. Przyk\u0142ad z\u0142amania tej zasady wida\u0107 w poni\u017cszym kodzie:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/whitelabelcoders.com\/app\/uploads\/2021\/09\/solid_1.jpg\" alt=\"Przyk\u0142ad kodu klasy Person, kt\u00f3ra dodatkowo waliduje adresy e-mail i kody pocztowe oraz dodaje produkty do koszyka, \u0142ami\u0105c zasad\u0119 jednej odpowiedzialno\u015bci\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W powy\u017cszym przyk\u0142adzie zasada jest \u0142amana, bo klasa Person \u201e<em>przekracza swoje kompetencje<\/em>\u201d. Jej jedyn\u0105 odpowiedzialno\u015bci\u0105 powinno by\u0107 reprezentowanie obiektu osoby i jej w\u0142a\u015bciwo\u015bci, takich jak: imi\u0119, wiek, adres (najlepiej te\u017c jako osobny obiekt).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zdecydowanie nie powinna walidowa\u0107 adresu e-mail, kodu pocztowego ani dodawa\u0107 produktu do koszyka.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Poprawienie powy\u017cszych b\u0142\u0119d\u00f3w i dostosowanie kodu do zasady jednej odpowiedzialno\u015bci wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/whitelabelcoders.com\/app\/uploads\/2021\/09\/solid_2.jpg\" alt=\"Kod po refaktoryzacji zgodny z zasad\u0105 jednej odpowiedzialno\u015bci\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Stosowanie zasady KISS jest \u015bci\u015ble zwi\u0105zane z podej\u015bciem TDD. Aby test jednostkowy by\u0142 poprawny, powinna mu odpowiada\u0107 jedna, pojedyncza odpowiedzialno\u015b\u0107.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Otwarte-zamkni\u0119te<\/strong>, czyli otwarte na rozszerzenia, zamkni\u0119te na modyfikacje. Zgodnie z t\u0105 zasad\u0105 klasa lub metoda powinna by\u0107 napisana tak, aby nowe zachowanie dodawa\u0107 przez rozszerzanie, bez zmiany kodu, kt\u00f3ry ju\u017c dzia\u0142a i jest przetestowany.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co to oznacza w praktyce: przyk\u0142ady<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Zacznijmy od z\u0142amanej zasady poni\u017cej:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/whitelabelcoders.com\/app\/uploads\/2021\/09\/solid_3.jpg\" alt=\"Przyk\u0142ad kodu klasy Calculator, kt\u00f3rej metod\u0119 area trzeba modyfikowa\u0107 przy nowych kszta\u0142tach, \u0142ami\u0105c zasad\u0119 otwarte-zamkni\u0119te\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dlaczego powy\u017cszy kod \u0142amie zasad\u0119 otwarte-zamkni\u0119te? Bo dodanie kodu do obliczania pola, np. tr\u00f3jk\u0105ta, wymaga\u0142oby bezpo\u015bredniej modyfikacji metody area z klasy Calculator.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jak wi\u0119c poprawnie zaimplementowa\u0107 obliczanie pola figury? Przyk\u0142ad poni\u017cej:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/whitelabelcoders.com\/app\/uploads\/2021\/09\/solid_4.jpg\" alt=\"Przyk\u0142ad kodu z klas\u0105 bazow\u0105 Shape i osobn\u0105 klas\u0105 pochodn\u0105 dla ka\u017cdego kszta\u0142tu, kt\u00f3ra definiuje w\u0142asne obliczanie pola, zgodny z zasad\u0105 otwarte-zamkni\u0119te\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Jak wida\u0107, aby doda\u0107 figur\u0119 z mo\u017cliwo\u015bci\u0105 obliczania jej pola, wystarczy utworzy\u0107 kolejn\u0105 klas\u0119 dziedzicz\u0105c\u0105 po klasie Shape i zdefiniowa\u0107 w niej metod\u0119 obliczania pola.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Te dwie pierwsze zasady \u0142atwo zastosowa\u0107 w ka\u017cdej funkcjonalno\u015bci, nawet ma\u0142ej. Stosuj\u0105c je, mo\u017cemy pisa\u0107 kod, kt\u00f3ry b\u0119dzie czytelny i zrozumia\u0142y dla innych programist\u00f3w oraz \u0142atwy do rozbudowy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na tym etapie zastosowali\u015bmy dwie pierwsze zasady SOLID: jedn\u0105 odpowiedzialno\u015b\u0107 i otwarte-zamkni\u0119te.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kolejne trzy zasady stosuje si\u0119 w bardziej z\u0142o\u017conych rozwi\u0105zaniach, czyli w rozbudowanej logice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trzecia zasada to <strong>podstawienie Liskov<\/strong>, kt\u00f3ra m\u00f3wi, \u017ce obiekty klasy pochodnej musz\u0105 da\u0107 si\u0119 u\u017cywa\u0107 wsz\u0119dzie tam, gdzie oczekiwana jest klasa bazowa lub interfejs, bez psucia zachowania programu. Innymi s\u0142owy, interfejs, klasa abstrakcyjna i wszystkie metody klasy pochodnej musz\u0105 pozosta\u0107 zgodne.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Co to oznacza w praktyce? Podobnie jak przy poprzednich zasadach poka\u017cemy to na dw\u00f3ch przyk\u0142adach: b\u0142\u0119dnym i poprawnym.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zwykle najpierw pokazuj\u0119 wariant niepoprawny:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/whitelabelcoders.com\/app\/uploads\/2021\/09\/solid_5.jpg\" alt=\"Przyk\u0142ad kodu z interfejsem Animal oraz klasami Dog i Fish, w kt\u00f3rym Fish musi implementowa\u0107 metod\u0119 run, \u0142ami\u0105c zasad\u0119 podstawienia Liskov\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Na pierwszy rzut oka wszystko jest w porz\u0105dku: jest klasa Animal reprezentuj\u0105ca zwierz\u0119 oraz dziedzicz\u0105ce po niej Dog i Fish. Gdzie wi\u0119c problem? W metodzie wymuszonej przez interfejs pies biega i ma to sens, ale nikt nigdy nie s\u0142ysza\u0142 o biegaj\u0105cej rybie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zasada ta jest wi\u0119c bardziej odniesieniem do czystej logiki. Kolejny przyk\u0142ad pokazuje jej poprawne zastosowanie. Implementuje logik\u0119 narz\u0119dzia najwa\u017cniejszego dla programisty: ekspresu do kawy:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/whitelabelcoders.com\/app\/uploads\/2021\/09\/solid_6.jpg\" alt=\"Przyk\u0142ad kodu ekspresu do kawy zgodny z zasad\u0105 podstawienia Liskov: ka\u017cdy typ ekspresu parzy kaw\u0119\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Kawa zawsze jest parzona w ekspresie, niezale\u017cnie od jego typu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kolejna zasada to <strong>segregacja interfejs\u00f3w<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bardzo dobrym jej opisem jest zdanie: \u201ewiele interfejs\u00f3w dla konkretnych klient\u00f3w jest lepsze ni\u017c jeden interfejs og\u00f3lnego przeznaczenia\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce oznacza to, \u017ce tworzone interfejsy powinny by\u0107 dedykowane tylko jednej funkcjonalno\u015bci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad z\u0142amania tej zasady wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/whitelabelcoders.com\/app\/uploads\/2021\/09\/solid_7.jpg\" alt=\"Przyk\u0142ad kodu interfejsu drukowania raport\u00f3w z metodami PDF i Excel, \u0142ami\u0105cy zasad\u0119 segregacji interfejs\u00f3w\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W powy\u017cszym przyk\u0142adzie zaimplementowano logik\u0119 drukowania r\u00f3\u017cnych raport\u00f3w. Utworzono interfejs z dwiema deklarowanymi metodami: do drukowania PDF i arkuszy Excel. Do wynik\u00f3w szkolnego egzaminu arkusz Excel nie jest jednak potrzebny.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W tym przypadku ta metoda jest zb\u0119dna, ale skoro wymusza j\u0105 interfejs, musi zosta\u0107 zaimplementowana. Zgodnie z zasad\u0105 segregacji interfejs\u00f3w lepszym rozwi\u0105zaniem jest zadeklarowanie kilku wyspecjalizowanych interfejs\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aby rozwi\u0105za\u0107 problem, mo\u017cemy utworzy\u0107 dwa osobne interfejsy: PrintablePdfInterface i PrintableExcelInterface.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ostatnia zasada SOLID to <strong>odwr\u00f3cenie zale\u017cno\u015bci<\/strong>. M\u00f3wi, \u017ce modu\u0142y wysokiego poziomu nie powinny zale\u017ce\u0107 od modu\u0142\u00f3w niskiego poziomu, a oba powinny zale\u017ce\u0107 od abstrakcji, a nie od konkretnych typ\u00f3w. Brzmi to skomplikowanie, ale to prosty spos\u00f3b deklarowania funkcjonalno\u015bci tak, aby dzia\u0142a\u0142a z dowoln\u0105 implementacj\u0105 interfejsu. Dzi\u0119ki temu kod \u0142atwiej testowa\u0107 i zmienia\u0107.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Poni\u017csze przyk\u0142ady dobrze to ilustruj\u0105. Z\u0142amanie zasady:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/whitelabelcoders.com\/app\/uploads\/2021\/09\/solid_8.jpg\" alt=\"Przyk\u0142ad kodu \u0142ami\u0105cy zasad\u0119 odwr\u00f3cenia zale\u017cno\u015bci\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Zastosowanie zasady:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/whitelabelcoders.com\/app\/uploads\/2021\/09\/solid_9.jpg\" alt=\"Przyk\u0142ad kodu stosuj\u0105cy zasad\u0119 odwr\u00f3cenia zale\u017cno\u015bci\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Powy\u017csze zasady nale\u017cy traktowa\u0107 jako zestaw narz\u0119dzi do pisania dobrego, solidnego kodu. Nie trzeba jednak stosowa\u0107 wszystkich element\u00f3w w ka\u017cdym projekcie. Starali\u015bmy si\u0119 zawrze\u0107 dobre praktyki programowania.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Programi\u015bci powinni dostosowa\u0107 to narz\u0119dzie do indywidualnych potrzeb aplikacji. Intuicyjnie w ma\u0142ym projekcie ostatnich trzech zasad mo\u017cemy nie potrzebowa\u0107 w formalny spos\u00f3b, cho\u0107 podstawienie Liskov dotyczy ka\u017cdego u\u017cycia dziedziczenia, ale dw\u00f3ch pierwszych zdecydowanie warto si\u0119 trzyma\u0107, nawet przy budowie mniejszych funkcjonalno\u015bci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Z w\u0142asnego do\u015bwiadczenia wiem, \u017ce kod pisany od pocz\u0105tku zgodnie z dobrymi praktykami znacznie \u0142atwiej si\u0119 rozwija.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jak SOLID i KISS stosuj\u0105 si\u0119 do rozwoju WordPressa i WooCommerce?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Te same idee dzia\u0142aj\u0105 w kodzie WordPressa. Akcje i filtry pozwalaj\u0105 rozszerza\u0107 zachowanie bez edycji rdzenia WordPressa ani plik\u00f3w wtyczki, co jest zasad\u0105 otwarte-zamkni\u0119te w praktyce, a motywy potomne dzia\u0142aj\u0105 wed\u0142ug tej samej logiki. Utrzymywanie ka\u017cdej klasy wtyczki skupionej na jednym zadaniu i zale\u017cno\u015b\u0107 od interfejs\u00f3w zamiast klas konkretnych u\u0142atwia testowanie w\u0142asnego kodu i przekazanie go innemu zespo\u0142owi. Przyk\u0142ady znajdziesz w artyku\u0142ach <a href=\"https:\/\/wlc.team\/pl\/blog\/jak-stworzyc-wlasny-motyw-wordpress\/\">jak stworzy\u0107 w\u0142asny motyw WordPress<\/a> oraz <a href=\"https:\/\/wlc.team\/pl\/blog\/czym-sa-endpointy-woocommerce\/\">czym s\u0105 endpointy WooCommerce<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Odwrotny wzorzec widzimy w sklepach, kt\u00f3re zmieni\u0142y w\u0142a\u015bciciela: za\u015bmiecony kod, kt\u00f3rego nikt nie \u015bmie ruszy\u0107. <a href=\"https:\/\/wlc.team\/pl\/audyty-techniczne\/\">Audyt techniczny<\/a> pokazuje, jak g\u0142\u0119boki jest problem, a <a href=\"https:\/\/wlc.team\/pl\/projekty-ratunkowe\/\">projekt ratunkowy<\/a> stabilizuje kod przed jak\u0105kolwiek przebudow\u0105. Przy nowych pracach zobacz nasze <a href=\"https:\/\/wlc.team\/pl\/wdrozenia-wordpress\/\">wdro\u017cenia WordPress<\/a> i <a href=\"https:\/\/wlc.team\/pl\/sklepy-woocommerce\/\">sklepy WooCommerce<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Najwa\u017cniejsze wnioski<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zachowaj prostot\u0119: wybieraj najprostszy projekt, kt\u00f3ry rozwi\u0105zuje problem (KISS)<\/li>\n\n\n\n<li>Daj ka\u017cdej klasie lub metodzie jedn\u0105 odpowiedzialno\u015b\u0107<\/li>\n\n\n\n<li>Rozszerzaj zachowanie przez dodawanie kodu, a nie zmian\u0119 przetestowanego kodu<\/li>\n\n\n\n<li>Dopilnuj, by klasy pochodne mog\u0142y zast\u0105pi\u0107 klasy bazowe bez niespodzianek<\/li>\n\n\n\n<li>Preferuj ma\u0142e, wyspecjalizowane interfejsy i zale\u017c od abstrakcji<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Najcz\u0119stsze pytania o SOLID i KISS<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Co oznacza skr\u00f3t SOLID?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">SOLID oznacza: Single responsibility (jedna odpowiedzialno\u015b\u0107), Open\/closed (otwarte-zamkni\u0119te), Liskov substitution (podstawienie Liskov), Interface segregation (segregacja interfejs\u00f3w) i Dependency inversion (odwr\u00f3cenie zale\u017cno\u015bci). To pi\u0119\u0107 zasad projektowania obiektowego, kt\u00f3re u\u0142atwiaj\u0105 czytanie, rozszerzanie i testowanie kodu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Co oznacza KISS w programowaniu?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">KISS oznacza \u201ekeep it simple, stupid\u201d. Zach\u0119ca do wyboru najprostszego projektu, kt\u00f3ry rozwi\u0105zuje problem, aby kod by\u0142 \u0142atwiejszy do zrozumienia, utrzymania i naprawy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Czym r\u00f3\u017cni si\u0119 KISS od SOLID?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">KISS to og\u00f3lna zasada unikania zb\u0119dnej z\u0142o\u017cono\u015bci. SOLID to konkretny zestaw pi\u0119ciu zasad projektowania kodu obiektowego. Dobre stosowanie SOLID zwykle wspiera KISS, bo utrzymuje klasy ma\u0142e i wyspecjalizowane.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kto stworzy\u0142 zasady SOLID?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Robert C. Martin (Uncle Bob) zebra\u0142 i spopularyzowa\u0142 zasady na pocz\u0105tku lat 2000. Akronim stworzy\u0142 Michael Feathers, a poszczeg\u00f3lne zasady wywodz\u0105 si\u0119 z wcze\u015bniejszych prac, takich jak zasada otwarte-zamkni\u0119te Bertranda Meyera i zasada podstawienia Barbary Liskov.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Czy w ma\u0142ym projekcie potrzebuj\u0119 wszystkich pi\u0119ciu zasad SOLID?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Niekoniecznie w formalny spos\u00f3b. Jedna odpowiedzialno\u015b\u0107 i otwarte-zamkni\u0119te pop\u0142acaj\u0105 nawet w ma\u0142ych funkcjach. Podstawienie Liskov ma znaczenie zawsze, gdy u\u017cywasz dziedziczenia, a segregacja interfejs\u00f3w i odwr\u00f3cenie zale\u017cno\u015bci zyskuj\u0105 na znaczeniu wraz z rozwojem kodu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak zasady SOLID stosuj\u0105 si\u0119 do rozwoju WordPressa i WooCommerce?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Haki WordPressa pozwalaj\u0105 rozszerza\u0107 zachowanie bez edycji plik\u00f3w rdzenia lub wtyczek, co jest zasad\u0105 otwarte-zamkni\u0119te w praktyce. Utrzymywanie wyspecjalizowanych klas wtyczki i zale\u017cno\u015b\u0107 od interfejs\u00f3w zamiast klas konkretnych u\u0142atwia testowanie i utrzymanie w\u0142asnego kodu.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wytyczne, kt\u00f3rych programista powinien przestrzega\u0107 na co dzie\u0144, s\u0105 tak samo wa\u017cne jak w ka\u017cdej dziedzinie. Stosowanie tych zasad mo\u017ce z pocz\u0105tku wydawa\u0107 si\u0119 \u017cmudne i czasoch\u0142onne, ale z czasem korzy\u015bci staj\u0105 si\u0119 widoczne. Skr\u00f3ty, kt\u00f3re mog\u0105 oszcz\u0119dzi\u0107 czas, bywaj\u0105 te\u017c \u017ar\u00f3d\u0142em r\u00f3\u017cnych problem\u00f3w w p\u00f3\u017aniejszych etapach projektu. Do\u015bwiadczenie pokazuje, \u017ce za\u015bmiecony kod powoduje problemy, [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":3930,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"wlc_update_modified":false,"wlc_modified_date":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-3931","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bez-kategorii"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu - WLC<\/title>\n<meta name=\"description\" content=\"Zasady SOLID i KISS na przyk\u0142adach: jedna odpowiedzialno\u015b\u0107, otwarte-zamkni\u0119te, Liskov, segregacja interfejs\u00f3w, odwr\u00f3cenie zale\u017cno\u015bci i zastosowanie.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu - WLC\" \/>\n<meta property=\"og:description\" content=\"Zasady SOLID i KISS na przyk\u0142adach: jedna odpowiedzialno\u015b\u0107, otwarte-zamkni\u0119te, Liskov, segregacja interfejs\u00f3w, odwr\u00f3cenie zale\u017cno\u015bci i zastosowanie.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/\" \/>\n<meta property=\"og:site_name\" content=\"WLC\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-17T00:50:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-08T13:01:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wlc.team\/app\/uploads\/2019\/01\/ommerce-11.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"520\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Pawe\u0142 Zmys\u0142owski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pawe\u0142 Zmys\u0142owski\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/\"},\"author\":{\"name\":\"Pawe\u0142 Zmys\u0142owski\",\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/#\\\/schema\\\/person\\\/c2bcfdeef992bd8742ca5b346bc40dcc\"},\"headline\":\"Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu\",\"datePublished\":\"2019-01-17T00:50:00+00:00\",\"dateModified\":\"2026-10-08T13:01:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/\"},\"wordCount\":1831,\"publisher\":{\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wlc.team\\\/app\\\/uploads\\\/2019\\\/01\\\/ommerce-11.png\",\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/\",\"url\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/\",\"name\":\"Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu - WLC\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wlc.team\\\/app\\\/uploads\\\/2019\\\/01\\\/ommerce-11.png\",\"datePublished\":\"2019-01-17T00:50:00+00:00\",\"dateModified\":\"2026-10-08T13:01:59+00:00\",\"description\":\"Zasady SOLID i KISS na przyk\u0142adach: jedna odpowiedzialno\u015b\u0107, otwarte-zamkni\u0119te, Liskov, segregacja interfejs\u00f3w, odwr\u00f3cenie zale\u017cno\u015bci i zastosowanie.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wlc.team\\\/app\\\/uploads\\\/2019\\\/01\\\/ommerce-11.png\",\"contentUrl\":\"https:\\\/\\\/wlc.team\\\/app\\\/uploads\\\/2019\\\/01\\\/ommerce-11.png\",\"width\":1280,\"height\":520,\"caption\":\"Best Practices in Programming Based on SOLID, KISS and Personal Experience\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/blog\\\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wlc.team\\\/pl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/#website\",\"url\":\"https:\\\/\\\/wlc.team\\\/pl\\\/\",\"name\":\"WLC\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/#organization\"},\"alternateName\":\"White Label Coders\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wlc.team\\\/pl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/#organization\",\"name\":\"WLC\",\"url\":\"https:\\\/\\\/wlc.team\\\/pl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wlc.team\\\/app\\\/uploads\\\/2026\\\/05\\\/logo-WLC.svg\",\"contentUrl\":\"https:\\\/\\\/wlc.team\\\/app\\\/uploads\\\/2026\\\/05\\\/logo-WLC.svg\",\"caption\":\"WLC\"},\"image\":{\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wlc.team\\\/pl\\\/#\\\/schema\\\/person\\\/c2bcfdeef992bd8742ca5b346bc40dcc\",\"name\":\"Pawe\u0142 Zmys\u0142owski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6ee44112f45966811b27bcb16cea8224ce2e414b42387f5bd64f10cd729b310c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6ee44112f45966811b27bcb16cea8224ce2e414b42387f5bd64f10cd729b310c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6ee44112f45966811b27bcb16cea8224ce2e414b42387f5bd64f10cd729b310c?s=96&d=mm&r=g\",\"caption\":\"Pawe\u0142 Zmys\u0142owski\"},\"description\":\"Started his career as a founder of a local ISP company during his student times, next became a founder and president of one of the leading Polish online photo laboratories delivering photo prints, highly recognized in the professional photographers community due to the focus on the highest quality of services and customer care. At White Label Coders responsible for the sales process and sales team, still involved in the analytical and advisory roles in case of more complex projects.\",\"url\":\"https:\\\/\\\/wlc.team\\\/pl\\\/author\\\/pawel-zmyslowski\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu - WLC","description":"Zasady SOLID i KISS na przyk\u0142adach: jedna odpowiedzialno\u015b\u0107, otwarte-zamkni\u0119te, Liskov, segregacja interfejs\u00f3w, odwr\u00f3cenie zale\u017cno\u015bci i zastosowanie.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/","og_locale":"pl_PL","og_type":"article","og_title":"Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu - WLC","og_description":"Zasady SOLID i KISS na przyk\u0142adach: jedna odpowiedzialno\u015b\u0107, otwarte-zamkni\u0119te, Liskov, segregacja interfejs\u00f3w, odwr\u00f3cenie zale\u017cno\u015bci i zastosowanie.","og_url":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/","og_site_name":"WLC","article_published_time":"2019-01-17T00:50:00+00:00","article_modified_time":"2026-10-08T13:01:59+00:00","og_image":[{"width":1280,"height":520,"url":"https:\/\/wlc.team\/app\/uploads\/2019\/01\/ommerce-11.png","type":"image\/png"}],"author":"Pawe\u0142 Zmys\u0142owski","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Pawe\u0142 Zmys\u0142owski","Szacowany czas czytania":"9 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/#article","isPartOf":{"@id":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/"},"author":{"name":"Pawe\u0142 Zmys\u0142owski","@id":"https:\/\/wlc.team\/pl\/#\/schema\/person\/c2bcfdeef992bd8742ca5b346bc40dcc"},"headline":"Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu","datePublished":"2019-01-17T00:50:00+00:00","dateModified":"2026-10-08T13:01:59+00:00","mainEntityOfPage":{"@id":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/"},"wordCount":1831,"publisher":{"@id":"https:\/\/wlc.team\/pl\/#organization"},"image":{"@id":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/#primaryimage"},"thumbnailUrl":"https:\/\/wlc.team\/app\/uploads\/2019\/01\/ommerce-11.png","inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/","url":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/","name":"Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu - WLC","isPartOf":{"@id":"https:\/\/wlc.team\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/#primaryimage"},"image":{"@id":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/#primaryimage"},"thumbnailUrl":"https:\/\/wlc.team\/app\/uploads\/2019\/01\/ommerce-11.png","datePublished":"2019-01-17T00:50:00+00:00","dateModified":"2026-10-08T13:01:59+00:00","description":"Zasady SOLID i KISS na przyk\u0142adach: jedna odpowiedzialno\u015b\u0107, otwarte-zamkni\u0119te, Liskov, segregacja interfejs\u00f3w, odwr\u00f3cenie zale\u017cno\u015bci i zastosowanie.","breadcrumb":{"@id":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/#primaryimage","url":"https:\/\/wlc.team\/app\/uploads\/2019\/01\/ommerce-11.png","contentUrl":"https:\/\/wlc.team\/app\/uploads\/2019\/01\/ommerce-11.png","width":1280,"height":520,"caption":"Best Practices in Programming Based on SOLID, KISS and Personal Experience"},{"@type":"BreadcrumbList","@id":"https:\/\/wlc.team\/pl\/blog\/dobre-praktyki-programowania-oparte-na-solid-kiss-i-wlasnym-doswiadczeniu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wlc.team\/pl\/"},{"@type":"ListItem","position":2,"name":"Dobre praktyki programowania oparte na SOLID, KISS i w\u0142asnym do\u015bwiadczeniu"}]},{"@type":"WebSite","@id":"https:\/\/wlc.team\/pl\/#website","url":"https:\/\/wlc.team\/pl\/","name":"WLC","description":"","publisher":{"@id":"https:\/\/wlc.team\/pl\/#organization"},"alternateName":"White Label Coders","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wlc.team\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/wlc.team\/pl\/#organization","name":"WLC","url":"https:\/\/wlc.team\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/wlc.team\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/wlc.team\/app\/uploads\/2026\/05\/logo-WLC.svg","contentUrl":"https:\/\/wlc.team\/app\/uploads\/2026\/05\/logo-WLC.svg","caption":"WLC"},"image":{"@id":"https:\/\/wlc.team\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/wlc.team\/pl\/#\/schema\/person\/c2bcfdeef992bd8742ca5b346bc40dcc","name":"Pawe\u0142 Zmys\u0142owski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/secure.gravatar.com\/avatar\/6ee44112f45966811b27bcb16cea8224ce2e414b42387f5bd64f10cd729b310c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6ee44112f45966811b27bcb16cea8224ce2e414b42387f5bd64f10cd729b310c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6ee44112f45966811b27bcb16cea8224ce2e414b42387f5bd64f10cd729b310c?s=96&d=mm&r=g","caption":"Pawe\u0142 Zmys\u0142owski"},"description":"Started his career as a founder of a local ISP company during his student times, next became a founder and president of one of the leading Polish online photo laboratories delivering photo prints, highly recognized in the professional photographers community due to the focus on the highest quality of services and customer care. At White Label Coders responsible for the sales process and sales team, still involved in the analytical and advisory roles in case of more complex projects.","url":"https:\/\/wlc.team\/pl\/author\/pawel-zmyslowski\/"}]}},"_links":{"self":[{"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/posts\/3931","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/comments?post=3931"}],"version-history":[{"count":2,"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/posts\/3931\/revisions"}],"predecessor-version":[{"id":3933,"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/posts\/3931\/revisions\/3933"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/media\/3930"}],"wp:attachment":[{"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/media?parent=3931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/categories?post=3931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wlc.team\/pl\/wp-json\/wp\/v2\/tags?post=3931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}