{"id":29655,"date":"2023-03-15T13:20:00","date_gmt":"2023-03-15T12:20:00","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/clean-architecture\/"},"modified":"2024-10-04T09:44:50","modified_gmt":"2024-10-04T07:44:50","slug":"clean-architecture","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/clean-architecture\/","title":{"rendered":"Clean Architecture"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">Przejd\u017a do:<\/p>\n    <ol>\n                    <li><a href=\"#Wybor-architektury\">1.  Wyb\u00f3r architektury<\/a><\/li>\n                    <li><a href=\"#Architektura-a-dlug-technologiczny\">2.  Architektura a d\u0142ug technologiczny<\/a><\/li>\n                    <li><a href=\"#Czym-jest-Clean-Architecture\">3.  Czym jest Clean Architecture<\/a><\/li>\n                    <li><a href=\"#Idea-Clean-Architecture\">4.  Idea Clean Architecture<\/a><\/li>\n                    <li><a href=\"#Clean-Architecture-wzorce-projektowe\">5.  Clean Architecture \u2013 wzorce projektowe<\/a><\/li>\n                    <li><a href=\"#Application\">6.  Application<\/a><\/li>\n                    <li><a href=\"#Presentation\">7.  Presentation<\/a><\/li>\n                    <li><a href=\"#Domain\">8.  Domain<\/a><\/li>\n                    <li><a href=\"#Data\">9.  Data<\/a><\/li>\n                    <li><a href=\"#Wady-Clean-Architecture\">10.  Wady Clean Architecture<\/a><\/li>\n                    <li><a href=\"#Zalety-Clean-Architecture\">11.  Zalety Clean Architecture<\/a><\/li>\n                    <li><a href=\"#W-jakich-projektach-stosowac-Clean-Architecture\">12.  W jakich projektach stosowa\u0107 Clean Architecture?<\/a><\/li>\n                    <li><a href=\"#Podsumowanie\">13.  Podsumowanie<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"Wybor-architektury\">Wyb\u00f3r architektury<\/h2>\n\n\n\n<p>Rozpoczynaj\u0105c nowy projekt, developerzy chc\u0105 bardzo szybko zako\u0144czy\u0107 pierwsze zadanie, pomijaj\u0105c wag\u0119 przygotowania projektu. To&nbsp;b\u0142\u0105d! Przecie\u017c to&nbsp;w\u0142a\u015bnie pocz\u0105tkowy etap tworzenia nowej aplikacji jest najwa\u017cniejszy. Pozwala on wypracowa\u0107 sp\u00f3jne, sta\u0142e podej\u015bcie dla pozosta\u0142ych developer\u00f3w bior\u0105cych udzia\u0142 w&nbsp;projekcie.<\/p>\n\n\n\n<p><strong>Czytaj tak\u017ce:&nbsp;<\/strong><a href=\"https:\/\/www.jcommerce.eu\/jpro\/articles\/neo4j-zaproszenie-do-grafowych-baz-danych\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Neo4j \u2013 zaproszenie do&nbsp;grafowych baz danych<\/strong><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Architektura-a-dlug-technologiczny\">Architektura a d\u0142ug technologiczny<\/h2>\n\n\n\n<p>Kolejnym b\u0142\u0119dem pope\u0142nianym przez&nbsp;developer\u00f3w jest doprowadzenie do&nbsp;d\u0142ugu technologicznego.&nbsp;<strong>Prawd\u0105 jest, \u017ce&nbsp;cz\u0119sto tworzymy co\u015b szybko, wydawa\u0107 by&nbsp;si\u0119 mog\u0142o sensownie\u2026 Jednak ze&nbsp;wzgl\u0119du na&nbsp;r\u00f3\u017cne czynniki zaci\u0105gamy coraz wi\u0119kszy d\u0142ug technologiczny.<\/strong>&nbsp;W&nbsp;pracy projektowej nie&nbsp;warto i\u015b\u0107 na&nbsp;skr\u00f3ty. Po\u015bpiech i&nbsp;zaniedbanie to&nbsp;najcz\u0119stsze przyczyny nawarstwiania si\u0119 d\u0142ugu technologicznego w&nbsp;projekcie.<\/p>\n\n\n\n<p>P\u00f3\u0142 biedy, je\u015bli zaci\u0105gamy d\u0142ug, kt\u00f3ry&nbsp;potrafimy p\u00f3\u017aniej \u201esp\u0142aci\u0107\u201d, czyli w&nbsp;odpowiednim czasie dokona\u0107 poprawek. Gorzej, je\u015bli zaci\u0105gamy d\u0142ug przekraczaj\u0105cy nasze umiej\u0119tno\u015bci lub wychodz\u0105cy poza ramy czasowe projektu. Niemo\u017cliwy do&nbsp;sp\u0142acenia d\u0142ug technologiczny doprowadzi\u0107 mo\u017ce do&nbsp;czego\u015b, co wszyscy dobrze znamy. Idealnie obrazuje to&nbsp;grafika poni\u017cej.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/12.17_Clean-Architecture.png\" alt=\"Clean Archotecture - d\u0142ug technologiczny na przyk\u0142adzie d\u0142ugu publicznego Polski\" class=\"wp-image-25149\" title=\"\"><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Aby unikn\u0105\u0107 tego problemu, warto u\u017cy\u0107 jednego z wielu dost\u0119pnych wzorc\u00f3w tworzenia architektury projektowej. Moim faworytem, a zarazem najcz\u0119\u015bciej u\u017cywanym przeze mnie podej\u015bciem, jest Clean Architecture.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Czym-jest-Clean-Architecture\">Czym jest Clean Architecture<\/h2>\n\n\n\n<p>Clean Architecture to podej\u015bcie do programowania aplikacji, kt\u00f3re zak\u0142ada wydzielenie czterech g\u0142\u00f3wnych modu\u0142\u00f3w funkcjonalnych w projekcie. Modu\u0142y te to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Application,<\/strong><\/li>\n\n\n\n<li><strong>Presentation,<\/strong><\/li>\n\n\n\n<li><strong>Domain,<\/strong><\/li>\n\n\n\n<li><strong>Data.<\/strong><\/li>\n<\/ul>\n\n\n\n<p>W dalszej cz\u0119\u015bci om\u00f3wi\u0119 szczeg\u00f3\u0142owo ka\u017cd\u0105 z nich. Na pocz\u0105tek kilka s\u0142\u00f3w o g\u0142\u00f3wnej idei podej\u015bcia Clean Architecture.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Idea-Clean-Architecture\">Idea Clean Architecture<\/h2>\n\n\n\n<p>Robert C. Martin (Uncle Bob) w ksi\u0105\u017cce &#8222;Clean Architecture&#8221; definiuje cel architektury jako wspieranie cyklu \u017cycia systemu. Dalej za autorem: dobra architektura sprawia, \u017ce \u200b\u200bsystem jest \u0142atwy do zrozumienia, \u0142atwy w rozwoju, \u0142atwy w utrzymaniu i \u0142atwy do wdro\u017cenia. Ostatecznym celem jest zminimalizowanie koszt\u00f3w eksploatacji systemu i maksymalizacja produktywno\u015bci programist\u00f3w.<\/p>\n\n\n\n<p>Tworz\u0105c podej\u015bcie Clean Architecture Robert C. Martin, d\u0105\u017cy\u0142 do&nbsp;stworzenia struktury projektu z&nbsp;wyra\u017anie oddzielon\u0105 odpowiedzialno\u015bci\u0105 poszczeg\u00f3lnych warstw.&nbsp;<strong>Za\u0142o\u017cenie by\u0142o nast\u0119puj\u0105ce: ka\u017cda z&nbsp;warstw ma wykonywa\u0107 jedno zadanie i&nbsp;ma by\u0107 \u0142atwa do&nbsp;wyizolowania od&nbsp;reszty. Inne za\u0142o\u017cenie to&nbsp;mo\u017cliwo\u015b\u0107 wsp\u00f3\u0142dzielenia jednego kodu mi\u0119dzy wieloma \u015brodowiskami.<\/strong>&nbsp;Mia\u0142oby si\u0119 to&nbsp;odbywa\u0107 poprzez wyci\u0105gni\u0119cie dw\u00f3ch g\u0142\u00f3wnych modu\u0142\u00f3w niezale\u017cnych od&nbsp;technologii u\u017cytej do&nbsp;tworzenia aplikacji: Presentation oraz&nbsp;Domain i&nbsp;wsp\u00f3\u0142dzielenie w&nbsp;innych \u015brodowiskach, dopisuj\u0105c jedynie warstwy Application oraz&nbsp;Data. Warstwy te s\u0105 \u015bci\u015ble powi\u0105zane ze&nbsp;\u015brodowiskiem, na&nbsp;kt\u00f3rym&nbsp;uruchamiamy projekt. Dobrym przyk\u0142adem mo\u017ce by\u0107 napisanie logiki biznesowej raz i&nbsp;wsp\u00f3\u0142dzielenie jej przez&nbsp;aplikacje mobilne na&nbsp;iOS i&nbsp;Android, ale&nbsp;r\u00f3wnie\u017c przez&nbsp;aplikacje webowe i&nbsp;desktopowe.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Clean-Architecture-wzorce-projektowe\">Clean Architecture \u2013 wzorce projektowe<\/h2>\n\n\n\n<p>Modu\u0142 prezentacji mo\u017ce zosta\u0107 zaimplementowany za pomoc\u0105 wielu popularnych wzorc\u00f3w projektowych: Model View ViewModel (MVVM), Model View Presenter (MVP), Model View Intent (MVI), Model View Controller (MVC) czy te\u017c wiele innych. Ka\u017cdy programista ma w\u0142asne preferencje, je\u015bli chodzi o wyb\u00f3r wzorca. Mimo i\u017c ka\u017cdy z nich ma wady i zalety, na potrzeby opisu tej architektury skupimy si\u0119 na podej\u015bciu MVP. Jest to podej\u015bcie, kt\u00f3re osobi\u015bcie preferuj\u0119.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Application\">Application<\/h2>\n\n\n\n<p>Warstwa aplikacji jest najmocniej po\u0142\u0105czona z technologi\u0105, w kt\u00f3rej u\u017cywamy podej\u015bcia Clean Architecture. Zapewnia ona ca\u0142\u0105 wizualn\u0105 cz\u0119\u015b\u0107 projektu oraz reaguje na zadania powierzane jej przez warstw\u0119 prezentacji. Warstwa ta decyduje, w jaki spos\u00f3b wy\u015bwietlane b\u0119d\u0105 dane dostarczane przez cz\u0119\u015b\u0107 prezentacyjn\u0105. Zawiera ona logik\u0119 wy\u015bwietlania oraz informuje warstw\u0119 prezentacji o wszelkich akcjach wykonanych przez u\u017cytkownika. Obs\u0142uguje ona te\u017c mechanizm utrzymywania stanu Presentera oraz przygotowuje wszelkie niezb\u0119dne zale\u017cno\u015bci do jego poprawnego dzia\u0142ania.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Presentation\">Presentation<\/h2>\n\n\n\n<p>Presenter steruje ca\u0142\u0105 aplikacj\u0105, jak i poszczeg\u00f3lnymi ekranami, reaguje on r\u00f3wnie\u017c na poszczeg\u00f3lne akcje wykonane przez u\u017cytkownika w cz\u0119\u015bci wizualnej. To r\u00f3wnie\u017c tu zapada decyzja, w jaki spos\u00f3b obs\u0142u\u017cy\u0107 dane zadania czy te\u017c jak\u0105 cz\u0119\u015b\u0107 aplikacji kolejno pokaza\u0107 u\u017cytkownikowi. UseCase\u2019y, opisane dalej, s\u0105 jedynym sposobem komunikacji tego modu\u0142u z pozosta\u0142ymi. S\u0142u\u017cy np. do wykonania logiki biznesowej lub te\u017c pobrania okre\u015blonych danych. W podej\u015bciu MVP ka\u017cdy Presenter ma interfejs do komunikacji z widokiem, komunikacja ta pozwala jedynie na zlecanie zada\u0144 widokowi, ale nie umo\u017cliwia ona \u017c\u0105dania czego\u015b w zamian. M\u00f3wi\u0105c pro\u015bciej, Presenter wykonuje funkcje na interfejsie widoku, ale funkcje te nie mog\u0105 mie\u0107 typu zwracanego.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Domain\">Domain<\/h2>\n\n\n\n<p>Domain to modu\u0142 zawieraj\u0105cy ca\u0142\u0105 logik\u0119 biznesow\u0105. Sk\u0142ada si\u0119 on z wielu sk\u0142adowych:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">UseCase<\/h3>\n\n\n\n<p>Najwa\u017cniejsza, widoczna na zewn\u0105trz sk\u0142adowa, wykorzystywana przez warstw\u0119 prezentacji. UseCase\u2019y s\u0105 odwzorowaniem realnych wymaga\u0144 biznesowych i zapewniaj\u0105 logice prezentacji dost\u0119p do operacji na danych (pobierania, zmiany, nas\u0142uchiwania zmian). Umo\u017cliwiaj\u0105 r\u00f3wnie\u017c wykonywanie logiki biznesowej: oblicze\u0144 czy manipulacji na danych. Warto wspomnie\u0107, i\u017c s\u0105 one jedyn\u0105 mo\u017cliwo\u015bci\u0105 komunikacji mi\u0119dzy warstw\u0105 prezentacji a warstwami domeny. Dane transportowane s\u0105 przez modele przechowywane r\u00f3wnie\u017c w tej warstwie. UseCase\u2019y dost\u0119p do danych otrzymuj\u0105 za po\u015brednictwem DataSource\u2019\u00f3w poprzez udost\u0119pniony przez nie interfejs. Innym rodzajem wykorzystywanych przez nie zale\u017cno\u015bci s\u0105 klasy z warstwy Logic opisane dalej.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Model<\/h3>\n\n\n\n<p>To zbi\u00f3r w pewien logiczny spos\u00f3b zebranych danych, wykorzystywanych przez logik\u0119 biznesow\u0105. Model ten nie musi by\u0107 identyczny jak model z warstwy data. Mo\u017ce on np. \u0142\u0105czy\u0107 kilka modeli data w zale\u017cno\u015bci od potrzeb i zastosowania.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Logic<\/h3>\n\n\n\n<p>Miejsce w strukturze, kt\u00f3re s\u0142u\u017cy do przechowywania wydzielonych klas z rozbudowan\u0105 logik\u0105 biznesow\u0105. Miejsce te umo\u017cliwia unikanie rozbudowanych UseCase\u2019\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">DataSource<\/h3>\n\n\n\n<p>Najwa\u017cniejszym zadaniem DataSource\u2019\u00f3w jest decydowanie, sk\u0105d b\u0119d\u0105 pobierane lub gdzie zapisywane b\u0119d\u0105 dane. W\u0142a\u015bnie one za pomoc\u0105 interfejs\u00f3w maj\u0105 dost\u0119p do wszystkich \u017ar\u00f3de\u0142 danych, kt\u00f3re wystawia modu\u0142 Data. Opr\u00f3cz danych w \u015brodku znajdziemy r\u00f3wnie\u017c Mappery umo\u017cliwiaj\u0105ce t\u0142umaczenie danych z warstwy Data na modele biznesowe wykorzystywane p\u00f3\u017aniej. DataSource\u2019y s\u0105 jedynym po\u0142\u0105czeniem mi\u0119dzy modu\u0142em Data a reszt\u0105 logiki biznesowej i to one wystawiaj\u0105 dalej interfejsy daj\u0105ce dost\u0119p do dostosowanych danych dla UseCase\u2019\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mappery<\/h3>\n\n\n\n<p>Mappery w architekturze Clean Architecture dbaj\u0105 o sp\u00f3jno\u015b\u0107 danych dostarczanych przez warstw\u0119 data. To w\u0142a\u015bnie tu odbywa si\u0119 sprawdzenie, czy wszystkie niezb\u0119dne dane zosta\u0142y dostarczone, tak aby logika biznesowa mog\u0142a w pe\u0142ni dzia\u0142a\u0107. Mappery cz\u0119sto \u0142\u0105cz\u0105 kilka obiekt\u00f3w z warstwy data z r\u00f3\u017cnych \u017ar\u00f3de\u0142, tworz\u0105c jeden, kt\u00f3ry ma wszystkie potrzebne dla logiki biznesowej dane.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Data\">Data<\/h2>\n\n\n\n<p>Modu\u0142, kt\u00f3ry dostarcza dost\u0119p do wszelkiego typu \u017ar\u00f3de\u0142 danych oraz modeli, kt\u00f3re te dane odwzorowuj\u0105. Dost\u0119p do metod udost\u0119pnianych przez ten modu\u0142 mo\u017cliwy jest jedynie dzi\u0119ki wykorzystaniu interfejs\u00f3w, kt\u00f3re ten modu\u0142 udost\u0119pnia. Jest on r\u00f3wnie\u017c drugim modu\u0142em maj\u0105cym najwi\u0119ksz\u0105 zale\u017cno\u015b\u0107 od platformy, na kt\u00f3rej wykorzystywana jest Clean Architecture.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Data transfer object<\/h3>\n\n\n\n<p>Data transfer object (w skr\u00f3cie DTO) jest to model s\u0142u\u017c\u0105cy do dwustronnego przesy\u0142ania danych. Modele takie wykorzystywane s\u0105 tylko w warstwie Data i w zale\u017cno\u015bci od tego, czy dane te wysy\u0142amy, czy te\u017c pobieramy, s\u0105 one t\u0142umaczone na modele biznesowe lub z nich za pomoc\u0105 Mapper\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Data<\/h3>\n\n\n\n<p>Data to miejsce pobierania i zapisywania danych wykorzystywanych w pozosta\u0142ych cz\u0119\u015bciach aplikacji. Przyk\u0142adowe \u017ar\u00f3d\u0142a danych to: Bluetooth, Internet, Shared Preferences, bazy danych, pliki, GPS, kamera, \u017cyroskop czy system. Dost\u0119p do takich danych odbywa si\u0119 przez interfejs. Pozwala to na \u0142atwe podmienianie danego \u017ar\u00f3d\u0142a. Zamiana takiego \u017ar\u00f3d\u0142a odbywa si\u0119 poprzez podanie r\u00f3\u017cnych obiekt\u00f3w implementuj\u0105cych ten interfejs. Zast\u0119powanie \u017ar\u00f3de\u0142 danych najcz\u0119\u015bciej wykorzystywane jest np. do obs\u0142ugi r\u00f3\u017cnych typ\u00f3w serwer\u00f3w czy te\u017c podpi\u0119cia mockowych danych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Wady-Clean-Architecture\">Wady Clean Architecture<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Czasoch\u0142onno\u015b\u0107.<\/strong> Zaimplementowanie tak z\u0142o\u017conej architektury wymaga dodatkowego czasu. Z mojego do\u015bwiadczenia wynika, \u017ce pisanie kodu w podej\u015bciu Clean Architecture wymaga oko\u0142o 10% wi\u0119cej czasu ni\u017c tworzenie aplikacji bez \u017cadnej specjalnej architektury.<\/li>\n\n\n\n<li><strong>Potrzebna jest wiedza.<\/strong> W ten typ podej\u015bcia wpisany jest utrudniony pr\u00f3g wej\u015bcia dla os\u00f3b, kt\u00f3re nie mia\u0142y wcze\u015bniej wiedzy na temat tej struktury.<\/li>\n\n\n\n<li><strong>Du\u017ca ilo\u015b\u0107 ma\u0142ych klas i interfejs\u00f3w.<\/strong> Jedni uwa\u017caj\u0105 to za wad\u0119, inni z kolei za zalet\u0119. Uczciwie b\u0119dzie, gdy stwierdzimy, \u017ce w ka\u017cdej opinii jest ziarno prawdy. Moja opinia jest taka, \u017ce to niew\u0105tpliwa zaleta \u2013 osoby maj\u0105ce inne zdanie uwa\u017caj\u0105, \u017ce du\u017ca ilo\u015b\u0107 plik\u00f3w jest trudna w zarz\u0105dzaniu, a zmiany w nich poczynione \u2013 ma\u0142o czytelne.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Zalety-Clean-Architecture\">Zalety Clean Architecture<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0141atwiejsze utrzymanie.<\/strong> Clean Architecture znacz\u0105co u\u0142atwia utrzymanie projektu. Naprawianie b\u0142\u0119d\u00f3w w tym podej\u015bciu jest bardzo proste, a ich lokalizowanie \u2013 szybsze.<\/li>\n\n\n\n<li><strong>Lepsze zarz\u0105dzanie zmian\u0105.<\/strong> Podej\u015bcie przy\u015bpiesza wprowadzanie zmian w projekcie. Dzi\u0119ki ma\u0142ym klasom z wydzielonymi odpowiedzialno\u015bciami bardzo \u0142atwo modyfikowa\u0107 kod pod k\u0105tem nowych wymaga\u0144 czy te\u017c dodawa\u0107 nowe funkcjonalno\u015bci bez obawy o konsekwencje w pozosta\u0142ych cz\u0119\u015bciach projektu.<\/li>\n\n\n\n<li><strong>Du\u017ca ilo\u015b\u0107 ma\u0142ych klas i interfejs\u00f3w.<\/strong> Jak ju\u017c pisa\u0142em, tu zdania s\u0105 podzielone. Ja uwa\u017cam, \u017ce jest to zaleta z tego wzgl\u0119du, \u017ce dzi\u0119ki wielu ma\u0142ym klasom z wydzielonymi funkcjonalno\u015bciami kod daje si\u0119 \u0142atwo pokry\u0107 testami.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"W-jakich-projektach-stosowac-Clean-Architecture\">W jakich projektach stosowa\u0107 Clean Architecture?<\/h2>\n\n\n\n<p><strong>Moim zdaniem Clean Architecture \u015bwietnie spe\u0142nia swoje zadanie w przypadku \u015brednich i&nbsp; du\u017cych projekt\u00f3w.<\/strong> Z\u0142o\u017cono\u015b\u0107 podej\u015bcia w przypadku ma\u0142ych projekt\u00f3w mo\u017ce skutkowa\u0107 wi\u0119kszym nak\u0142adem dodatkowych prac. Czy to znaczy jednak, \u017ce nie powinni\u015bmy stosowa\u0107 wtedy Clean Architecture? Warto pami\u0119ta\u0107, \u017ce ma\u0142e projekty w naturalny spos\u00f3b szybko si\u0119 rozwijaj\u0105. Podj\u0119cie decyzji o stosowaniu podej\u015bcia CA nawet w mniejszych projektach jest moim zdaniem uzasadnione. Pozwala to unikn\u0105\u0107 sytuacji zaci\u0105gania d\u0142ugu technologicznego, o kt\u00f3rym pisa\u0142em. Szczeg\u00f3lnie, gdy narzut czasowy jest niedu\u017cy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Podsumowanie\">Podsumowanie<\/h2>\n\n\n\n<p>Nawi\u0105zuj\u0105c do konceptu wsp\u00f3\u0142dzielenia dw\u00f3ch modu\u0142\u00f3w mi\u0119dzy wieloma technologiami, uwa\u017cam to za \u015bwietny pomys\u0142 i coraz bli\u017cszy realizacji. Do tej pory by\u0142o to trudne w uzyskaniu, jednak dzi\u0119ki upowszechnieniu j\u0119zyka programowania, jakim jest Kotlin ju\u017c nied\u0142ugo mo\u017cemy mie\u0107 pierwsze projekty w pe\u0142ni wykorzystuj\u0105ce te za\u0142o\u017cenia. Mam nadziej\u0119, \u017ce uda\u0142o mi si\u0119 przybli\u017cy\u0107 g\u0142\u00f3wne za\u0142o\u017cenia idei Clean Architecture i zach\u0119ci\u0107 do stosowania jej w projektach. Przemy\u015blany wyb\u00f3r architektury pozwoli unikn\u0105\u0107 d\u0142ugu technologicznego, a ten typ architektury \u2013 cho\u0107 wymaga wiedzy i przeznaczenia wi\u0119cej czasu na implementacj\u0119, bez w\u0105tpienia sprawdza si\u0119 d\u0142ugofalowo zar\u00f3wno w wi\u0119kszych, jak i mniejszych projektach.<\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/jcommerce.catdesignapp.com\/test-driven-development-na-co-dzien\" target=\"_blank\" rel=\"noopener\">Test-Driven Development na co dzie\u0144<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/jcommerce.catdesignapp.com\/service-mesh-ale-komu-to-potrzebne\" target=\"_blank\" rel=\"noopener\">Service mesh, ale komu to potrzebne?<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Sta\u0142e i sp\u00f3jne podej\u015bcie w pisaniu kodu jest wa\u017cnym elementem realizacji projekt\u00f3w. B\u0119dzie ono mia\u0142o wp\u0142yw na ca\u0142o\u015b\u0107 prowadzonych prac oraz czas realizacji. W dzisiejszym artykule chc\u0119 si\u0119 przyjrze\u0107 podej\u015bciu Clean Architecture. Jaka jest g\u0142\u00f3wna idea tworzenia architektury typu Clean Architecture i w jakich sytuacjach si\u0119 ona sprawdzi? Postaram si\u0119 r\u00f3wnie\u017c om\u00f3wi\u0107 i przedstawi\u0107 jej g\u0142\u00f3wne zalety.<\/p>\n","protected":false},"author":120,"featured_media":29660,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":916,"footnotes":""},"categories":[1,582],"tags":[614],"offering":[522],"class_list":["post-29655","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-application-development","offering-tech-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/120"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=29655"}],"version-history":[{"count":2,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29655\/revisions"}],"predecessor-version":[{"id":33251,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29655\/revisions\/33251"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/29660"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=29655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=29655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=29655"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=29655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}