{"id":3623,"date":"2023-06-13T13:29:49","date_gmt":"2023-06-13T13:29:49","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/the-power-of-hexagonal-architecture\/"},"modified":"2024-09-10T07:51:21","modified_gmt":"2024-09-10T07:51:21","slug":"sesiakampes-architekturos-galia","status":"publish","type":"post","link":"https:\/\/thecodest.co\/lt\/blog\/the-power-of-hexagonal-architecture\/","title":{"rendered":"\u0160e\u0161iakamp\u0117s architekt\u016bros galia"},"content":{"rendered":"<p>\u0160iame i\u0161samiame vadove gilinsim\u0117s \u012f niuansus, susijusius su <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>, nagrin\u0117jant jo apibr\u0117\u017et\u012f, sudedam\u0105sias dalis ir istorij\u0105. Palyginsime <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> ir kitus populiarius architekt\u016brinius ra\u0161tus, kad i\u0161ry\u0161k\u0117t\u0173 jos unikal\u016bs privalumai. Be to, i\u0161nagrin\u0117sime jo svarb\u0173 vaidmen\u012f domenu valdomame projektavime (DDD) ir <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/microservices\/\">mikroservisai<\/a>, kurios tampa vis svarbesn\u0117s \u0161iuolaikiniame pasaulyje. <a href=\"https:\/\/thecodest.co\/lt\/blog\/8-key-questions-to-ask-your-software-development-outsourcing-partner\/\">programin\u0117s \u012frangos k\u016brimas<\/a>.<\/p>\n<h2>1. \u012evadas \u012f \u0161e\u0161iakamp\u0119 architekt\u016br\u0105<\/h2>\n<p>Dinami\u0161kame kra\u0161tovaizdyje<strong> <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/software-architecture\/\">programin\u0117s \u012frangos architekt\u016bra<\/a><\/strong>, <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>, taip pat \u017einomas kaip uost\u0173 ir <strong>Adapteri\u0173 modelis<\/strong>, tapo gr\u0117smingu var\u017eovu, palaipsniui metan\u010diu i\u0161\u0161\u016bk\u012f <strong>tradicin\u0117 daugiasluoksn\u0117 architekt\u016bra<\/strong>.<\/p>\n<p>Tai l\u0117m\u0117 poreikis sukurti architekt\u016brin\u012f dizain\u0105, kuris u\u017etikrint\u0173 lengv\u0105 testavim\u0105 ir geresn\u012f palaikym\u0105, <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> buvo sumanyta. Jos misija: teikti patikim\u0105 <strong>programin\u0117s \u012frangos programos<\/strong> nevar\u017eomi i\u0161orinio pasaulio sud\u0117tingumo ir nepastovumo.<\/p>\n<p>\u0160iame straipsnyje leisim\u0117s \u012f kelion\u0119 po <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> - architekt\u016bra, kuri yra paprastumo ir galios sand\u016broje. Atskleisime jos istorij\u0105, strukt\u016br\u0105 ir principus bei palyginsime j\u0105 su kitomis <strong>architekt\u016briniai modeliai<\/strong>. I\u0161nagrin\u0117sime jos galimybes pagerinti programin\u0117s \u012frangos kokyb\u0119 ir suma\u017einti vis did\u0117jan\u010di\u0105 technini\u0173 skol\u0173 bang\u0105, kuri vargina programin\u0117s \u012frangos pramon\u0119.<\/p>\n<h2>2. \u0160e\u0161iakamp\u0117s architekt\u016bros apibr\u0117\u017eimas<\/h2>\n<p>Jos esm\u0117, <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>arba uostai ir <strong>Adapteri\u0173 architekt\u016bra<\/strong>, yra projektavimo modelis, pagr\u012fstas r\u016bpes\u010di\u0173 atskyrimu. Jis suskirsto program\u0105 \u012f dvi pagrindines dalis: vidin\u0119 ir i\u0161orin\u0119.<\/p>\n<p>Viduje, dar vadinamame programos branduoliu, yra <strong>verslo logika<\/strong> ir domeno objektai - j\u016bs\u0173 programin\u0117s \u012frangos vert\u0117s branduolys. \u0160i vidin\u0117 \u0161ventov\u0117 lieka atskirta nuo i\u0161orini\u0173 veiksni\u0173, taip i\u0161saugant programin\u0117s \u012frangos vientisum\u0105. <strong>verslo logika<\/strong> ir srities model\u012f.<\/p>\n<p>Kita vertus, i\u0161or\u0117 yra i\u0161orini\u0173 sistem\u0173 sritis - nuo <strong>naudotojo s\u0105saja<\/strong> \u012f prieig\u0105 prie duomen\u0173 baz\u0117s - kurie s\u0105veikauja su programos branduoliu. \u0160ios s\u0105veikos valdomos naudojant prievad\u0173 ir adapteri\u0173 mechanizm\u0105, u\u017etikrinant\u012f ai\u0161k\u0173 atskyrim\u0105 tarp <strong>taikomosios programos \u0161erdis<\/strong> ir jos i\u0161or\u0117s veik\u0117jai.<\/p>\n<h2>3. \u0160e\u0161iakamp\u0117s architekt\u016bros istorija<\/h2>\n<p><strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> yra Alisterio Kokburno, vizionieriaus, kuris pirm\u0105 kart\u0105 i\u0161sak\u0117 \u0161i\u0105 koncepcij\u0105 kaip atsak\u0105 \u012f tradicini\u0173 technologij\u0173 ribotum\u0105, sumanymas. <strong>daugiasluoksn\u0117 architekt\u016bra<\/strong>. Ji buvo sukurta siekiant sukurti technologi\u0161kai nepriklausom\u0105 <strong>domeno sluoksnis<\/strong> kuri izoliuoja \u0161erd\u012f. <strong>verslo logika<\/strong> nuo i\u0161or\u0117s poveikio, pvz. <strong>naudotojo s\u0105saja <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/what-is-code-refactoring\/\">kodas<\/a><\/strong> ir prieig\u0105 prie duomen\u0173 baz\u0117s.<\/p>\n<p>Tradicin\u0117je <strong>daugiasluoksn\u0117 architekt\u016bra<\/strong>, poky\u010diai viename sluoksnyje gali persiduoti kitiems sluoksniams ir sukelti nenumatyt\u0173 pasekmi\u0173. Be to, testavim\u0105 apsunkino sud\u0117tinga sluoksni\u0173 priklausomyb\u0117.<\/p>\n<p><strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> atsirado sprendimas, si\u016blantis model\u012f, pagal kur\u012f poky\u010diai vienoje sistemos dalyje nesutrikdyt\u0173 kit\u0173 dali\u0173. I\u0161 esm\u0117s juo buvo siekiama, kad <strong>verslo logika<\/strong> nepriklausomai nuo to, ar prie jos buvo jungiamasi per <a href=\"https:\/\/thecodest.co\/lt\/blog\/find-your-ideal-stack-for-web-development\/\">\u017einiatinklio svetain\u0117<\/a> s\u0105saja. <strong>REST <a href=\"https:\/\/thecodest.co\/lt\/blog\/compare-staff-augmentation-firms-that-excel-in-api-team-staffing-for-financial-technology-projects\/\">API<\/a><\/strong>arba net <strong>komandin\u0117 eilut\u0117<\/strong>.<\/p>\n<h2>4. \u0160e\u0161iakamp\u0117s architekt\u016bros komponentai<\/h2>\n<p><strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>, pavadint\u0105 d\u0117l \u0161e\u0161iakamp\u0117s iliuzijos diagramose, sudaro trys pagrindin\u0117s sudedamosios dalys <strong>domeno modelis<\/strong>, prievadai (pirminiai ir antriniai) ir adapteriai (pirminiai ir antriniai).<\/p>\n<p>Svetain\u0117<strong> domeno modelis<\/strong> yra programin\u0117s \u012frangos programos pagrindas, apimantis <strong>verslo taisykl\u0117s<\/strong> ir pagrindin\u0119 logik\u0105. \u0160iame modelyje esantys srities objektai turi konkre\u010dias verslo vertes ir taisykles.<\/p>\n<p>Toliau turime prievadus, kanalus tarp <strong>domeno modelis<\/strong> ir i\u0161orin\u012f pasaul\u012f. <strong>Pirminiai prievadai<\/strong> atskleisti programos <strong>verslo logika<\/strong>, kuris yra vartai \u012f taikomosios programos branduol\u012f. Jie atspindi taikomosios programos palaikomus naudojimo atvejus.<\/p>\n<p><strong>Antriniai prievadai<\/strong>Kita vertus, jos nukreiptos \u012f i\u0161or\u0119. Jos vaizduoja s\u0105sajas, kuri\u0173 programai reikia i\u0161 i\u0161orinio pasaulio, pavyzd\u017eiui, atkaklumo sluoksnius arba i\u0161orines paslaugas.<\/p>\n<p>Galiausiai turime adapterius, kurie veikia kaip vert\u0117jai tarp <strong>domeno modelis<\/strong> ir i\u0161orin\u012f pasaul\u012f. Jie paver\u010dia <a href=\"https:\/\/thecodest.co\/lt\/blog\/app-data-collection-security-risks-value-and-types-explored\/\">duomenys<\/a> i\u0161 formato, naudojamo <strong>i\u0161orin\u0117s sistemos<\/strong> \u012f format\u0105, naudojam\u0105 <strong>verslo logika<\/strong>ir atvirk\u0161\u010diai.<\/p>\n<h2>5. Prievadai ir adapteriai<\/h2>\n<p><strong>Prievadai ir adapteriai<\/strong> sudaro tilt\u0105 tarp <strong>taikomosios programos \u0161erdis<\/strong> ir i\u0161or\u0117s veik\u0117jai. Pirminiai prievadai yra verslo naudojimo atvejai, kuriuos programa atskleid\u017eia, kad i\u0161oriniai dalyviai gal\u0117t\u0173 s\u0105veikauti su programa. \u012esivaizduokite juos kaip paslaug\u0173 s\u0105sajas savo <strong>verslo sluoksnis<\/strong>.<\/p>\n<p>Kita vertus, antriniai prievadai - tai s\u0105sajos, reikalingos j\u016bs\u0173 programai i\u0161 i\u0161orinio pasaulio. Tai gali b\u016bti tokios paslaugos kaip prieiga prie duomen\u0173 baz\u0117s, <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/web-services\/\">\u017einiatinklio paslaugos<\/a>, arba net laiko paslaugas. Jos atskleid\u017eia tai, ko reikia taikomosioms programoms, nepriklausomai nuo joki\u0173 technologij\u0173 ar konkre\u010di\u0173 pardav\u0117jo savybi\u0173.<\/p>\n<p>Adapteriai yra fizin\u0117 \u0161i\u0173 prievad\u0173 i\u0161rai\u0161ka. Jie perkelia duomenis i\u0161 formato, naudojamo <strong>verslo logika<\/strong> \u012f i\u0161or\u0117s dalyvi\u0173 naudojam\u0105 format\u0105 ir atvirk\u0161\u010diai. \u0160ie adapteriai gali b\u016bti konkre\u010diai technologijai b\u016bdingi REST API, SQL duomen\u0173 bazi\u0173 ar prane\u0161im\u0173 perdavimo sistem\u0173 adapteriai, bet jie taip pat gali b\u016bti paketiniai scenarijai ar <strong>naudotojo s\u0105saja<\/strong> kodas. Adapteriai sudaro taikomosios programos ribas, tod\u0117l programa gali b\u016bti technologi\u0161kai nepriklausoma.<\/p>\n<h2>6. Pirminiai ir antriniai prievadai ir adapteriai<\/h2>\n<p>Pirminiai prievadai rodo operacijas, kurias gali atlikti m\u016bs\u0173 programa, t. y. komandas, kurias gali priimti m\u016bs\u0173 pagrindinis domenas. Jie da\u017enai \u012fgyvendinami kaip s\u0105sajos tokiose kalbose kaip <a href=\"https:\/\/thecodest.co\/lt\/blog\/top-programming-languages-to-build-e-commerce\/\">Java<\/a>apibr\u0117\u017eiant, kokias operacijas si\u016blo programa.<strong>Pirminiai adapteriai<\/strong>tod\u0117l yra \u0161i\u0173 s\u0105saj\u0173 \u012fgyvendinimo priemon\u0117s, skirtos konkretiems i\u0161or\u0117s dalyviams.<\/p>\n<p>Kita vertus, antriniai prievadai - tai s\u0105sajos, kurias pagrindinis domenas naudoja s\u0105veikai su i\u0161oriniu pasauliu. Tai gali b\u016bti s\u0105sajos, skirtos domeno objektams i\u0161saugoti arba prane\u0161imams si\u0173sti. <strong>Antriniai adapteriai<\/strong> yra faktin\u0117s \u0161i\u0173 s\u0105saj\u0173 realizacijos. <strong>SQL duomen\u0173 baz\u0117<\/strong> adapter\u012f arba el. pa\u0161to prane\u0161im\u0173 adapter\u012f.<\/p>\n<p>Kartu <strong>pirminiai ir antriniai prievadai ir adapteriai<\/strong> sudaro lanks\u010di\u0105, modulin\u0119 rib\u0105 aplink program\u0105, atskirian\u010di\u0105 <strong>domeno logika<\/strong> d\u0117l technini\u0173 prie\u017eas\u010di\u0173. Jie u\u017etikrina ai\u0161k\u0173 atsakomyb\u0117s atskyrim\u0105 ir leid\u017eia skirtingoms sistemos dalims vystytis nepriklausomai.<\/p>\n<h2>7. Priklausomyb\u0117s taisykl\u0117 ir priklausomyb\u0117s inversija<\/h2>\n<p>Priklausomyb\u0117s taisykl\u0117 yra pagrindinis principas <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> kuriame teigiama, kad priklausomyb\u0117s tur\u0117t\u0173 b\u016bti nukreiptos \u012f taikomosios programos branduol\u012f. Programos branduolys nepriklauso nuo konkre\u010dios duomen\u0173 baz\u0117s, vartotojo s\u0105sajos ar kitos i\u0161orin\u0117s agent\u016bros.<\/p>\n<p>\u0160is principas glaud\u017eiai susij\u0119s su <strong>Priklausomyb\u0117s apvertimo principas<\/strong> (DIP), vienas i\u0161 SOLID princip\u0173, taikom\u0173 kuriant objektus. DIP teigia, kad auk\u0161to lygio moduliai (<strong>verslo logika<\/strong> arba <strong>domeno sluoksnis<\/strong> netur\u0117t\u0173 priklausyti nuo \u017eemo lygio moduli\u0173 (pvz., duomen\u0173 baz\u0117s adapterio). Vietoj to, jie abu tur\u0117t\u0173 priklausyti nuo abstrakcij\u0173. Toks priklausomybi\u0173 apvertimas leid\u017eia izoliuoti auk\u0161to lygio modulius nuo \u017eemo lygio moduli\u0173 pakeitim\u0173, taip skatinant tok\u012f dizain\u0105, kai <strong>verslo logika<\/strong> lemia bendr\u0105 architekt\u016br\u0105.<\/p>\n<h2>8. \u017dem\u0117lapi\u0173 sudarymas<\/h2>\n<p>\u017dem\u0117lapi\u0173 sudarymas yra esminis procesas <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>, kai konkre\u010diai technologijai skirtas adapteris konvertuoja duomenis i\u0161 formato, naudojamo <strong>i\u0161orin\u0117s sistemos<\/strong> \u012f format\u0105, kur\u012f m\u016bs\u0173 <strong>domeno sluoksnis<\/strong> gali suprasti. \u0160is atvaizdavimas palengvina vertim\u0105 tarp vidini\u0173 ir i\u0161orini\u0173 programos duomen\u0173 atvaizdavim\u0173.<\/p>\n<p>Pavyzd\u017eiui, kai HTTP u\u017eklausa \u012f m\u016bs\u0173 program\u0105 ateina i\u0161 i\u0161orin\u0117s s\u0105sajos, pvz. <strong>REST API<\/strong>, u\u017eklausos duomenis i\u0161 JSON reikia i\u0161versti \u012f domeno objektus, kuriuos gali naudoti programa. U\u017e \u0161\u012f vertim\u0105 atsakingi adapteriai.<\/p>\n<p>Ir atvirk\u0161\u010diai, kai programai reikia i\u0161si\u0173sti atsakym\u0105, adapteriai konvertuoja domeno objektus atgal \u012f JSON. Tai leid\u017eia pagrindinei programai ne\u017einoti i\u0161orinio pasaulio ypatum\u0173 ir kartu u\u017etikrina, kad ji gali teisingai interpretuoti gaunamus duomenis ir formatuoti siun\u010diamus duomenis. <\/p>\n<h2>9. \u0160e\u0161iakamp\u0117s architekt\u016bros privalumai<\/h2>\n<p><strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> teikia daug privalum\u0173, kuriuos daugiausia galima paai\u0161kinti tuo, kad programin\u0117 \u012franga atskiriama nuo i\u0161orini\u0173 element\u0173 ir ai\u0161kiai atskiriamos skirtingos sistemos dalys.<\/p>\n<p>Vienas i\u0161 pagrindini\u0173 privalum\u0173 yra r\u016bpes\u010di\u0173 atskyrimas, skatinantis kodo palaikym\u0105 ir skaitomum\u0105. Pagrindini\u0173 problem\u0173 atskyrimas <strong>verslo logika<\/strong> i\u0161 <strong>i\u0161orinis pasaulis<\/strong> leid\u017eia keisti konkre\u010diai technologijai skirtus adapterius, duomen\u0173 bazes ir <strong>naudotojo s\u0105sajos<\/strong> nekei\u010diant pagrindo <strong>verslo logika<\/strong>.<\/p>\n<p><strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> taip pat pasi\u017eymi puikiomis testavimo galimyb\u0117mis. Architekt\u016bros i\u0161orini\u0173 priklausomybi\u0173 izoliacija leid\u017eia k\u016br\u0117jams atlikti automatinius regresijos testus ir ra\u0161yti <strong>automatiniai test\u0173 rinkiniai<\/strong> lengviau. D\u0117l \u0161ios izoliacijos padid\u0117ja programos atsparumas, nes vieno komponento poky\u010diai netur\u0117s neigiamo poveikio kitiems komponentams.<\/p>\n<p>Be to, architekt\u016bra palaiko kelis to paties prievado adapterius, tod\u0117l tam pa\u010diam antriniam prievadui galima naudoti kelis adapterius. Toks lankstumas leid\u017eia programai s\u0105veikauti su \u012fvairi\u0173 tip\u0173 duomen\u0173 baz\u0117mis arba palaikyti \u012fvairias <strong>naudotojo s\u0105saja<\/strong> platformos.<\/p>\n<h2>10. Technin\u0117s prie\u017ei\u016bros galimyb\u0117s<\/h2>\n<p>Programin\u0117s \u012frangos k\u016brimo srityje palaikomumas da\u017enai yra geid\u017eiama savyb\u0117, ta\u010diau tradiciniai architekt\u016bros stiliai gali b\u016bti sunkiai pritaikomi. <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> i\u0161siskiria tuo, kad joje daug d\u0117mesio skiriama palaikomumui.<\/p>\n<p>D\u0117mesys skiriamas r\u016bpes\u010di\u0173 atskyrimui, <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> u\u017etikrinama, kad vienoje programos dalyje atlikti pakeitimai nepersiduot\u0173 \u012f kitas dalis. \u0160i savyb\u0117 padeda suma\u017einti laiko ir pastang\u0173, skirt\u0173 kodui suprasti ir derinti, s\u0105naudas.<\/p>\n<p>Be to, \u0161i architekt\u016bra skatina pakartotin\u012f kodo naudojim\u0105, skatindama tok\u012f dizain\u0105, kai branduolys<strong> verslo logika<\/strong> yra izoliuotas nuo konkre\u010di\u0173 technologij\u0173, naudojam\u0173 programai valdyti. Toks atskyrimas leid\u017eia k\u016br\u0117jams keisti, atnaujinti ar pertvarkyti <strong>i\u0161orin\u0117s s\u0105sajos<\/strong> nedarant poveikio pagrindinei logikai, taip suma\u017einant klaid\u0173 atsiradimo rizik\u0105.<\/p>\n<h2>11. Technin\u0117s skolos ma\u017einimas<\/h2>\n<p>Technin\u0117 skola - didel\u0117 programin\u0117s \u012frangos k\u016brimo problema, susijusi su b\u016bsimomis i\u0161laidomis, susijusiomis su kodo pertvarkymu ir trumpiki\u0173 bei \"hak\u0173\" taisymu. <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> si\u016blo aktyv\u0173 po\u017ei\u016br\u012f \u012f tokios skolos ma\u017einim\u0105.<\/p>\n<p>Sudarydami s\u0105lygas ai\u0161kiai atskirti pagrindines <strong>verslo logika<\/strong> ir <strong>i\u0161oriniai komponentai<\/strong>, <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> suma\u017eina susipynusi\u0173 kod\u0173, kurie gali sukelti prie\u017ei\u016bros galvos skausm\u0105 ir padidinti techninius \u012fsiskolinimus, tikimyb\u0119. Architekt\u016brai b\u016bdingos palaikymo ir testavimo galimyb\u0117s taip pat prisideda prie technini\u0173 skol\u0173 ma\u017einimo, nes padeda i\u0161vengti klaid\u0173 atsiradimo ir palengvina refaktorizavimo pastangas.<\/p>\n<p>Be to, geb\u0117jimas <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> palaikyti infrastrukt\u016bros poky\u010dius be b\u016btinyb\u0117s keisti <strong>verslo logika<\/strong> apsaugo nuo technini\u0173 skol\u0173. \u0160i galimyb\u0117 leid\u017eia komandoms prisitaikyti prie reikalavim\u0173 ar technologij\u0173 poky\u010di\u0173, neperra\u0161ant didel\u0117s programos dalies.<\/p>\n<h2>12. \u0160e\u0161iakamp\u0117 architekt\u016bra praktikoje<\/h2>\n<p>Prakti\u0161kai, <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> pateikia strukt\u016brizuot\u0105 po\u017ei\u016br\u012f \u012f programin\u0117s \u012frangos k\u016brim\u0105. \u0160e\u0161iakamp\u0117 riba aplink pagrindin\u0119 program\u0105 ai\u0161kiai apibr\u0117\u017eia, kur baigiasi programa ir kur <strong>i\u0161orinis pasaulis<\/strong> prasideda.<\/p>\n<p>Adapteriai veikia kaip sargai, ver\u010diantys i\u0161orini\u0173 dalyvi\u0173 u\u017eklausas \u012f pagrindinei programai suprantam\u0105 form\u0105 ir atvirk\u0161\u010diai. Tokiu b\u016bdu jie u\u017etikrina, kad pagrindin\u0117 programa i\u0161likt\u0173 nepriklausoma nuo i\u0161orinio pasaulio specifikos, nesvarbu, ar tai b\u016bt\u0173 duomen\u0173 baz\u0117, ar <strong>i\u0161orin\u0117 API<\/strong>arba <strong>naudotojo s\u0105saja<\/strong>.<\/p>\n<h2>13. \u012e domen\u0105 orientuotas projektavimas (DDD)<\/h2>\n<p>\u012e domen\u0105 orientuotas projektavimas (DDD) - tai programin\u0117s \u012frangos k\u016brimo metodika, pagal kuri\u0105 pirmenyb\u0117 teikiama pagrindin\u0117ms verslo koncepcijoms arba <strong>domeno logika<\/strong>, kuris yra pagrindin\u0117 projekto varomoji j\u0117ga. \u0160i metodika labai gerai dera su <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>, kuriame taip pat pabr\u0117\u017eiama <strong>verslo logika<\/strong> ir <strong>domeno modelis<\/strong> architekt\u016broje.<\/p>\n<p>Atsi\u017evelgiant \u012f <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>, DDD u\u017etikrina, kad taikomosios programos auk\u0161to lygio moduliai - srities sluoksniai - b\u016bt\u0173 nepriklausomi nuo i\u0161orini\u0173 element\u0173, pvz. <strong>naudotojo s\u0105saja<\/strong> arba duomen\u0173 baz\u0117je. \u0160\u012f nepriklausomum\u0105 u\u017etikrina prievadai ir adapteriai, kurie apsaugo domeno sluoksn\u012f nuo specifini\u0173 duomen\u0173 baz\u0117s ypatum\u0173.<strong> i\u0161orin\u0117s sistemos<\/strong>, taip sudarant galimyb\u0119<strong> domeno logika<\/strong> vystytis nepriklausomai.<\/p>\n<p>Be to, <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> papildo DDD strateginio projektavimo principus, \u012fskaitant riboto konteksto koncepcij\u0105. Kiekvien\u0105 DDD apribot\u0105 kontekst\u0105 galima \u012fsivaizduoti kaip \u0161e\u0161iakamp\u012f <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>, kurio pagrindas yra domeno modelis ir <strong>prievadai ir adapteriai<\/strong> veikia kaip ribos.<\/p>\n<h2>14. Mikroservisai<\/h2>\n<p>Kitas \u0161iuolaikinis architekt\u016bros stilius - mikroservisai - gali b\u016bti labai naudingas <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>. Decentralizuotas mikroservis\u0173 pob\u016bdis, kai kiekviena paslauga apima tam tikr\u0105 verslo geb\u0117jim\u0105, puikiai dera su mikroservis\u0173 inkapsuliavimu. <strong>verslo logika<\/strong> \u0161e\u0161iakampio \u0161erdyje.<\/p>\n<p>Kaip ir kiekvienas <a href=\"https:\/\/thecodest.co\/lt\/blog\/exploring-microservice-based-frontend-architecture\/\">mikroservisas<\/a> tur\u0117t\u0173 b\u016bti laisvai susieti su kitais, o kiekvienas \u0161e\u0161iakampis <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> taip pat yra izoliuotas nuo kit\u0173, su jais bendraujama tik per nustatytus prievadus ir adapterius. Tai leid\u017eia kiekvienai mikropaslaugai tur\u0117ti savo <strong>\u0161e\u0161iakamp\u0117 architekt\u016bra<\/strong>, tod\u0117l sukuriamas savaranki\u0161k\u0173, laisvai susiet\u0173 paslaug\u0173 rinkinys.<\/p>\n<p>Izoliacija, kuri\u0105 u\u017etikrina <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> gali b\u016bti ypa\u010d naudinga, kai susiduriama su sud\u0117tingomis ir paskirstytomis mikroservis\u0173 savyb\u0117mis. Izoliavus <strong>pagrindin\u0117 verslo logika<\/strong> i\u0161 i\u0161orinio pasaulio, <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> u\u017etikrina, kad <strong>verslo logika<\/strong> i\u0161lieka nepakitusi, nepaisant kit\u0173 paslaug\u0173 ar <strong>i\u0161orin\u0117s sistemos<\/strong>.<\/p>\n<h2>15. \u0160e\u0161iakamp\u0117s architekt\u016bros palyginimas su kitomis architekt\u016bromis<\/h2>\n<p>Programin\u0117s \u012frangos projektavimo b\u016bdas gali tur\u0117ti didel\u0119 \u012ftak\u0105 jos raidai laikui b\u0117gant. Palyginimas <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> \u012f kitas architekt\u016bras suteikia <a href=\"https:\/\/thecodest.co\/lt\/blog\/why-us-companies-are-opting-for-polish-developers\/\">mus<\/a> geriau suprasti jos privalumus ir galimus kompromisus.<\/p>\n<h2>16. \u0160e\u0161iakamp\u0117 architekt\u016bra ir sluoksniuotoji architekt\u016bra<\/h2>\n<p><strong>Daugiasluoksn\u0117 architekt\u016bra <\/strong>yra tradicinis <strong>architekt\u016brinis modelis<\/strong> kuris strukt\u016brizuoja program\u0105 \u012f loginius sluoksnius - da\u017enai pateikimo, verslo ir duomen\u0173 prieigos sluoksnius. Pagrindinis \u0161io modelio tr\u016bkumas yra tas, kad jis skatina stipri\u0105 priklausomyb\u0119 tarp sluoksni\u0173, tod\u0117l pasikeitimai viename sluoksnyje gali paveikti vis\u0105 taikom\u0105j\u0105 program\u0105.<\/p>\n<p>Prie\u0161ingai, <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> suma\u017eina tokias priklausomybes. Vietoj sluoksni\u0173 jis turi <strong>taikomosios programos \u0161erdis<\/strong> apsuptas kei\u010diam\u0173 adapteri\u0173. Pavyzd\u017eiui, duomen\u0173 baz\u0117s serverio pakeitimai tur\u0117t\u0173 \u012ftakos tik atitinkamam adapteriui, o <strong>taikomosios programos \u0161erdis<\/strong> ir kiti adapteriai nepaliesti.<\/p>\n<h2>17. \u0160e\u0161iakamp\u0117 architekt\u016bra ir \u0161vari architekt\u016bra<\/h2>\n<p><strong>\u0160vari architekt\u016bra<\/strong>, kitas <strong>architekt\u016brinis modelis<\/strong>, turi daug pana\u0161um\u0173 su <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>. Jie abu pabr\u0117\u017eia r\u016bpes\u010di\u0173 atskyrim\u0105, siekia i\u0161skirti pagrindines <strong>verslo taisykl\u0117s<\/strong> nuo i\u0161orini\u0173 detali\u0173 ir laikytis <strong>Priklausomyb\u0117s apvertimo principas<\/strong>.<\/p>\n<p>Ta\u010diau, <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> daugiau d\u0117mesio skiriama tam, kaip programa s\u0105veikauja su <strong>ne<\/strong> pasaulyje naudojant prievadus ir adapterius, o <strong>\u0160vari architekt\u016bra<\/strong> pateikiama i\u0161samesn\u0117 vidini\u0173 architekt\u016bros sluoksni\u0173 strukt\u016bra. Kitaip tariant, <strong>\u0160vari architekt\u016bra<\/strong> gali b\u016bti laikomas papildomu rinkiniu <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>, su papildomomis gair\u0117mis, kaip organizuoti vidin\u0119 programos strukt\u016br\u0105.<\/p>\n<h2>18. \u0160e\u0161iakamp\u0117 architekt\u016bra ir svog\u016bn\u0173 architekt\u016bra<\/h2>\n<p><strong>Svog\u016bn\u0173 architekt\u016bra<\/strong> yra dar vienas architekt\u016bros stilius, kuriuo siekiama izoliuoti <strong>pagrindin\u0117 verslo logika<\/strong> i\u0161 <strong>i\u0161orin\u0117s s\u0105sajos<\/strong> ir infrastrukt\u016bra. J\u012f sudaro keli koncentriniai sluoksniai, kuri\u0173 centre yra domeno modelis, o kiekvienas sluoksnis gali priklausyti tik nuo jo viduje esan\u010di\u0173 sluoksni\u0173.<\/p>\n<p>Nors juos sieja bendras tikslas, \"Hexagonal\" ir <strong>Svog\u016bn\u0173 architekt\u016bra <\/strong>pasiekti \u0161iek tiek skirtingais b\u016bdais. <strong>Svog\u016bn\u0173 architekt\u016bra<\/strong> daug d\u0117mesio skiriama priklausomybi\u0173 kryp\u010diai, u\u017etikrinant, kad visos priklausomyb\u0117s b\u016bt\u0173 nukreiptos \u012f vid\u0173. <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>nors taip pat pritaria \u012f vid\u0173 nukreiptoms priklausomyb\u0117ms, daugiau d\u0117mesio skiria s\u0105veikai su <strong>i\u0161orinis pasaulis <\/strong>per prievadus ir adapterius.<\/p>\n<h2>19. \u0160e\u0161iakamp\u0117s architekt\u016bros testavimas<\/h2>\n<p>Pagrindinis privalumas<strong> \u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> yra tai, kad joje daugiausia d\u0117mesio skiriama testavimo galimyb\u0117ms. Atskiriant pagrindin\u0119 program\u0105 nuo<strong> i\u0161orinis pasaulis<\/strong> naudojant prievadus ir adapterius, \u0161e\u0161iakamp\u0117 architekt\u016bra leid\u017eia vykdyti <strong>automatiniai testai<\/strong> kuri gali u\u017etikrinti programin\u0117s \u012frangos stabilum\u0105 ir teisingum\u0105.<\/p>\n<p>\u012e <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>. <strong>pirminiai prievadai<\/strong>, kurie apima pagrindin\u0119 <strong>verslo taisykl\u0117s<\/strong>, galima patikrinti nepriklausomai nuo i\u0161orinio pasaulio. Pavyzd\u017eiui, u\u017euot testuojant bendravus su tikra duomen\u0173 baze, galima <strong>duomen\u0173 baz\u0117s adapteris<\/strong> galima pakeisti \u012f bandom\u0105j\u012f dubl\u012f, imituojant\u012f tikros duomen\u0173 baz\u0117s elges\u012f. Tai leid\u017eia k\u016br\u0117jams sutelkti d\u0117mes\u012f \u012f testavim\u0105 <strong>verslo taisykl\u0117s<\/strong>o ne s\u0105veika su duomen\u0173 baze.<\/p>\n<p>Be to, <strong>automatizuoti regresijos testai<\/strong> galima nesunkiai sukurti, kad b\u016bt\u0173 galima patvirtinti, jog sistema elgiasi taip, kaip tikimasi, kai atliekami pakeitimai. Toks testavimo lygis yra didelis privalumas pri\u017ei\u016brint ir atnaujinant programin\u0119 \u012frang\u0105, nes padeda aptikti ir i\u0161taisyti problemas ankstyvoje stadijoje. <a href=\"https:\/\/thecodest.co\/lt\/blog\/how-the-codests-team-extension-model-can-transform-your-in-house-development-team\/\">k\u016brimo procesas<\/a>.<\/p>\n<p>Be to, strukt\u016bra<strong> \u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> taip pat palaiko integracijos bandymus. Pakeitus <strong>i\u0161oriniai komponentai<\/strong> (pvz., duomen\u0173 baz\u0117s serveris arba <strong>i\u0161orin\u0117 API<\/strong>) su bandym\u0173 dubliais, k\u016br\u0117jai gali patikrinti, kaip <strong>taikomosios programos \u0161erdis<\/strong> integruojasi su \u0161iais komponentais nenaudojant i\u0161orini\u0173 sistem\u0173. Tai gali gerokai padidinti bandym\u0173 greit\u012f ir patikimum\u0105.<\/p>\n<h2> I\u0161vada<\/h2>\n<p><strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> tampa viliojan\u010diu sprendimu did\u017eiul\u0117je programin\u0117s \u012frangos k\u016brimo strategij\u0173 erdv\u0117je. Ji i\u0161siskiria tuo, kad atskiria <strong>taikomosios programos \u0161erdis<\/strong> i\u0161 i\u0161orin\u0117s aplinkos, taip u\u017etikrinant auk\u0161t\u0105 prie\u017ei\u016bros, testavimo ir lankstumo lyg\u012f. Toks atskyrimas padeda programuotojams sutelkti d\u0117mes\u012f \u012f pagrindin\u0119 <strong>verslo logika<\/strong>, tuo pat metu didinant programin\u0117s \u012frangos atsparum\u0105 poky\u010diams. <strong>i\u0161orin\u0117s sistemos<\/strong>.<\/p>\n<p>Nors \u0161e\u0161iakamp\u0117 architekt\u016bra turi kompromis\u0173, d\u0117l daugyb\u0117s jos privalum\u0173 ji yra labai vertingas bet kurio k\u016br\u0117jo \u012franki\u0173 rinkinio privalumas. \u0160ioje srityje <strong>programin\u0117s \u012frangos architekt\u016bra<\/strong>, \u0161e\u0161iakampis modelis ir toliau dominuoja.<\/p>\n<p>\u0160iame straipsnyje, papildytame <strong>kodo pavyzd\u017eiai<\/strong>, siekiama i\u0161samiai suprasti <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong> ir jo galim\u0105 naud\u0105. Nepamir\u0161kite, kad veiksmingos architekt\u016bros paslaptis slypi ne aklame \u0161ablon\u0173 laikymesi, o pagrindini\u0173 princip\u0173 supratime ir apgalvotame j\u0173 \u012fgyvendinime, kad atitikt\u0173 konkre\u010dius reikalavimus.<\/p>\n<p>\u0160e\u0161iakamp\u0117s architekt\u016bros srityje s\u0105saja, apibr\u0117\u017eta tarp <strong>taikymo sluoksnis<\/strong> ir <strong>duomen\u0173 sluoksnis<\/strong> labai svarbu. Nesvarbu, ar esate <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/what-is-a-software-architect\/\">programin\u0117s \u012frangos architektas<\/a> svarsto galimyb\u0119 taikyti \u0161i\u0105 metodik\u0105 arba <a href=\"https:\/\/thecodest.co\/lt\/blog\/hire-vue-js-developers\/\">k\u016br\u0117jas<\/a> stengiantis suprasti jos sud\u0117tingum\u0105, akivaizdu, kad \u0161ios architekt\u016bros \u012ftaka vis did\u0117ja. Ji demonstruoja \u012fvairius b\u016bdus, kaip j\u0105 galima veiksmingai panaudoti. Pvz. <strong><a href=\"https:\/\/thecodest.co\/lt\/dictionary\/what-is-fintech-in-banking\/\">bankininkyst\u0117<\/a> parai\u0161ka<\/strong>. <strong>saugyklos s\u0105saja<\/strong> gali veikti kaip antrinis adapteris, jungiantis <strong>programos branduolys<\/strong> su <strong>i\u0161orinis kodas<\/strong>. Toks atskyrimas leid\u017eia lanks\u010diai keisti <strong>konkretus \u012fgyvendinimas<\/strong> i\u0161 <strong>fail\u0173 sistema<\/strong> arba konkre\u010di\u0105 technologij\u0105, nedarant poveikio taikom\u0173j\u0173 program\u0173 paslaugoms.<\/p>\n<p>Svetain\u0117 <strong>pl\u0117tra <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/how-to-lead-software-development-team\/\">komanda<\/a><\/strong> dabar gali dirbti su <strong>kairioji pus\u0117<\/strong> parai\u0161k\u0105, nesir\u016bpindami d\u0117l <strong>i\u0161oriniai veiksniai<\/strong>, taip u\u017etikrinant skland\u017ei\u0105 pa\u017eang\u0105. Taigi, baigiame savo pa\u017eint\u012f su pasauliu <strong>\u0160e\u0161iakamp\u0117 architekt\u016bra<\/strong>, architekt\u016bros stilius, kurio \u012ftaka programin\u0117s \u012frangos k\u016brimo srityje vis did\u0117ja.<br \/>\n<a href=\"https:\/\/thecodest.co\/contact\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/interested_in_cooperation_.png\" alt=\"bendradarbiavimo v\u0117liava\" \/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Susipa\u017einkite su \u0161e\u0161iakamp\u0117s architekt\u016bros galimyb\u0117mis didinti programin\u0117s \u012frangos palaikomum\u0105, testuotinum\u0105 ir pritaikomum\u0105.<\/p>","protected":false},"author":2,"featured_media":3624,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3623","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>The Power of Hexagonal Architecture - The Codest<\/title>\n<meta name=\"description\" content=\"Explore the power of Hexagonal Architecture in software development, enhancing maintainability, testability, and flexibility. Learn how this architectural style, also known as Ports and Adapters, separates core business logic from external systems, supporting Domain-Driven Design, microservices, and reducing technical debt.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/lt\/tinklarastis\/sesiakampes-architekturos-galia\/\" \/>\n<meta property=\"og:locale\" content=\"lt_LT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Power of Hexagonal Architecture\" \/>\n<meta property=\"og:description\" content=\"Explore the power of Hexagonal Architecture in software development, enhancing maintainability, testability, and flexibility. Learn how this architectural style, also known as Ports and Adapters, separates core business logic from external systems, supporting Domain-Driven Design, microservices, and reducing technical debt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/lt\/tinklarastis\/sesiakampes-architekturos-galia\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-13T13:29:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-10T07:51:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/unlocking_the_possibilities_with_hexagonal_architecture.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"The Power of Hexagonal Architecture\",\"datePublished\":\"2023-06-13T13:29:49+00:00\",\"dateModified\":\"2024-09-10T07:51:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/\"},\"wordCount\":2868,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/unlocking_the_possibilities_with_hexagonal_architecture.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"lt-LT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/\",\"name\":\"The Power of Hexagonal Architecture - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/unlocking_the_possibilities_with_hexagonal_architecture.png\",\"datePublished\":\"2023-06-13T13:29:49+00:00\",\"dateModified\":\"2024-09-10T07:51:21+00:00\",\"description\":\"Explore the power of Hexagonal Architecture in software development, enhancing maintainability, testability, and flexibility. Learn how this architectural style, also known as Ports and Adapters, separates core business logic from external systems, supporting Domain-Driven Design, microservices, and reducing technical debt.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/#breadcrumb\"},\"inLanguage\":\"lt-LT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"lt-LT\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/unlocking_the_possibilities_with_hexagonal_architecture.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/unlocking_the_possibilities_with_hexagonal_architecture.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-power-of-hexagonal-architecture\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Power of Hexagonal Architecture\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"lt-LT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lt-LT\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lt-LT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/lt\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u0160e\u0161iakamp\u0117s architekt\u016bros galia - The Codest","description":"Susipa\u017einkite su \u0161e\u0161iakamp\u0117s architekt\u016bros galimyb\u0117mis kuriant programin\u0119 \u012frang\u0105, gerinant jos palaikomum\u0105, testavim\u0105 ir lankstum\u0105. Su\u017einokite, kaip \u0161is architekt\u016brinis stilius, dar \u017einomas kaip \"Ports and Adapters\", atskiria pagrindin\u0119 verslo logik\u0105 nuo i\u0161orini\u0173 sistem\u0173, palaiko domeno valdom\u0105 dizain\u0105, mikroservisus ir ma\u017eina technin\u0119 skol\u0105.","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:\/\/thecodest.co\/lt\/tinklarastis\/sesiakampes-architekturos-galia\/","og_locale":"lt_LT","og_type":"article","og_title":"The Power of Hexagonal Architecture","og_description":"Explore the power of Hexagonal Architecture in software development, enhancing maintainability, testability, and flexibility. Learn how this architectural style, also known as Ports and Adapters, separates core business logic from external systems, supporting Domain-Driven Design, microservices, and reducing technical debt.","og_url":"https:\/\/thecodest.co\/lt\/tinklarastis\/sesiakampes-architekturos-galia\/","og_site_name":"The Codest","article_published_time":"2023-06-13T13:29:49+00:00","article_modified_time":"2024-09-10T07:51:21+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/unlocking_the_possibilities_with_hexagonal_architecture.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"The Power of Hexagonal Architecture","datePublished":"2023-06-13T13:29:49+00:00","dateModified":"2024-09-10T07:51:21+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/"},"wordCount":2868,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/unlocking_the_possibilities_with_hexagonal_architecture.png","articleSection":["Software Development"],"inLanguage":"lt-LT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/","url":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/","name":"\u0160e\u0161iakamp\u0117s architekt\u016bros galia - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/unlocking_the_possibilities_with_hexagonal_architecture.png","datePublished":"2023-06-13T13:29:49+00:00","dateModified":"2024-09-10T07:51:21+00:00","description":"Susipa\u017einkite su \u0161e\u0161iakamp\u0117s architekt\u016bros galimyb\u0117mis kuriant programin\u0119 \u012frang\u0105, gerinant jos palaikomum\u0105, testavim\u0105 ir lankstum\u0105. Su\u017einokite, kaip \u0161is architekt\u016brinis stilius, dar \u017einomas kaip \"Ports and Adapters\", atskiria pagrindin\u0119 verslo logik\u0105 nuo i\u0161orini\u0173 sistem\u0173, palaiko domeno valdom\u0105 dizain\u0105, mikroservisus ir ma\u017eina technin\u0119 skol\u0105.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/#breadcrumb"},"inLanguage":"lt-LT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/"]}]},{"@type":"ImageObject","inLanguage":"lt-LT","@id":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/unlocking_the_possibilities_with_hexagonal_architecture.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/unlocking_the_possibilities_with_hexagonal_architecture.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/the-power-of-hexagonal-architecture\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"The Power of Hexagonal Architecture"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"lt-LT"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"lt-LT","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"lt-LT","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/lt\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3623","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/comments?post=3623"}],"version-history":[{"count":5,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3623\/revisions"}],"predecessor-version":[{"id":8012,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3623\/revisions\/8012"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/media\/3624"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/media?parent=3623"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/categories?post=3623"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/tags?post=3623"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}