{"id":34828,"date":"2019-10-31T22:00:38","date_gmt":"2019-10-31T19:00:38","guid":{"rendered":"https:\/\/prohoster.info\/blog\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya\/"},"modified":"2019-10-31T22:00:38","modified_gmt":"2019-10-31T19:00:38","slug":"single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/news\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya","title":{"rendered":"Egys\u00e9ges Felel\u0151ss\u00e9g Elve. Nem annyira egyszer\u0171, mint amilyennek t\u0171nik","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Egys\u00e9ges Felel\u0151ss\u00e9g Elve. Nem annyira egyszer\u0171, mint amilyennek t\u0171nik\" src=\"\/wp-content\/uploads\/2019\/06\/5b253ff55e3c97b6baf5f7a7ae7f3b98.JPG\" style=\"display:block;margin: 0 auto;\" \/> Egys\u00e9ges felel\u0151ss\u00e9g elve, azaz az egys\u00e9ges felel\u0151ss\u00e9g elve,<br \/>\nm\u00e1s n\u00e9ven az egys\u00e9ges v\u00e1ltoz\u00f3k elve \u2014 rendk\u00edv\u00fcl nehezen \u00e9rthet\u0151 dolog \u00e9s egy nagyon izgalmas k\u00e9rd\u00e9s a programoz\u00f3i interj\u00fakon. <\/p>\n<p><\/p>\n<p>Az els\u0151 komoly tal\u00e1lkoz\u00e1som ezzel az elvvel az els\u0151 \u00e9v elej\u00e9n t\u00f6rt\u00e9nt, amikor fiatal \u00e9s tapasztalatlan di\u00e1kokat elvittek az erd\u0151be, hogy a cs\u00f3t\u00e1nyokb\u00f3l igazi di\u00e1kokat faragjanak.<\/p>\n<p><\/p>\n<p>Az erd\u0151ben 8-9 f\u0151s csoportokra osztottak minket, \u00e9s versenyt hirdettek \u2014 melyik csoport gyorsabban issza meg egy \u00fcveg vodk\u00e1t, felt\u00e9ve, hogy a csoport els\u0151 tagja megt\u00f6lti a poharat, a m\u00e1sodik megissza, a harmadik pedig harap egy falatot. Az, aki elv\u00e9gezte a feladat\u00e1t, a csoport v\u00e9g\u00e9re \u00e1llt. <\/p>\n<p><\/p>\n<p>Az eset, amikor a sor hossza h\u00e1rommal oszthat\u00f3 volt, \u00e9s j\u00f3l megval\u00f3s\u00edtotta az SRP-t.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex> <\/p>\n<h2 id=\"opredelenie-1-edinaya-otvetstvennost\">1. meghat\u00e1roz\u00e1s. Egyes\u00edtett felel\u0151ss\u00e9g.<\/h2>\n<p><\/p>\n<p>Az egys\u00e9ges felel\u0151ss\u00e9g elve (SRP) hivatalos meghat\u00e1roz\u00e1sa szerint minden objektumnak van egy felel\u0151ss\u00e9ge \u00e9s l\u00e9tez\u00e9s\u00e9nek oka, \u00e9s ez a felel\u0151ss\u00e9g csak egy van.<\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg az \"Iv\u00f3\" objektumot (<strong>Tippler<\/strong>).<br \/>\nAz SRP elv\u00e9nek \u00e9rdek\u00e9ben osszuk fel a feladatokat h\u00e1rmas\u00e1val: <\/p>\n<p><\/p>\n<ul>\n<li>Az egyik t\u00f6lt (<strong>PourOperation<\/strong>)<\/li>\n<li>Az egyik iszik (<strong>DrinkUpOperation<\/strong>)<\/li>\n<li>Az egyik harap (<strong>TakeBiteOperation<\/strong>)<\/li>\n<\/ul>\n<p><\/p>\n<p>A folyamat minden r\u00e9sztvev\u0151je felel\u0151s egy folyamat komponens\u00e9\u00e9rt, vagyis egy atomikus felel\u0151ss\u00e9ggel b\u00edr \u2014 inni, t\u00f6lteni vagy harapni. <\/p>\n<p><\/p>\n<p>Az Iv\u00f3 viszont egy \u00e1larcot k\u00e9pez ezek sz\u00e1m\u00e1ra az m\u0171veletek sz\u00e1m\u00e1ra:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">class Tippler {\n    \/\/...\n    void Act(){\n        _pourOperation.Do() \/\/ t\u00f6lteni\n        _drinkUpOperation.Do() \/\/ inni\n        _takeBiteOperation.Do() \/\/ harapni\n    }\n}<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Egys\u00e9ges Felel\u0151ss\u00e9g Elve. Nem annyira egyszer\u0171, mint amilyennek t\u0171nik\" src=\"\/wp-content\/uploads\/2019\/06\/8d591a474e3555edfee3ffebc28d079b.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4 id=\"zachem\">Mi\u00e9rt?<\/h4>\n<p><\/p>\n<p>A programoz\u00f3 ember k\u00f3dot \u00edr egy majomnak, \u00e9s a majom figyelmetlen, buta \u00e9s \u00f6r\u00f6kk\u00e9 rohan. K\u00e9pes egyszerre csak 3-7 kifejez\u00e9st meg\u00e9rteni \u00e9s megjegyezni.<br \/>\nAz Iv\u00f3 eset\u00e9ben ezek a kifejez\u00e9sek h\u00e1rman vannak. Azonban, ha egy nagy egyszer\u0171 k\u00f3dot \u00edrunk, abban megjelennek kezek, poharak, vereked\u00e9sek \u00e9s v\u00e9gtelen vit\u00e1k a politik\u00e1r\u00f3l. Mindez pedig egyetlen met\u00f3dus test\u00e9ben. Biztos vagyok benne, hogy l\u00e1tt\u00e1l m\u00e1r ilyen k\u00f3dot a gyakorlatod sor\u00e1n. Nem \u00e9ppen a legkegyesebb pr\u00f3b\u00e1ja a pszich\u00e9nek.<\/p>\n<p><\/p>\n<p>M\u00e1sr\u00e9szt az ember-m\u00f3kus k\u00e9pes modellezni a val\u00f3s vil\u00e1g objektumokat a fej\u00e9ben. A k\u00e9pzelet\u00e9ben \u00f6ssze tudja \u00fctk\u00f6ztetni \u0151ket, \u00faj objektumokat \u00e9p\u00edthet bel\u0151l\u00fck, \u00e9s \u00e9pp\u00fagy sz\u00e9t is bonthatja \u0151ket. K\u00e9pzelj\u00fcnk el egy r\u00e9gi aut\u00f3modelt. A k\u00e9pzelet\u00fcnkben kinyithatjuk az ajt\u00f3t, leszerelhetj\u00fck az ajt\u00f3bor\u00edt\u00e1st, \u00e9s l\u00e1thatjuk a ablakemel\u0151 mechanizmusokat, amelyekben fogaskerekek tal\u00e1lhat\u00f3k. De nem l\u00e1that minden aut\u00f3komponenst egyszerre, egy \"list\u00e1ban\". Legal\u00e1bbis az \"ember-m\u00f3kus\" nem tudja.<\/p>\n<p><\/p>\n<p>Ez\u00e9rt a programoz\u00f3 emberek lebontj\u00e1k a bonyolult mechanizmusokat egyszer\u0171bb, m\u0171k\u00f6d\u0151 elemekre. Azonban a lebont\u00e1s m\u00f3dja elt\u00e9r\u0151 lehet: sok r\u00e9gi aut\u00f3ban a leveg\u0151j\u00e1rat az ajt\u00f3ba vezet, m\u00edg a modern aut\u00f3kban a z\u00e1r elektronikai hib\u00e1ja miatt nem indul el a motor, ami megnehez\u00edti a jav\u00edt\u00e1st.<\/p>\n<p><\/p>\n<p>Na sz\u00f3val, <strong>A SRP egy elv, amely megmagyar\u00e1zza, HOGYAN kell lebontani, azaz hol kell megh\u00fazni a hat\u00e1rvonalat.<\/strong>. <\/p>\n<p><\/p>\n<p>Azt mondja, hogy a dekompoz\u00edci\u00f3t a \"felel\u0151ss\u00e9g megoszt\u00e1s\u00e1nak\" elve szerint kell v\u00e9gezni, vagyis az adott objektumok feladatai szerint.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Egys\u00e9ges Felel\u0151ss\u00e9g Elve. Nem annyira egyszer\u0171, mint amilyennek t\u0171nik\" src=\"\/wp-content\/uploads\/2019\/06\/b1980c3dc9742b921eb818f14fe3527e.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Visszat\u00e9rve a r\u00e9szeg emberhez \u00e9s az el\u0151ny\u00f6kre, amelyeket az ember-m\u00f3kus kap a lebont\u00e1ssal: <\/p>\n<p><\/p>\n<ul>\n<li>A k\u00f3d minden szinten rendk\u00edv\u00fcl vil\u00e1goss\u00e1 v\u00e1lt.<\/li>\n<li>A k\u00f3dot t\u00f6bb programoz\u00f3 egyszerre \u00edrhatja (mindegyik k\u00fcl\u00f6n elemet \u00edr).<\/li>\n<li>Megk\u00f6nny\u00edti az automatikus tesztel\u00e9st - min\u00e9l egyszer\u0171bb az elem, ann\u00e1l k\u00f6nnyebb tesztelni.<\/li>\n<li>Megjelenik a k\u00f3d kompoz\u00edci\u00f3k\u00e9pess\u00e9ge - cser\u00e9lhetsz <strong>DrinkUpOperation<\/strong> olyan m\u0171veletre, amelyben a r\u00e9szeg ember folyad\u00e9kot \u00f6nt a asztal al\u00e1. Vagy cser\u00e9lheted az \u00f6nt\u00e9st egy olyan m\u0171veletre, amelyben kevered a bort \u00e9s a vizet vagy a vodk\u00e1t \u00e9s a s\u00f6rt. Az \u00fczleti ig\u00e9nyekt\u0151l f\u00fcgg\u0151en mindent megtehetsz an\u00e9lk\u00fcl, hogy meg\u00e9rinten\u00e9d a met\u00f3dus k\u00f3dj\u00e1t. <strong>Tippler.Act<\/strong>. <\/li>\n<li>Ezekb\u0151l a m\u0171veletekb\u0151l \u00f6ssze\u00e1ll\u00edthatod a moh\u00f3t (csak a <strong>TakeBitOperation<\/strong>), az alkoholist (csak a <strong>DrinkUpOperation<\/strong> k\u00f6zvetlen\u00fcl az \u00fcvegb\u0151l) \u00e9s kiel\u00e9g\u00edtheted sz\u00e1mos m\u00e1s \u00fczleti ig\u00e9nyt.<\/li>\n<\/ul>\n<p><\/p>\n<p><em>(\u00d3, \u00fagy t\u0171nik, ez m\u00e1r az OCP elve, \u00e9s megs\u00e9rtettem a poszt felel\u0151ss\u00e9g\u00e9t.) <\/em><\/p>\n<p><\/p>\n<p>\u00c9s persze, h\u00e1tr\u00e1nyok is vannak: <\/p>\n<p><\/p>\n<ul>\n<li>T\u00f6bb t\u00edpust kell l\u00e9trehozni. <\/li>\n<li>A r\u00e9szeg ember el\u0151sz\u00f6r p\u00e1r \u00f3r\u00e1val k\u00e9s\u0151bb iszik, mint tehetn\u00e9.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"opredelenie-2-edinaya-izmenchivost\">2. meghat\u00e1roz\u00e1s. Egys\u00e9ges v\u00e1ltoz\u00e9konys\u00e1g.<\/h2>\n<p><\/p>\n<p>Engedj\u00e9k meg, uraim! Az iv\u00f3 oszt\u00e1ly is egyetlen felel\u0151ss\u00e9get l\u00e1t el \u2013 iszik! \u00c9s egy\u00e9bk\u00e9nt a \"felel\u0151ss\u00e9g\" sz\u00f3 rendk\u00edv\u00fcl hom\u00e1lyos fogalom. Valaki a hum\u00e1num sors\u00e1\u00e9rt felel\u0151s, m\u00edg m\u00e1s valaki a sarkon felborult pingvinek fel\u00e1ll\u00edt\u00e1s\u00e1\u00e9rt.<\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg a r\u00e9szeg k\u00e9t megval\u00f3s\u00edt\u00e1s\u00e1t. Az els\u0151, amelyet fent eml\u00edtettem, h\u00e1rom oszt\u00e1lyt tartalmaz \u2014 \u00f6nt\u00e9s, iv\u00e1s \u00e9s falatoz\u00e1s.<\/p>\n<p><\/p>\n<p>A m\u00e1sodik m\u00f3dszertan a \"Csak el\u0151re\" m\u00f3dszere szerint k\u00e9sz\u00fclt, \u00e9s tartalmazza az \u00f6sszes logik\u00e1t a met\u00f3dusban. <strong>Act<\/strong>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">\/\/\u041d\u0435 \u0442\u0440\u0430\u0442\u044c\u0442\u0435 \u0432\u0440\u0435\u043c\u044f  \u043d\u0430 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430. \u041b\u0443\u0447\u0448\u0435 \u0441\u044a\u0435\u0448\u044c\u0442\u0435 \u043f\u0435\u0447\u0435\u043d\u044c\u043a\u0443\n\u0441lass BrutTippler {\n   \/\/...\n   void Act(){\n        \/\/ \u043d\u0430\u043b\u0438\u0432\u0430\u0435\u043c\n    if(!_hand.TryDischarge(from:_bottle, to:_glass, size:_glass.Capacity))\n        throw new OverdrunkException();\n\n    \/\/ \u0432\u044b\u043f\u0438\u0432\u0430\u0435\u043c\n    if(!_hand.TryDrink(from: _glass,  size: _glass.Capacity))\n        throw new OverdrunkException();\n\n    \/\/\u0417\u0430\u043a\u0443\u0441\u044b\u0432\u0430\u0435\u043c\n    for(int i = 0; i&lt; 3; i++){\n        var food = _foodStore.TakeOrDefault();\n        if(food==null)\n            throw new FoodIsOverException();\n\n        _hand.TryEat(food);\n    }\n   }\n}<\/code><\/pre>\n<p><\/p>\n<p>Ez a k\u00e9t oszt\u00e1ly, k\u00fcls\u0151 megfigyel\u0151 szempontj\u00e1b\u00f3l, teljesen egyform\u00e1n n\u00e9z ki \u00e9s egyetlen felel\u0151ss\u00e9get hajt v\u00e9gre: \"meginni\". <\/p>\n<p><\/p>\n<p>Zavar!<\/p>\n<p><\/p>\n<p>Ekkor el\u0151vessz\u00fck az internetet, \u00e9s megtudjuk a SRP m\u00e1sik meghat\u00e1roz\u00e1s\u00e1t \u2014 Az Egy\u00e9ni V\u00e1ltoz\u00e1si Elv (Single Changeability Principle).<\/p>\n<p><\/p>\n<p>Az SCP kimondja, hogy \"<strong>A modulnak van egy \u00e9s egyetlen oka a v\u00e1ltoz\u00e1sra<\/strong>\". Vagyis \"A felel\u0151ss\u00e9g az v\u00e1ltoz\u00e1s ind\u00edt\u00f3ja\". <\/p>\n<p><\/p>\n<p><em>(\u00dagy t\u0171nik, azok a sr\u00e1cok, akik az eredeti meghat\u00e1roz\u00e1st kital\u00e1lt\u00e1k, biztosak voltak az ember-majomsor telepatikus k\u00e9pess\u00e9geiben)<\/em><\/p>\n<p><\/p>\n<p>Most minden a hely\u00e9re ker\u00fcl. K\u00fcl\u00f6n v\u00e1laszthatjuk meg a t\u00f6lt\u00e9si, iv\u00e1si \u00e9s falatoz\u00e1si folyamatokat, m\u00edg a r\u00e9szegben csak a m\u0171veletek sorrendj\u00e9t \u00e9s \u00f6sszet\u00e9tel\u00e9t v\u00e1ltoztathatjuk meg, p\u00e9ld\u00e1ul \u00e1thelyezve a falatoz\u00e1st iv\u00e1s el\u0151tt vagy hozz\u00e1adva a toast felolvas\u00e1s\u00e1t.<\/p>\n<p><\/p>\n<p>A \"Csak el\u0151re\" megk\u00f6zel\u00edt\u00e9sben minden, amit v\u00e1ltoztathatunk, csak a met\u00f3dusban v\u00e1ltozik. <strong>Act<\/strong>Ez olvashat\u00f3 \u00e9s hat\u00e9kony lehet, ha kicsit van logika \u00e9s ritk\u00e1n v\u00e1ltozik, de gyakran r\u00e9mes 500 soros met\u00f3dusokhoz vezet, melyekben a be\u00e1gyazott if-ek sz\u00e1ma nagyobb, mint amennyi sz\u00fcks\u00e9ges Oroszorsz\u00e1g NATO-ba val\u00f3 bel\u00e9p\u00e9s\u00e9hez. <\/p>\n<p><\/p>\n<h2 id=\"opredelenie-3-lokalizaciya-izmeneniy\">3. meghat\u00e1roz\u00e1s. A v\u00e1ltoz\u00e1sok lokaliz\u00e1l\u00e1sa.<\/h2>\n<p><\/p>\n<p>A r\u00e9szegek gyakran nem \u00e9rtik, mi\u00e9rt \u00e9bredtek egy idegen lak\u00e1sban, vagy hol van a mobiltelefonjuk. Elj\u00f6tt az id\u0151, hogy r\u00e9szletes napl\u00f3z\u00e1st adjunk hozz\u00e1.<\/p>\n<p><\/p>\n<p>Kezdj\u00fck a napl\u00f3z\u00e1st a t\u00f6lt\u00e9si folyamattal:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">class PourOperation: IOperation{\n    PourOperation(ILogger log \/*....*\/){\/*...*\/}\n    \/\/...\n    void Do(){\n        _log.Log($\"Miel\u0151tt t\u00f6lten\u00e9k {_hand} \u00e9s {_bottle} haszn\u00e1lat\u00e1val\");\n        \/\/\u00dczleti logika a t\u00f6lt\u00e9shez ...\n        _log.Log($\"T\u00f6lt\u00e9s ut\u00e1n {_hand} \u00e9s {_bottle} haszn\u00e1lat\u00e1val\");\n    }\n}<\/code><\/pre>\n<p><\/p>\n<p>A belefoglal\u00e1s biztos\u00edtja ezt <strong>PourOperation<\/strong>, b\u00f6lcsen j\u00e1rtunk el a felel\u0151ss\u00e9g \u00e9s az inkapszul\u00e1z\u00e1s szempontj\u00e1b\u00f3l, de most a v\u00e1ltoz\u00e9konys\u00e1g elve k\u00f6r\u00fcli z\u0171rzavarba ker\u00fclt\u00fcnk. Mag\u00e1n a m\u0171veleten t\u00fal, amely v\u00e1ltozhat, maga a napl\u00f3z\u00e1s is v\u00e1ltoz\u00f3 lesz. El kell k\u00fcl\u00f6n\u00edten\u00fcnk, \u00e9s k\u00fcl\u00f6n napl\u00f3z\u00f3t kell k\u00e9sz\u00edten\u00fcnk a t\u00f6lteni m\u0171velethez:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">interface IPourLogger{\n    void LogBefore(IHand, IBottle){}\n    void LogAfter(IHand, IBottle){}\n    void OnError(IHand, IBottle, Exception){}\n}\n\nclass PourOperation: IOperation{\n    PourOperation(IPourLogger log \/*....*\/){\/*...*\/}\n    \/\/...\n    void Do(){\n        _log.LogBefore(_hand, _bottle);\n        try{\n             \/\/... \u00fczleti logika\n             _log.LogAfter(_hand, _bottle);\n        }\n        catch(exception e){\n            _log.OnError(_hand, _bottle, e)\n        }\n    }\n}<\/code><\/pre>\n<p><\/p>\n<p>A r\u00e9szletes olvas\u00f3 \u00e9szre fogja venni, hogy <strong>LogAfter<\/strong>, <strong>LogBefore<\/strong> \u00e9s <strong>OnError<\/strong> k\u00fcl\u00f6n-k\u00fcl\u00f6n is v\u00e1ltozhatnak, \u00edgy az el\u0151z\u0151 l\u00e9p\u00e9sekhez hasonl\u00f3an h\u00e1rom oszt\u00e1lyt fog l\u00e9trehozni: <strong>PourLoggerBefore<\/strong>, <strong>PourLoggerAfter<\/strong> \u00e9s <strong>PourErrorLogger<\/strong>.<\/p>\n<p><\/p>\n<p>Ha eml\u00e9kez\u00fcnk arra, hogy a t\u00f6lteni m\u0171veletek sz\u00e1ma h\u00e1rom, akkor kilenc napl\u00f3z\u00f3 oszt\u00e1lyunk lesz. V\u00e9g\u00fcl teh\u00e1t az \u00f6sszes t\u00f6lteni 14 (!!!) oszt\u00e1lyb\u00f3l \u00e1ll.<\/p>\n<p><\/p>\n<p>Hiperbola? Aligha! Az embermajom egy dekompoz\u00edci\u00f3s gr\u00e1n\u00e1ttal feldarabolja a \"t\u00f6lt\u0151t\" kancs\u00f3ra, poh\u00e1rra, t\u00f6lteni oper\u00e1torokra, v\u00edzszolg\u00e1ltat\u00f3 szolg\u00e1ltat\u00e1sokra, molekul\u00e1k \u00fctk\u00f6z\u00e9si fizikai modellj\u00e9re, \u00e9s a k\u00f6vetkez\u0151 negyed\u00e9vet az \u00f6sszef\u00fcgg\u00e9sek kibogoz\u00e1s\u00e1val t\u00f6lti glob\u00e1lis v\u00e1ltoz\u00f3k n\u00e9lk\u00fcl. \u00c9s higgy\u00e9k el, nem fog meg\u00e1llni.<\/p>\n<p><\/p>\n<p>Pont ezen a ponton sokan arra a k\u00f6vetkeztet\u00e9sre jutnak, hogy az SRP a r\u00f3zs\u00e1s birodalmak mes\u00e9i, \u00e9s elkezdik a t\u00e9szt\u00e1t csavarni\u2026<\/p>\n<p><\/p>\n<p>\u2026 an\u00e9lk\u00fcl, hogy tudom\u00e1st szerezn\u00e9nek a harmadik defin\u00edci\u00f3 l\u00e9tez\u00e9s\u00e9r\u0151l: <\/p>\n<p><\/p>\n<p>\"A felel\u0151ss\u00e9g egys\u00e9g\u00e9nek elve kimondja, hogy <strong>a hasonl\u00f3 v\u00e1ltoz\u00e1sokkal rendelkez\u0151 dolgokat egy helyen kell tartani.<\/strong>\". Vagy \"<strong>Azaz, ha a m\u0171velet napl\u00f3z\u00e1s\u00e1t megv\u00e1ltoztatjuk, azt egy helyen kell m\u00f3dos\u00edtanunk.<\/strong>\u201d<\/p>\n<p><\/p>\n<p>Ez nagyon fontos pont \u2013 mivel az eddigi SRP magyar\u00e1zatok arr\u00f3l sz\u00f3ltak, hogy daraboljuk fel a t\u00edpusokat annyira, amennyire lehets\u00e9ges, ami \u201efels\u0151 korl\u00e1tot\u201d szabott az objektum m\u00e9ret\u00e9re, most m\u00e1r a \u201eals\u00f3 korl\u00e1tr\u00f3l\u201d is besz\u00e9l\u00fcnk. M\u00e1s szavakkal,<\/p>\n<p><\/p>\n<p>Ez egy nagyon fontos pont \u2013 mivel az \u00f6sszes, kor\u00e1bban eml\u00edtett SRP magyar\u00e1zat arra utalt, hogy t\u00edpusokat kell darabolni, ameddig csak lehet, azaz \"fels\u0151 korl\u00e1tot\" szabott az objektum m\u00e9ret\u00e9re, most m\u00e1r az \"als\u00f3 korl\u00e1tr\u00f3l\" is besz\u00e9l\u00fcnk. M\u00e1s sz\u00f3val, <strong>Az SRP nemcsak azt k\u00f6veteli meg, hogy \"darabolj, am\u00edg csak lehet\", hanem azt sem, hogy t\u00fals\u00e1gosan sz\u00e9tszedj\u00fck \u2013 \"ne darabold sz\u00e9t a kapcsolt dolgokat\".<\/strong>Most a t\u00f6lteni szem\u00e9ly sz\u00e1m\u00e1ra k\u00f6nnyebbnek kell lennie. Amellett, hogy nem sz\u00fcks\u00e9ges az IPourLogger napl\u00f3z\u00f3t h\u00e1rom oszt\u00e1lyra bontani, az \u00f6sszes napl\u00f3z\u00f3t \u00f6sszegy\u0171jthetj\u00fck egy t\u00edpusba:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Egys\u00e9ges Felel\u0151ss\u00e9g Elve. Nem annyira egyszer\u0171, mint amilyennek t\u0171nik\" src=\"\/wp-content\/uploads\/2019\/06\/2e349a5b119a511d716341f3f6725844.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Most a folyamat sor\u00e1n k\u00f6nnyebb dolga lesz. Ezen k\u00edv\u00fcl, hogy nem sz\u00fcks\u00e9ges az IPourLogger napl\u00f3z\u00f3t h\u00e1rom oszt\u00e1lyra darabolni, az \u00f6sszes napl\u00f3z\u00f3t egy t\u00edpusba is \u00f6ssze tudjuk vonni:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">class OperationLogger{\n    public OperationLogger(string operationName){\n\/*..*\/}\n    public void LogBefore(object[] args){\n\/*...*\/}\n    public void LogAfter(object[] args){\n\/*..*\/}\n    public void LogError(object[] args, exception e){\n\/*..*\/}\n}<\/code><\/pre>\n<p><\/p>\n<p>\u00c9s ha hozz\u00e1adn\u00e1nk egy negyedik m\u0171velett\u00edpust, akkor a napl\u00f3z\u00e1s m\u00e1r k\u00e9sz van arra. A m\u0171veletek k\u00f3dja tiszta, \u00e9s mentes az infrastrukt\u00fara zaj\u00e1t\u00f3l.<\/p>\n<p><\/p>\n<p>Ennek eredm\u00e9nyek\u00e9nt \u00f6t oszt\u00e1lyunk van a megold\u00e1sra: a ki\u00f6ml\u00e9shez.<\/p>\n<p><\/p>\n<ul>\n<li>\u00d6nt\u00e9si m\u0171velet<\/li>\n<li>Ki\u00f6ml\u00e9si m\u0171velet<\/li>\n<li>Falatoz\u00e1si m\u0171velet<\/li>\n<li>Napl\u00f3z\u00f3<\/li>\n<li>Borraval\u00f3 fas\u00e1d<\/li>\n<\/ul>\n<p><\/p>\n<p>Mindegyik szigor\u00faan egy funkci\u00f3\u00e9rt felel\u0151s, \u00e9s egy okb\u00f3l v\u00e1ltoztatni kell rajta. Minden hasonl\u00f3 v\u00e1ltoztat\u00e1si szab\u00e1ly k\u00f6zel helyezkedik el. <\/p>\n<p>\n<b class=\"spoiler_title\">Val\u00f3 \u00e9let p\u00e9lda<\/b><\/p>\n<p>Egyszer egy b2b \u00fcgyf\u00e9l automatikus regisztr\u00e1ci\u00f3s szolg\u00e1ltat\u00e1st \u00edrtunk. \u00c9s megjelent a GOD-met\u00f3dus 200 sor hasonl\u00f3 tartalommal:<\/p>\n<p><\/p>\n<ul>\n<li>Menj az 1C-be \u00e9s nyiss egy sz\u00e1ml\u00e1t<\/li>\n<li>Ezzel a sz\u00e1ml\u00e1val menj a fizet\u00e9si modulhoz, \u00e9s nyiss egyet ott<\/li>\n<li>Ellen\u0151rizd, hogy ilyen sz\u00e1ml\u00e1s fi\u00f3k nincs-e a f\u0151ben <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hu\/server\/dts-dronten\/\"   title=\"szerveren\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2485\">szerveren<\/a><\/li>\n<li>Hozz l\u00e9tre egy \u00faj fi\u00f3kot<\/li>\n<li>A regisztr\u00e1ci\u00f3s modulban a regisztr\u00e1ci\u00f3 eredm\u00e9ny\u00e9t \u00e9s az 1C sz\u00e1m\u00e1t add hozz\u00e1 a regisztr\u00e1ci\u00f3s eredm\u00e9nyek szolg\u00e1ltat\u00e1shoz<\/li>\n<li>Add hozz\u00e1 ezt az inform\u00e1ci\u00f3t a sz\u00e1ml\u00e1hoz<\/li>\n<li>Hozz l\u00e9tre egy pont sz\u00e1mot ennek az \u00fcgyf\u00e9lnek a pontszolg\u00e1ltat\u00e1sban. Add \u00e1t ennek a szolg\u00e1ltat\u00e1snak az 1C sz\u00e1msz\u00e1m\u00e1t.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u00c9s a list\u00e1ban volt m\u00e9g k\u00f6r\u00fclbel\u00fcl 10 \u00fczleti m\u0171velet rettenetes \u00f6sszefon\u00f3d\u00e1ssal. A sz\u00e1ml\u00e1hoz sz\u00fcks\u00e9ges objektum szinte mindenki sz\u00e1m\u00e1ra l\u00e9nyeges volt. A pontazonos\u00edt\u00f3 \u00e9s az \u00fcgyf\u00e9l neve a h\u00edv\u00e1sok fel\u00e9nek fel\u00e9ben volt sz\u00fcks\u00e9ges.<\/p>\n<p><\/p>\n<p>Egy \u00f3r\u00e1s refaktor\u00e1l\u00e1s ut\u00e1n siker\u00fclt elk\u00fcl\u00f6n\u00edteni az infrastrukt\u00fara k\u00f3dot \u00e9s az \u00fcgyf\u00e9llel kapcsolatos munk\u00e1t k\u00fcl\u00f6n\u00e1ll\u00f3 met\u00f3dusokba\/oszt\u00e1lyokba. A God met\u00f3dus k\u00f6nnyebb lett, de maradt 100 sor k\u00f3d, ami nem akarta mag\u00e1t kibogozni. <\/p>\n<p><\/p>\n<p>Csak n\u00e9h\u00e1ny nap m\u00falva j\u00f6tt a meg\u00e9rt\u00e9s, hogy ennek a \"megk\u00f6nnyebb\u00fclt\" m\u00f3dszernek a l\u00e9nyege \u2013 \u00e9s egyben \u00fczleti algoritmus. \u00c9s hogy az eredeti m\u0171szaki le\u00edr\u00e1s meglehet\u0151sen bonyolult volt. \u00c9s \u00e9ppen az a pr\u00f3b\u00e1lkoz\u00e1s, hogy darabokba t\u00f6rj\u00fck ezt a m\u00f3dszert, fog SRP megs\u00e9rt\u00e9s\u00e9t jelenteni, nem ford\u00edtva. <\/p>\n<p><\/p>\n<h2 id=\"formalizm\">Formalizmus.<\/h2>\n<p><\/p>\n<p>El\u00e9rkezett az id\u0151, hogy b\u00e9k\u00e9n hagyjuk a borraval\u00f3nkat. T\u00f6r\u00f6lj\u00e9tek le a k\u00f6nnyeiteket \u2014 vissza fogunk t\u00e9rni hozz\u00e1 valamikor. Most viszont form\u00e1ljuk meg a cikkb\u0151l szerzett tud\u00e1st. <\/p>\n<p><\/p>\n<h4 id=\"formalizm-1-opredelenie-srp\">Formalizmus 1. Az SRP meghat\u00e1roz\u00e1sa<\/h4>\n<p><\/p>\n<ol>\n<li>Ossza sz\u00e9t az elemeket \u00fagy, hogy mindegyik csup\u00e1n egy dolog\u00e9rt felel\u0151s legyen.<\/li>\n<li>A felel\u0151ss\u00e9g azt jelenti, hogy \"v\u00e1ltoztat\u00e1si ok\". Ez azt jelenti, hogy minden elemnek csak egy v\u00e1ltoztat\u00e1si oka van, \u00fczleti logika \u00e9rtelemben.<\/li>\n<li>A v\u00e1rhat\u00f3 \u00fczleti logik\u00e1ban bek\u00f6vetkez\u0151 v\u00e1ltoz\u00e1sok lokaliz\u00e1lva kell, hogy legyenek. A p\u00e1rhuzamosan m\u00f3dosul\u00f3 elemeknek k\u00f6zel kell lenni\u00fck egym\u00e1shoz.<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"formalizm-2-neobhodimye-kriterii-samoproverki\">Formalizmus 2. Sz\u00fcks\u00e9ges \u00f6nellen\u0151rz\u00e9si krit\u00e9riumok.<\/h4>\n<p><\/p>\n<p>Nem tal\u00e1lkoztam elegend\u0151 SRP teljes\u00edt\u00e9si krit\u00e9riummal. De vannak sz\u00fcks\u00e9ges felt\u00e9telek:<\/p>\n<p><\/p>\n<p>1) Tegye fel mag\u00e1nak a k\u00e9rd\u00e9st \u2013 mit csin\u00e1l ez az oszt\u00e1ly\/met\u00f3dus\/modul\/szolg\u00e1ltat\u00e1s. Egyszer\u0171 meghat\u00e1roz\u00e1sban kell tudnia v\u00e1laszolni. (k\u00f6sz\u00f6n\u00f6m <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/brightori\/\" class=\"user_link\">Brightori<\/a><\/noindex> )<\/p>\n<p>\n<b class=\"spoiler_title\">magyar\u00e1zatok<\/b><\/p>\n<p>N\u00e9ha azonban nagyon neh\u00e9z egyszer\u0171 meghat\u00e1roz\u00e1st tal\u00e1lni. <\/p>\n<p><\/p>\n<p>2) Egy hiba jav\u00edt\u00e1sa vagy \u00faj funkci\u00f3 hozz\u00e1ad\u00e1sa a lehet\u0151 legkevesebb f\u00e1jlt\/oszt\u00e1lyt \u00e9rinti. Ide\u00e1lis esetben \u2013 egyet. <\/p>\n<p>\n<b class=\"spoiler_title\">magyar\u00e1zatok<\/b><\/p>\n<p>Mivel a felel\u0151ss\u00e9g (a funkci\u00f3\u00e9rt vagy hib\u00e1\u00e9rt) egy f\u00e1jlban\/oszt\u00e1lyban van kapszul\u00e1zva, pontosan tudja, hol keresse \u00e9s mit jav\u00edtson. P\u00e9ld\u00e1ul: a m\u0171veletek napl\u00f3z\u00e1s\u00e1nak kimenet\u00e9nek megv\u00e1ltoztat\u00e1sa csak a napl\u00f3z\u00f3t ig\u00e9nyli. Nincs sz\u00fcks\u00e9g az \u00f6sszes t\u00f6bbi k\u00f3d \u00e1tn\u00e9z\u00e9s\u00e9re. <\/p>\n<p><\/p>\n<p>Egy m\u00e1sik p\u00e9lda \u2013 \u00faj UI-vez\u00e9rl\u0151 hozz\u00e1ad\u00e1sa, amely hasonl\u00f3 a kor\u00e1bbiakhoz. Ha ez azt k\u00f6veteli meg, hogy 10 k\u00fcl\u00f6nb\u00f6z\u0151 entit\u00e1st \u00e9s 15 k\u00fcl\u00f6nb\u00f6z\u0151 konvertert kell hozz\u00e1adnia \u2013 \u00fagy t\u0171nik, \"t\u00falkomplik\u00e1lta\".<\/p>\n<p><\/p>\n<p>3) Ha t\u00f6bb fejleszt\u0151 dolgozik a projekt k\u00fcl\u00f6nb\u00f6z\u0151 funkci\u00f3in, akkor a merge konfliktus val\u00f3sz\u00edn\u0171s\u00e9ge, vagyis annak a val\u00f3sz\u00edn\u0171s\u00e9ge, hogy ugyanazt a f\u00e1jlt\/oszt\u00e1lyt t\u00f6bb fejleszt\u0151 egyszerre m\u00f3dos\u00edt, minim\u00e1lis.<\/p>\n<p>\n<b class=\"spoiler_title\">magyar\u00e1zatok<\/b><\/p>\n<p>Ha egy \u00faj m\u0171velet, a \"Vodka ki\u00f6nt\u00e9se az asztal al\u00e1\" hozz\u00e1ad\u00e1sakor meg kell \u00e9rintenie a napl\u00f3z\u00f3t, az iv\u00e1s \u00e9s ki\u00f6nt\u00e9s m\u0171velet\u00e9t, akkor \u00fagy t\u0171nik, hogy a felel\u0151ss\u00e9gek \u00f6ssze vannak keverve. Term\u00e9szetesen ez nem mindig lehets\u00e9ges, de \u00e9rdemes cs\u00f6kkenteni ezt az ar\u00e1nyt. <\/p>\n<p><\/p>\n<p>4) Ha tiszt\u00e1z\u00f3 k\u00e9rd\u00e9st tesz fel az \u00fczleti logik\u00e1r\u00f3l (fejleszt\u0151t\u0151l vagy menedzsert\u0151l), akkor szigor\u00faan egy f\u00e1jlba\/oszt\u00e1lyba ny\u00fal \u00e9s csak onnan kap inform\u00e1ci\u00f3t.<\/p>\n<p>\n<b class=\"spoiler_title\">magyar\u00e1zatok<\/b><\/p>\n<p>A funkci\u00f3k, szab\u00e1lyok vagy algoritmusok t\u00f6m\u00f6ren, mindegyik egy helyen vannak meg\u00edrva, nem pedig a k\u00f3d t\u00e9r minden pontj\u00e1n sz\u00e9tsz\u00f3rva.<\/p>\n<p><\/p>\n<p>5) A n\u00e9vad\u00e1sz vil\u00e1gos.<\/p>\n<p>\n<b class=\"spoiler_title\">magyar\u00e1zatok<\/b><\/p>\n<p>Oszt\u00e1lyunk vagy met\u00f3dusunk felel\u0151s valami\u00e9rt, \u00e9s a felel\u0151ss\u00e9g t\u00fckr\u00f6z\u0151dik a nev\u00e9ben.<\/p>\n<p><\/p>\n<p>AllManagersManagerService \u2013 val\u00f3sz\u00edn\u0171leg Isten-oszt\u00e1ly.<br \/>\nLocalPayment \u2013 val\u00f3sz\u00edn\u0171leg nem. <\/p>\n<p><\/p>\n<h4 id=\"formalizm-3-metodika-razrabotki-okkama-first\">Formalizmus 3. A \"Okkham-els\u0151\" fejleszt\u00e9si m\u00f3dszertan.<\/h4>\n<p><\/p>\n<p>A tervez\u00e9s kezdet\u00e9n a majomember nem ismeri \u00e9s nem \u00e9rzi a megoldand\u00f3 feladat minden \u00e1rnyalat\u00e1t, \u00e9s hib\u00e1zhat. Sokf\u00e9lek\u00e9ppen lehet hib\u00e1zni:<\/p>\n<p><\/p>\n<ul>\n<li>T\u00fal nagy objektumokat l\u00e9trehozni k\u00fcl\u00f6nb\u00f6z\u0151 felel\u0151ss\u00e9gek \u00f6sszeragaszt\u00e1s\u00e1val<\/li>\n<li>Sz\u00e9tbontani az egyes felel\u0151ss\u00e9get sok k\u00fcl\u00f6nb\u00f6z\u0151 t\u00edpusra<\/li>\n<li>Helytelen\u00fcl meghat\u00e1rozni a felel\u0151ss\u00e9gek hat\u00e1rait<\/li>\n<\/ul>\n<p><\/p>\n<p>Fontos megjegyezni a szab\u00e1lyt: \"jobb hib\u00e1zni nagyobb m\u00e9rt\u00e9kben\", vagy \"ha nem biztos, ne darabolj\". P\u00e9ld\u00e1ul, ha a oszt\u00e1lyod k\u00e9t felel\u0151ss\u00e9get \u00f6lel fel, akkor m\u00e9g mindig \u00e9rthet\u0151, \u00e9s kett\u00e9 lehet v\u00e1lasztani minim\u00e1lis v\u00e1ltoz\u00e1ssal az \u00fcgyf\u00e9lk\u00f3don. Az \u00fcveg szil\u00e1nkjaib\u00f3l poharat k\u00e9sz\u00edteni \u00e1ltal\u00e1ban nehezebb a kontextus t\u00f6bb f\u00e1jlra t\u00f6rt\u00e9n\u0151 sz\u00e9tsz\u00f3r\u00f3d\u00e1sa \u00e9s az \u00fcgyf\u00e9lk\u00f3dban hi\u00e1nyz\u00f3 sz\u00fcks\u00e9ges f\u00fcgg\u0151s\u00e9gek miatt. <\/p>\n<p><\/p>\n<h2 id=\"pora-zakruglyatsya\">Ideje befejezni<\/h2>\n<p><\/p>\n<p>Az SRP alkalmaz\u00e1si k\u00f6re nem korl\u00e1toz\u00f3dik az OOP-ra \u00e9s a SOLID-ra. Alkalmazhat\u00f3 m\u00f3dszerekre, funkci\u00f3kra, oszt\u00e1lyokra, modulokra, mikroszolg\u00e1ltat\u00e1sokra \u00e9s szolg\u00e1ltat\u00e1sokra. Jelen van a \u201ehack-hack-be a prod\u201d-ban \u00e9s a \u201erak\u00e9tatudom\u00e1ny\u201d fejleszt\u00e9sben, mindenhol egy kicsit jobb\u00e1 t\u00e9ve a vil\u00e1got. Ha jobban belegondolunk, ez tal\u00e1n az eg\u00e9sz m\u00e9rn\u00f6ki tudom\u00e1ny alapelve. A g\u00e9p\u00e9szet, vez\u00e9rl\u0151rendszerek \u00e9s szinte minden bonyolult rendszer \u2013 alkatr\u00e9szekb\u0151l \u00e9p\u00fclnek fel, \u00e9s a \u201enem megfelel\u0151 sz\u00e9tbont\u00e1s\u201d megfosztja a tervez\u0151ket a rugalmass\u00e1gt\u00f3l, a \u201et\u00falzott sz\u00e9tbont\u00e1s\u201d pedig a hat\u00e9konys\u00e1gt\u00f3l, m\u00edg a helytelen hat\u00e1rok \u2013 az \u00e9rtelemt\u0151l \u00e9s a lelki nyugatt\u00f3l. <\/p>\n<p>\n<img decoding=\"async\" alt=\"Egys\u00e9ges Felel\u0151ss\u00e9g Elve. Nem annyira egyszer\u0171, mint amilyennek t\u0171nik\" src=\"\/wp-content\/uploads\/2019\/06\/b70fb2b0b87cf90d41462263e839902b.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Az SRP nem a term\u00e9szett\u0151l ered, \u00e9s nem r\u00e9sze a pontos tudom\u00e1nynak. Azokb\u00f3l a biol\u00f3giai \u00e9s pszichol\u00f3giai korl\u00e1tainkb\u00f3l sz\u00e1rmazik, amik mindannyiunkra jellemz\u0151k. Ez csup\u00e1n egy m\u00f3dszer a bonyolult rendszerek ir\u00e1ny\u00edt\u00e1s\u00e1ra \u00e9s fejleszt\u00e9s\u00e9re az emberek elm\u00e9j\u00e9nek seg\u00edts\u00e9g\u00e9vel. Megmutatja sz\u00e1munkra, hogyan lehet dekonstrukci\u00f3t v\u00e9gezni a rendszeren. Az eredeti megfogalmaz\u00e1s jelent\u0151s telep\u00e1ti\u00e1s k\u00e9szs\u00e9geket ig\u00e9nyelt, de rem\u00e9lem, hogy ez a cikk egy kicsit eloszlatta a f\u00fcst\u00f6t.<\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/454290\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Single responsibility principle, \u043e\u043d \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0434\u0438\u043d\u043e\u0439 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043e\u043d \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0434\u0438\u043d\u043e\u0439 \u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u2014 \u043a\u0440\u0430\u0439\u043d\u0435 \u0441\u043a\u043e\u043b\u044c\u0437\u043a\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0435\u043d\u044c \u0438 \u0441\u0442\u043e\u043b\u044c \u043d\u0435\u0440\u0432\u043e\u0437\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430. \u041f\u0435\u0440\u0432\u043e\u0435 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u044d\u0442\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u0430, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u043b\u043e\u0434\u044b\u0445 \u0438 \u0437\u0435\u043b\u0435\u043d\u044b\u0445 \u043d\u0430\u0441 \u0432\u044b\u0432\u0435\u0437\u043b\u0438 \u0432 \u043b\u0435\u0441, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u043b\u0438\u0447\u0438\u043d\u043e\u043a \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u2014 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26229,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-34828","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=\"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\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya\" \/>\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\udd47Single Responsibility Principle. \u041d\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043a\u0430\u043a \u043a\u0430\u0436\u0435\u0442\u0441\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/news\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya\" \/>\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:00:38+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:00:38+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\udd47Single Responsibility Principle. Nem annyira egyszer\u0171, mint amilyennek t\u0171nik | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/news\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya","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\udd47Single Responsibility Principle. \u041d\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043a\u0430\u043a \u043a\u0430\u0436\u0435\u0442\u0441\u044f | ProHoster","og:url":"https:\/\/prohoster.info\/hu\/blog\/news\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya","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:00:38+00:00","article:modified_time":"2019-10-31T19:00:38+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34828","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-02-09 21:46:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:14:06","updated":"2026-02-09 21:46:19","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\/34828","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=34828"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/34828\/revisions"}],"predecessor-version":[{"id":159767,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/34828\/revisions\/159767"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/26229"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=34828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=34828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=34828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}