{"id":37273,"date":"2019-10-31T22:16:42","date_gmt":"2019-10-31T19:16:42","guid":{"rendered":"https:\/\/prohoster.info\/blog\/korotko-o-glavnom-clean-architecture-robert-c-martin\/"},"modified":"2019-10-31T22:16:42","modified_gmt":"2019-10-31T19:16:42","slug":"korotko-o-glavnom-clean-architecture-robert-c-martin","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/news\/korotko-o-glavnom-clean-architecture-robert-c-martin","title":{"rendered":"R\u00f6viden a l\u00e9nyeg: Clean Architecture, Robert C. Martin","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ez egy besz\u00e1mol\u00f3 lesz a k\u00f6nyv benyom\u00e1sair\u00f3l, valamint n\u00e9h\u00e1ny fogalom \u00e9s tud\u00e1s, amelyet ennek a k\u00f6nyvnek k\u00f6sz\u00f6nhet\u0151en megtanultunk.<\/p>\n<h3>Architekt\u00fara<\/h3>\n<p>\nTudja-e, hogy olvasva ezt a publik\u00e1ci\u00f3t, egy\u00e9rtelm\u0171 v\u00e1laszt tud adni arra a k\u00e9rd\u00e9sre, hogy mi az architekt\u00fara? Mi az architekt\u00fara a programoz\u00e1s \u00e9s tervez\u00e9s kontextus\u00e1ban? Milyen szerepet j\u00e1tszik? Sok hom\u00e1lyos dolog van ezzel a kifejez\u00e9ssel kapcsolatban. \u00dagy t\u0171nik, minden vil\u00e1gos, de valahogy t\u00fal absztrakt, \u00e9s pontoss\u00e1g n\u00e9lk\u00fcl. Martin \u00fagy v\u00e9li, \u00e9s egyet\u00e9rtek vele, hogy az alkalmaz\u00e1snak k\u00e9t \u00f6sszetev\u0151je van: <\/p>\n<ol>\n<li>A viselked\u00e9s (behavior) \u2014 a funkci\u00f3k \u00e9s feladatok, amelyeket a program (komponens, szolg\u00e1ltat\u00e1s) v\u00e9grehajt.<\/li>\n<li>Az architekt\u00fara \u2014 ez a kifejez\u00e9s ink\u00e1bb az alkalmaz\u00e1s megv\u00e1ltoztat\u00e1s\u00e1r\u00f3l sz\u00f3l.<\/li>\n<\/ol>\n<p>\nDe m\u00e9g ha az alkalmaz\u00e1s nagyon j\u00f3l v\u00e9gzi is a feladatot, amit el kell v\u00e9geznie, ez egy\u00e1ltal\u00e1n nem jelenti azt, hogy j\u00f3 architekt\u00far\u00e1val rendelkezik. Az architekt\u00fara nem az alkalmaz\u00e1s viselked\u00e9s\u00e9r\u0151l sz\u00f3l. Az architekt\u00fara a v\u00e1ltoztat\u00e1s k\u00f6nnyeds\u00e9g\u00e9r\u0151l sz\u00f3l, az architekt\u00fara a telep\u00edt\u00e9s k\u00f6nnyeds\u00e9g\u00e9r\u0151l sz\u00f3l, az architekt\u00fara a fejleszt\u00e9s f\u00fcggetlens\u00e9g\u00e9r\u0151l sz\u00f3l. Az architekt\u00fara a gyorsas\u00e1gr\u00f3l sz\u00f3l, amellyel az \u00faj csapattagok meg\u00e9rtik a dolgokat.<\/p>\n<p>\u00c9s arr\u00f3l, hogyan lehet fel\u00e9p\u00edteni ezt az architekt\u00far\u00e1t, hogyan lehet megszabadulni a fejf\u00e1j\u00e1st\u00f3l, amikor a PM-t\u0151l vagy a stakeholder-t\u0151l kisebb k\u00f6vetelm\u00e9nyek v\u00e1ltoz\u00e1sa \u00e9rkezik: err\u0151l fog mes\u00e9lni a k\u00f6nyv.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>A szerz\u0151kr\u0151l<\/h3>\n<p>\nMiel\u0151tt b\u00e1rmit is mondan\u00e9k err\u0151l a k\u00f6nyvr\u0151l, szeretn\u00e9k egy kicsit magamr\u00f3l besz\u00e9lni.<br \/>\nJelenleg Strong Junior Developer vagyok, aki ASP .NET CORE-ban szakter\u00fclete elj\u00e1r\u00e1sok fejleszt\u00e9s\u00e9re specializ\u00e1l\u00f3dott.<\/p>\n<p>M\u00e1r egy \u00e9ve dolgozom egy \"gal\u00e9ri\u00e1ban\", \u00e9s \u00fagy t\u0171nik, fokozatosan megbirk\u00f3zom a feladattal.<\/p>\n<p>Ezt a k\u00f6nyvet m\u00e1r k\u00e9t alkalommal elolvastam, \u00e9s mindenkinek aj\u00e1nlom a figyelm\u00e9be:<\/p>\n<ul>\n<li>be\u00e1gyazott rendszerek fejleszt\u0151inek;<\/li>\n<li>frontend fejleszt\u0151knek;<\/li>\n<li>backend fejleszt\u0151knek;<\/li>\n<li>s\u0151t, m\u00e9g DevOps-oknak is.<\/li>\n<\/ul>\n<p>\n\u00d6sszess\u00e9g\u00e9ben mindenkinek, aki b\u00e1rmilyen m\u00f3don kapcsolatban \u00e1ll a szoftverfejleszt\u00e9ssel, bele\u00e9rtve a k\u00fcl\u00f6nf\u00e9le Sales- \u00e9s PM-ket (b\u00e1r az is hasznos lenne tudni, mi\u00e9rt az \u00fcgyfelek k\u00e9tszer annyi id\u0151t t\u00f6ltenek egy feladatra), aj\u00e1nlom ezt a k\u00f6nyvet.<br \/>\nMost pedig megpr\u00f3b\u00e1lom \u00e9rvelni, mi\u00e9rt is gondolom ezt.<\/p>\n<p>Kicsit az k\u00f6nyv szerz\u0151j\u00e9r\u0151l (mert sz\u00e1momra a szerz\u0151 tekint\u00e9lye nagy jelent\u0151s\u00e9ggel b\u00edr). Azt hiszem, meg fogja \u00e9rteni, m\u00e9g ha ez nem is mindig helyes, de ha egy tekint\u00e9lyes szem\u00e9ly a szakter\u00fcleten mond valamit \u2013 akkor sokkal nagyobb bizalmat \u00e9rez az \u00e1ltala mondott ir\u00e1nt. P\u00e9ld\u00e1ul, szerintem jobban hinni fog az orvos \u00e1ltal fel\u00e1ll\u00edtott diagn\u00f3zisban, mint valaki m\u00e1sban a t\u00f6megb\u0151l (aki a t\u00fcneteket a neten keresg\u00e9lte).<\/p>\n<p>Robert Martin, m\u00e1s n\u00e9ven Uncle Bob (Bob b\u00e1csi) a programoz\u00e1s ter\u00fclet\u00e9n dolgozik, k\u00fcl\u00f6nb\u00f6z\u0151 rendszerekben (a webszolg\u00e1ltat\u00e1sokt\u00f3l az embedded rendszerekig) 1970 \u00f3ta. M\u0171szaki tan\u00e1csad\u00f3 \u00e9s \u00e9p\u00edt\u00e9sz, k\u00fcl\u00f6nf\u00e9le technikai foly\u00f3iratokban \u00edrt, maga is nagyon tapasztalt programoz\u00f3, \u00e9s az egyik kulcsszerepl\u0151 volt a h\u00edres SOLID elveket megalkot\u00e1s\u00e1ban (mondhatjuk, \u0151 volt a teremt\u0151je). Ezen k\u00edv\u00fcl szeretn\u00e9m hozz\u00e1tenni, hogy ezt a k\u00f6nyvet a 15+ \u00e9ves tapasztalattal rendelkez\u0151 csapatvezet\u0151m aj\u00e1nlotta nekem.<\/p>\n<h2>A k\u00f6nyvr\u0151l<\/h2>\n<p><\/p>\n<h3>F\u00fcgg\u0151s\u00e9gek<\/h3>\n<p>\nA k\u00f6nyv olvas\u00e1sa el\u0151tt el\u00e9g sok cikket olvastam ugyanazon a Habr-on, ahol el\u0151ker\u00fclt egy olyan sz\u00f3, mint az \"f\u00fcgg\u0151s\u00e9g\". Mi ez, ki kit\u0151l f\u00fcgg, mit jelent konkr\u00e9tan a \"f\u00fcgg\" sz\u00f3, \u00e9s hogyan f\u00fcgghet egy oszt\u00e1ly valakit\u0151l? <\/p>\n<p>Ahogy olvastam a k\u00f6nyvet, k\u00e9t dolgot meg\u00e9rtettem:<\/p>\n<p>A f\u00fcgg\u0151s\u00e9g egy olyan kifejez\u00e9s, amely azt jelenti, hogy egy oszt\u00e1ly (komponens, szolg\u00e1ltat\u00e1s) tud m\u00e1sik oszt\u00e1lyr\u00f3l (komponensr\u0151l, szolg\u00e1ltat\u00e1sr\u00f3l), \u00e9s ez a tud\u00e1s k\u00f3d szinten hat\u00e1roz\u00f3dik meg (most a Java, C# \u00e9s C nyelv\u0171ek biztosan meg\u00e9rtik) egy adott n\u00e9vt\u00e9r import\u00e1l\u00e1s\u00e1val. M\u00e1s szavakkal: van egy A oszt\u00e1lyod a Default.Classes n\u00e9vt\u00e9rrel \u00e9s egy B oszt\u00e1lyod az Another.Classes n\u00e9vt\u00e9rrel. Ha az A oszt\u00e1ly k\u00f3dj\u00e1ban ott szerepel a using Another.Classes; \u2013 akkor ez azt jelenti, hogy az A oszt\u00e1ly f\u00fcgg a B oszt\u00e1lyt\u00f3l. <br \/>\nA diagram alapj\u00e1n, hogy hol tal\u00e1lhat\u00f3 a f\u00fcgg\u0151 oszt\u00e1ly, \u00e9s hol nem \u2013 n\u00e9zze meg a ny\u00edl ir\u00e1ny\u00e1t: 1) a ny\u00edl az A oszt\u00e1lyb\u00f3l B oszt\u00e1ly fel\u00e9 mutat. Ez azt jelenti, hogy a B oszt\u00e1ly f\u00fcggetlenebb, mint az A. Az A oszt\u00e1lyban v\u00e9gzett m\u00f3dos\u00edt\u00e1sok semmif\u00e9le \"k\u00e1rt\" nem okoznak a B oszt\u00e1lynak.<\/p>\n<p><img decoding=\"async\" alt=\"R\u00f6viden a l\u00e9nyeg: Clean Architecture, Robert C. Martin\" src=\"\/wp-content\/uploads\/2019\/08\/e8a54c03bc1aaf23aec3d24b002fc866.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>SOLID<\/h3>\n<p>\nAz egyik f\u0151 ok, ami miatt elolvastam ezt a k\u00f6nyvet \u2013 az S\u041eLID elvek magyar\u00e1zata az eredeti forr\u00e1sb\u00f3l, mert Uncle Bob dolgozta ki ezeket az elveket, \u00e9s mondhatjuk, hogy neki k\u00f6sz\u00f6nhetj\u00fck ezt a nevet \u2013 SOLID.<br \/>\nAzok sz\u00e1m\u00e1ra, akik nem tudj\u00e1k \u2014 ezek az elvek azt mondj\u00e1k \u00e9s javasolj\u00e1k, hogy a saj\u00e1t alkalmaz\u00e1saikat \u00f6t szab\u00e1ly szerint tervezze meg:<\/p>\n<p>S \u2014 SRP (Egys\u00e9ges felel\u0151ss\u00e9g elve)<br \/>\nO \u2014 OCP (Nyitott-z\u00e1rt elv)<br \/>\nL \u2014 LSP (Liskov-helyettes\u00edt\u00e9si elv)<br \/>\nI \u2014 ISP (Fel\u00fclet szepar\u00e1ci\u00f3s elv)<br \/>\nD \u2014 DIP (F\u00fcgg\u0151s\u00e9gi inverzi\u00f3 elve)<\/p>\n<p>Ezek az elvek alkalmazhat\u00f3ak oszt\u00e1lyok \u00e9s objektumok szintj\u00e9n, modulok \u00e9s komponensek szintj\u00e9n, valamint r\u00e9tegek (szolg\u00e1ltat\u00e1sok) szintj\u00e9n.<\/p>\n<p>Ha \u00fagy gondolja, hogy az Egys\u00e9ges felel\u0151ss\u00e9g elve azt jelenti, hogy az oszt\u00e1lynak vagy modulnak csup\u00e1n egy feladatot kell ell\u00e1tnia \u2014 akkor mindenk\u00e9ppen el kell olvasnia a SOLID-r\u00f3l sz\u00f3l\u00f3 fejezetet. Mert az a meghat\u00e1roz\u00e1s, ami fent van, k\u00f6vetkezm\u00e9ny, de nem maga az elv.<\/p>\n<h3>A F\u00fcgg\u0151s\u00e9gi Inverzi\u00f3r\u00f3l<\/h3>\n<p>\nK\u00fcl\u00f6n\u00f6s figyelmet szeretn\u00e9k ford\u00edtani a F\u00fcgg\u0151s\u00e9gi Inverzi\u00f3 Elv\u00e9nek magyar\u00e1zat\u00e1ra (ez a SOLID D-je). A k\u00f6nyv olvas\u00e1sa k\u00f6zben r\u00e1j\u00f6ttem, hogy ez nem csup\u00e1n elv, hanem egy mechanizmus \u00e9s eszk\u00f6z, amellyel megv\u00e1ltoztathatja a f\u00fcgg\u0151s\u00e9gei ir\u00e1ny\u00e1t, \u00e9s p\u00e9ld\u00e1ul a v\u00e1llalati logik\u00e1t (DOMAIN) f\u00fcggetlenn\u00e9 teheti az Adat-hozz\u00e1f\u00e9r\u00e9si r\u00e9teg (DAL) megval\u00f3s\u00edt\u00e1si r\u00e9szleteit\u0151l.<\/p>\n<p><img decoding=\"async\" alt=\"R\u00f6viden a l\u00e9nyeg: Clean Architecture, Robert C. Martin\" src=\"\/wp-content\/uploads\/2019\/08\/0bceb51ecdb3d220d8a311d0ccdb26d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nB\u00e1r az elv maga, a t\u00f6bbi SOLID elvvel egy\u00fctt, nem pontosan azt jelenti, mint a mechanizmus, a mechanizmust a k\u00f6nyv sor\u00e1n v\u00e9gig alkalmazz\u00e1k, \u00e9s ez az egyik f\u0151 m\u00f3dszer a f\u00fcgg\u0151s\u00e9gek ir\u00e1ny\u00e1nak megv\u00e1ltoztat\u00e1s\u00e1ra, amelyet am\u00fagy a DDD is haszn\u00e1l.<\/p>\n<h3>Az architektur\u00e1lis d\u00f6nt\u00e9sek meghozatal\u00e1r\u00f3l<\/h3>\n<p>\nA k\u00f6nyvben gyakran eml\u00edt\u00e9st nyer a fontos architektur\u00e1lis d\u00f6nt\u00e9sek elve: hogy milyen adatb\u00e1zist, milyen keretrendszert, milyen k\u00f6nyvt\u00e1rat v\u00e1lasszon, mit haszn\u00e1ljon keres\u0151motork\u00e9nt stb.<\/p>\n<p>Sz\u00f3val az \u00edr\u00f3 \u00fagy v\u00e9li: A lehet\u0151 legkevesebb ilyen t\u00edpus\u00fa d\u00f6nt\u00e9st kell hoznia. Mivel a k\u00f6vetelm\u00e9nyek v\u00e1ltozhatnak, a teljes\u00edtm\u00e9nybeli korl\u00e1tok is, a viselked\u00e9si t\u00e9nyez\u0151k pedig hajlamosak v\u00e1ltozni. A fejleszt\u00e9s sor\u00e1n egy d\u00f6nt\u00e9s kev\u00e9sb\u00e9 hat\u00e9konynak vagy k\u00e9nyelmesnek t\u0171nhet, mint egy m\u00e1sik. Az architekt\u00far\u00e1j\u00e1nak ereje fogja meghat\u00e1rozni, hogy mennyire gyorsan \u00e9s f\u00e1jdalommentesen tudja egy technol\u00f3giai megold\u00e1st egy m\u00e1sikkal helyettes\u00edteni (err\u0151l egy\u00e9bk\u00e9nt a OCP is besz\u00e9l).<\/p>\n<p>P\u00e9ld\u00e1ul, hirtelen \u00fagy d\u00f6nt, hogy a Postgresql helyett a MongoDb-t haszn\u00e1l, vagy ak\u00e1r f\u00e1jlokat, vagy egy\u00e1ltal\u00e1n be\u00e1gyazott adatokat, amelyekkel m\u0171veleteket v\u00e9gez a mem\u00f3ri\u00e1ban. \u00c9s bizonyos k\u00f6r\u00fclm\u00e9nyek k\u00f6z\u00f6tt \u2014 ez szinte az \u00f6sszes logik\u00e1j\u00e1t \u00fajra\u00edrhatja. <\/p>\n<p>Annak elker\u00fcl\u00e9se \u00e9rdek\u00e9ben, hogy ilyen helyzetek mer\u00fcljenek fel, olyan mechanizmusokat haszn\u00e1lhatunk, amelyek a lehet\u0151 legmesszebb elh\u00fazz\u00e1k a d\u00f6nt\u00e9shozatali id\u0151t. Az egyik ilyen mechanizmus az absztrakci\u00f3.<\/p>\n<h3>Hivatkoz\u00e1sok a DDD-re<\/h3>\n<p>\nA DDD \u2014 Domain Driven Design \u2014 egy olyan megk\u00f6zel\u00edt\u00e9s a komplex \u00fczleti logik\u00e1t ig\u00e9nyl\u0151 szolg\u00e1ltat\u00e1sok fejleszt\u00e9s\u00e9re, amely a projekt ir\u00e1ny\u00edt\u00f3 szem\u00e9lyzet\u00e9nek (projektmenedzserek, \u00e9rt\u00e9kes\u00edt\u00e9si menedzserek stb.) maxim\u00e1lis meg\u00e9rt\u00e9s\u00e9re \u00f6sszpontos\u00edt, \u00e9s a 'h\u00e9tk\u00f6znapi' munkat\u00e1rsakra. Azaz, hogy a projekt minden tagja sz\u00e1m\u00e1ra egy\u00e9rtelm\u0171 nyelvezet alakuljon ki, \u00e9s mindenki meg\u00e9rthesse a m\u00e1sikat, hogy mindenki egy domainben gondolkodjon, azonos \u00fczleti szab\u00e1lyokkal.<\/p>\n<p>Ha \u00d6n DDD t\u00e1mogatja, vagy szeretne az lenni, esetleg nem \u00e9rti teljesen, de \u00e9rteni szeretn\u00e9 \u2014 a k\u00f6nyv k\u00f6telez\u0151 olvasm\u00e1ny, k\u00fcl\u00f6n\u00f6sen a k\u00f6nyv m\u00e1sodik r\u00e9sze.<\/p>\n<p>Itt a szerz\u0151 a Dependency Rule l\u00e9tez\u00e9s\u00e9r\u0151l besz\u00e9l, \u00e9s arr\u00f3l, hogy mi\u00e9rt fogja a helyes architekt\u00fara meg\u00e9p\u00edt\u00e9s\u00e9hez vezetni az, ha k\u00f6veti ezt. Mi\u00e9rt kell a f\u00fcgg\u0151s\u00e9geknek a magas politikai komponensek ir\u00e1ny\u00e1ba haladniuk, \u00e9s mi\u00e9rt. <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hu\/domain\/\"   title=\"domain\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"4077\">domain<\/a> (Magas politikai komponens) f\u00fcggetlennek kell lennie az infrastrukt\u00far\u00e1t\u00f3l, \u00e9s ez hogyan egyszer\u0171s\u00edti a telep\u00edt\u00e9st \u00e9s a fejleszt\u00e9st.<\/p>\n<p><img decoding=\"async\" alt=\"R\u00f6viden a l\u00e9nyeg: Clean Architecture, Robert C. Martin\" src=\"\/wp-content\/uploads\/2019\/08\/be7b51d067415390e0098339fb6cda46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Absztrakci\u00f3<\/h3>\n<p>\nRobert arr\u00f3l is besz\u00e9l, hogy a megval\u00f3s\u00edt\u00e1s r\u00e9szletei hogyan \u00e1rthatnak a rendszer\u00e9nek, \u00e9s hogyan akad\u00e1lyozhatj\u00e1k meg a f\u00e1jdalommentes evol\u00faci\u00f3t a j\u00f6v\u0151ben.<\/p>\n<p>Ne feledje!<br \/>\nAz adatb\u00e1zis a megval\u00f3s\u00edt\u00e1s r\u00e9szlete.<br \/>\nA kliensek (Web, Mobil stb.) a megval\u00f3s\u00edt\u00e1s r\u00e9szletei.<br \/>\nA keretrendszerek a megval\u00f3s\u00edt\u00e1s r\u00e9szletei.<\/p>\n<p>Ezekt\u0151l a dolgokt\u00f3l maxim\u00e1lisan el kell absztrah\u00e1l\u00f3dnia, \u00e9s nem f\u00fcggni t\u0151l\u00fck, a fent le\u00edrt Dependency Inversion haszn\u00e1lat\u00e1val interf\u00e9szek \u00e9s absztrakci\u00f3k, a Dependency Rule \u00e9s m\u00e1s mechanizmusok seg\u00edts\u00e9g\u00e9vel.<\/p>\n<h3>A modulok fel\u00e9p\u00edt\u00e9si m\u00f3dszerei.<\/h3>\n<p>\nEz a r\u00e9sz k\u00fcl\u00f6n\u00f6sen tetszett, mint ASP .NET CORE szolg\u00e1ltat\u00e1sfejleszt\u0151. Mert itt a k\u00e9sz komponensekb\u0151l \u00e1ll\u00f3 egyedi szolg\u00e1ltat\u00e1s architekt\u00fara ki\u00e9p\u00edt\u00e9s\u00e9nek m\u00f3dszertan\u00e1r\u00f3l van sz\u00f3. <\/p>\n<p>Robert n\u00e9gy lehets\u00e9ges r\u00e9tegszepar\u00e1ci\u00f3s s\u00e9m\u00e1t \u00edrt le.<\/p>\n<p>R\u00e1mutatott arra, hogy mi\u00e9rt rosszabb a h\u00e1romr\u00e9teg\u0171 architekt\u00fara, amelyet olyan gyakran haszn\u00e1lnak: UI (vez\u00e9rl\u0151k), Szolg\u00e1ltat\u00e1sok (Domain), DAL (Adatb\u00e1zis) a t\u00f6bbihez k\u00e9pest. Nem l\u00e1ttam t\u00fal sok projektet, de mindegyik, p\u00e9ld\u00e1ul a mikro-szolg\u00e1ltat\u00e1s, a backendben \u00e9ppen ezt a h\u00e1romr\u00e9teg\u0171 architekt\u00far\u00e1t haszn\u00e1lja. <\/p>\n<p>Az egykomponens-egy szolg\u00e1ltat\u00e1s architekt\u00far\u00e1j\u00e1t is gyakran alkalmazz\u00e1k. \u00d6sszess\u00e9g\u00e9ben mindkett\u0151 megfelel\u0151, de sok h\u00e1tr\u00e1nyuk van, p\u00e9ld\u00e1ul a DDD haszn\u00e1latakor kialak\u00edtott architekt\u00far\u00e1hoz k\u00e9pest, k\u00fcl\u00f6n\u00f6sen azokra a kritikus v\u00e1ltoz\u00e1sokat k\u00edv\u00e1n\u00f3 \u00e9s \u00f6sszetett szolg\u00e1ltat\u00e1sokra n\u00e9zve.<\/p>\n<p>Nos, ennek a k\u00f6nyvnek a bemutat\u00f3ja ezzel v\u00e9get \u00e9rt. Mag\u00e1t a k\u00f6nyvet nagyon \u00e9lveztem, nem b\u00e1nom meg, hogy elolvastam, k\u00f6sz\u00f6net a szerz\u0151nek. Kedves olvas\u00f3k, k\u00f6sz\u00f6n\u00f6m a figyelmet, ne \u00edt\u00e9lj\u00e9tek meg szigor\u00faan \u2014 ez a publik\u00e1ci\u00f3 a k\u00f6nyvr\u0151l szerzett benyom\u00e1somon \u00e9s a szem\u00e9lyes lelkesed\u00e9semen alapul.<br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/464185\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0438 \u043e \u043a\u043d\u0438\u0433\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u0438 \u0437\u043d\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0435, \u0431\u044b\u043b\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u044b \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u041c\u043e\u0436\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b, \u0447\u0438\u0442\u0430\u044f \u044d\u0442\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e, \u0434\u0430\u0442\u044c \u0447\u0435\u0442\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430? \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f? \u041a\u0430\u043a\u0443\u044e \u0440\u043e\u043b\u044c \u043e\u043d\u0430 \u0438\u0433\u0440\u0430\u0435\u0442? \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043d\u0435\u044f\u0441\u043d\u043e\u0441\u0442\u0435\u0439 \u0435\u0441\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0435. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27958,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-37273","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0438 \u043e \u043a\u043d\u0438\u0433\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u0438 \u0437\u043d\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0435, \u0431\u044b\u043b\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u044b \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u041c\u043e\u0436\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b, \u0447\u0438\u0442\u0430\u044f \u044d\u0442\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e, \u0434\u0430\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/news\/korotko-o-glavnom-clean-architecture-robert-c-martin\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u043e \u0433\u043b\u0430\u0432\u043d\u043e\u043c: Clean Architecture, Robert C. Martin | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0438 \u043e \u043a\u043d\u0438\u0433\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u0438 \u0437\u043d\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0435, \u0431\u044b\u043b\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u044b \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u041c\u043e\u0436\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b, \u0447\u0438\u0442\u0430\u044f \u044d\u0442\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e, \u0434\u0430\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/news\/korotko-o-glavnom-clean-architecture-robert-c-martin\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:16:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:16:42+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47R\u00f6viden a l\u00e9nyeg: Clean Architecture, Robert C. Martin | ProHoster","description":"Ez a k\u00f6nyvr\u0151l szerzett benyom\u00e1sr\u00f3l sz\u00f3l, valamint n\u00e9h\u00e1ny fogalom \u00e9s tud\u00e1s \u00e1ttekint\u00e9s\u00e9t tartalmazza, amelyekre a k\u00f6nyv hat\u00e1s\u00e1ra tett szert. Architekt\u00fara. Tudna \u00d6n, kedves olvas\u00f3, olvasva ezt a publik\u00e1ci\u00f3t, v\u00e9lem\u00e9nyt nyilv\u00e1n\u00edtani?","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/news\/korotko-o-glavnom-clean-architecture-robert-c-martin","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u043e \u0433\u043b\u0430\u0432\u043d\u043e\u043c: Clean Architecture, Robert C. Martin | ProHoster","og:description":"\u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0438 \u043e \u043a\u043d\u0438\u0433\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u0438 \u0437\u043d\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0435, \u0431\u044b\u043b\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u044b \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u041c\u043e\u0436\u0435\u0442\u0435 \u043b\u0438 \u0432\u044b, \u0447\u0438\u0442\u0430\u044f \u044d\u0442\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e, \u0434\u0430\u0442\u044c.","og:url":"https:\/\/prohoster.info\/hu\/blog\/news\/korotko-o-glavnom-clean-architecture-robert-c-martin","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:16:42+00:00","article:modified_time":"2019-10-31T19:16:42+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37273","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-03-05 11:16:40","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:30:00","updated":"2026-03-05 11:16:40","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/37273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=37273"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/37273\/revisions"}],"predecessor-version":[{"id":163180,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/37273\/revisions\/163180"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/27958"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=37273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=37273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=37273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}