{"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\/et\/blog\/novosti-interneta\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya","title":{"rendered":"\u00dcksiku Vastutuse Printsiip. Mitte nii lihtne, kui tundub","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u00dcksiku Vastutuse Printsiip. Mitte nii lihtne, kui tundub\" src=\"\/wp-content\/uploads\/2019\/06\/5b253ff55e3c97b6baf5f7a7ae7f3b98.JPG\" style=\"display:block;margin: 0 auto;\" \/> \u00dche vastutuse p\u00f5him\u00f5te, samuti tuntud kui \u00fche vastutuse printsiip,<br \/>\nsee on ka \u00fche muutlikkuse printsiip \u2013 \u00e4\u00e4rmiselt libe m\u00f5istmiseks ja nii n\u00e4rviline k\u00fcsimus programmeerija vestlusel. <\/p>\n<p><\/p>\n<p>Minu esimene t\u00f5sine kokkupuude selle p\u00f5him\u00f5ttega leidis aset esimesel kursusel, kui meid noori ja rohelisi viidi metsa, et teha tudengitest \u2013 t\u00f5elised tudengid.<\/p>\n<p><\/p>\n<p>Metsas jagati meid r\u00fchmadesse, kus igas oli 8-9 inimest, ja korraldati v\u00f5istlus \u2013 kumb r\u00fchm joob pudeli viina \u00e4ra kiiremini, tingimusel et r\u00fchmast esimene inimene valab viina klaasi, teine joob, ja kolmas s\u00f6\u00f6b. Toimingud l\u00f5petanud liige l\u00e4heb r\u00fchmas j\u00e4rjekorra l\u00f5ppu. <\/p>\n<p><\/p>\n<p>Juhtum, kus j\u00e4rjekorra suurus oli kolmega jagatav, ja oli hea SRP rakendamine.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex> <\/p>\n<h2 id=\"opredelenie-1-edinaya-otvetstvennost\">M\u00e4\u00e4ratlus 1. \u00dcksik vastutus.<\/h2>\n<p><\/p>\n<p>Ametlik m\u00e4\u00e4ratlus \u00fche vastutuse printsiibist (SRP) \u00fctleb, et igal objektile on oma vastutus ja p\u00f5hjus eksisteerimiseks, ja see vastutus on vaid \u00fcks.<\/p>\n<p><\/p>\n<p>Vaatame objekti &#171;Jooja&#187; (<strong>Tippler<\/strong>).<br \/>\nSRP p\u00f5him\u00f5tte j\u00e4rgimiseks jagame \u00fclesanded kolme peale: <\/p>\n<p><\/p>\n<ul>\n<li>\u00dcks valab (<strong>PourOperation<\/strong>)<\/li>\n<li>\u00dcks joo (<strong>DrinkUpOperation<\/strong>)<\/li>\n<li>\u00dcks n\u00e4ksib (<strong>TakeBiteOperation<\/strong>)<\/li>\n<\/ul>\n<p><\/p>\n<p>Iga osaleja protsessis vastutab \u00fche protsessi komponendi eest, see t\u00e4hendab, et tal on \u00fcks aatomaarne vastutus \u2014 juua, valada v\u00f5i n\u00e4ksida. <\/p>\n<p><\/p>\n<p>K\u00e4ivitus on omakorda andmete toimingute fassaad:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">class Tippler {\n    \/\/...\n    void Act(){\n        _pourOperation.Do() \/\/ valada\n        _drinkUpOperation.Do() \/\/ juua\n        _takeBiteOperation.Do() \/\/ n\u00e4ksida\n    }\n}<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"\u00dcksiku Vastutuse Printsiip. Mitte nii lihtne, kui tundub\" src=\"\/wp-content\/uploads\/2019\/06\/8d591a474e3555edfee3ffebc28d079b.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4 id=\"zachem\">Miks?<\/h4>\n<p><\/p>\n<p>Inimene-programmeerija kirjutab koodi inimese- ahvile, kes on t\u00e4helepanematu, loll ja pidevalt kuhugi kiirustav. Ta suudab korraga meeles pidada ja m\u00f5ista umbes 3-7 m\u00f5istet.<br \/>\nJooja puhul on neid m\u00f5isteid kolm. Kuid kui me kirjutame koodi \u00fche lihtsa asjana, siis ilmuvad sinna k\u00e4ed, klaasid, kaklused ja l\u00f5putud vaidlused poliitika \u00fcle. Ja k\u00f5ik see on \u00fche meetodi kehas. Olen kindel, et olete sellist koodi oma praktikas n\u00e4inud. See ei ole k\u00f5ige inimlikum proovikivi vaimule.<\/p>\n<p><\/p>\n<p>Teisest k\u00fcljest on inimesel-apeel j\u00e4ljendamine reaalse maailma objekte oma peas. Oma kujutluses v\u00f5ib ta neid kokku, lahti v\u00f5tta ja uusi objekte luua. Kujutage ette vana auto mudelit. Saate oma kujutluses ust avada, ukse kaane lahti kruvida ja n\u00e4ha seal akna t\u00f5stemehhanisme koos sealsete hammastikke. Kuid te ei saa k\u00f5iki auto komponente korraga \u00fches &#171;loendis&#187; n\u00e4ha. V\u00e4hemalt &#171;inimene-apeel&#187; ei saa.<\/p>\n<p><\/p>\n<p>Seega lagundavad inimesed-programmeerijad keerulised mehhanismid v\u00e4hem keerukate ja t\u00f6\u00f6tavate elementide kogumiteks. Kuid lagunemine v\u00f5ib toimuda erinevalt: paljudes vanades autodes voolab \u00f5hukanal uksest l\u00e4bi, samas kui moodsates ei lase lukumehhanismi rike mootori k\u00e4ivitada, mis teeb remondi keeruliseks.<\/p>\n<p><\/p>\n<p>Nii et, <strong>SRP on p\u00f5him\u00f5te, mis selgitab KUID lagundada, st kus joon jagamiseks t\u00f5mmata.<\/strong>. <\/p>\n<p><\/p>\n<p>Ta \u00fctleb, et dekomponeerida tuleb &#171;vastutuse jagamise&#187; p\u00f5him\u00f5tte kohaselt, see t\u00e4hendab, vastavalt erinevate objektide \u00fclesannetele.<\/p>\n<p>\n<img decoding=\"async\" alt=\"\u00dcksiku Vastutuse Printsiip. Mitte nii lihtne, kui tundub\" src=\"\/wp-content\/uploads\/2019\/06\/b1980c3dc9742b921eb818f14fe3527e.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Naasume joodikute ja plusside juurde, mida inimene-ahv saab detsentraliseerimise k\u00e4igus: <\/p>\n<p><\/p>\n<ul>\n<li>Kood on igal tasandil \u00fclimalt arusaadav<\/li>\n<li>Koodi saavad kirjutada mitu programmeerijat korraga (iga\u00fchel on oma eraldi element)<\/li>\n<li>Automaatne testimine muutub lihtsamaks \u2014 mida lihtsam on element, seda lihtsam on seda testida<\/li>\n<li>Koodi kompositsioonilisus tekib \u2014 saate asendada <strong>DrinkUpOperation<\/strong> operatsiooni, kus joodik valab vedelikku laua alt. V\u00f5i asendada valamise operatsioon operatsiooniga, kus te segate veini ja vett v\u00f5i viina ja \u00f5lut. S\u00f5ltuvalt ettev\u00f5tte n\u00f5udmistest saate teha k\u00f5ike seda, puutumatult meetodi koodi. <strong>Tippler.Act<\/strong>. <\/li>\n<li>Nendest operatsioonidest v\u00f5ite kokku panna ahmijaa (kasutades ainult <strong>TakeBitOperation<\/strong>), joodiku (kasutades ainult <strong>DrinkUpOperation<\/strong> otse pudelist) ja rahuldada paljusid teisi ettev\u00f5tte n\u00f5udmisi.<\/li>\n<\/ul>\n<p><\/p>\n<p><em>(Oih, tundub, et see on juba OCP p\u00f5him\u00f5te ja ma rikkusin selle postituse vastutust) <\/em><\/p>\n<p><\/p>\n<p>Ja muidugi miinused: <\/p>\n<p><\/p>\n<ul>\n<li>Peab looma rohkem t\u00fc\u00fcpe. <\/li>\n<li>Joodik joob esmakordselt m\u00f5ne tunni hiljem, kui ta oleks v\u00f5inud.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"opredelenie-2-edinaya-izmenchivost\">Defineering 2. \u00dcksikasjalik muutlikkuse m\u00e4\u00e4ratlemine.<\/h2>\n<p><\/p>\n<p>Lubage, h\u00e4rrased! Jooja klass t\u00e4idab samuti \u00fchtset vastutust \u2014 ta joob! Ja \u00fcldse, s\u00f5na &#171;vastutus&#187; on \u00e4\u00e4rmiselt h\u00e4gune m\u00f5isted. Keegi on vastutav inimkonna saatuse eest, teine aga vastutab polaarses \u00fcmber kukkunud pingviinide \u00fcles t\u00f5stmise eest.<\/p>\n<p><\/p>\n<p>Vaatame kaht joobunu rakendust. Esimene, nagu varem mainitud, sisaldab endas kolme klassi \u2014 valamine, joomine ja suupistetamine.<\/p>\n<p><\/p>\n<p>Teine on kirjutatud &#171;Ees ja ainult edasi&#187; metodoloogia j\u00e4rgi ning sisaldab kogu loogikat meetodis. <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>Need kaks klassi n\u00e4evad v\u00e4lja t\u00e4iesti samad ja t\u00e4idavad sama vastutust &#171;joomine&#187;. <\/p>\n<p><\/p>\n<p>Segadus!<\/p>\n<p><\/p>\n<p>Siis suundume internetti ja uurime teist SRP m\u00e4\u00e4ratlust \u2014 \u00dche Muudatuse Prinsiip (Single Changeability Principle).<\/p>\n<p><\/p>\n<p>SCP \u00fctleb, et &#171;<strong>Moodulil on \u00fcks ja ainus p\u00f5hjus muutuda<\/strong>&#171;. See t\u00e4hendab, et &#171;Vastutus on p\u00f5hjus muudatusteks&#187;. <\/p>\n<p><\/p>\n<p><em>(Tundub, et poisid, kes algse m\u00e4\u00e4ratluse v\u00e4lja m\u00f5tlesid, uskusid inimese-ape telepaatia v\u00f5imetesse)<\/em><\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd on k\u00f5ik paigas. Protseduure, nagu valamine, joomine ja suupistete nautimine, saab muuta eraldi ning joogina saame muuta ainult toimingute j\u00e4rjestust ja sisu, n\u00e4iteks liikudes suupiste joomise ette v\u00f5i lisades toosti lugemise.<\/p>\n<p><\/p>\n<p>L\u00e4henemises &#171;Ees ja ainult ees&#187; muudame k\u00f5ik, mis on v\u00f5imalik, ainult meetodis <strong>Act<\/strong>See v\u00f5ib olla loetav ja efektiivne juhul, kui logika on v\u00e4hene ja harva muutub, kuid sageli l\u00f5ppeb see \u00f5udsete meetoditega, kus igas on 500 rida koodi ja if-e on rohkem, kui oleks vajalik Venemaa NATO-sse astumiseks. <\/p>\n<p><\/p>\n<h2 id=\"opredelenie-3-lokalizaciya-izmeneniy\">M\u00e4\u00e4ratlemine 3. Muudatuste lokaliseerimine.<\/h2>\n<p><\/p>\n<p>Joojaid \u00fcllatab tihti, miks nad \u00e4rkavad v\u00f5\u00f5ras korteris v\u00f5i kus nende mobiiltelefon on. Aeg lisada p\u00f5hjalik logimine.<\/p>\n<p><\/p>\n<p>Alustame logimist valamisprotsessist:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">class PourOperation: IOperation{\n    PourOperation(ILogger log \/*....*\/){\/*...*\/}\n    \/\/...\n    void Do(){\n        _log.Log($\"Enne valamist {_hand} ja {_bottle} abil\");\n        \/\/Valamise \u00e4ri loogika ...\n        _log.Log($\"P\u00e4rast valamist {_hand} ja {_bottle} abil\");\n    }\n}<\/code><\/pre>\n<p><\/p>\n<p>Inkribeerides selle <strong>PourOperation<\/strong>, me tegime tarku otsuseid vastutuse ja kapseldamise osas, kuid n\u00fc\u00fcd on meil probleem muutlikkuse printsiibiga. Lisaks operatsioonile, mis v\u00f5ib muutuda, muutub ka logimine. Peame eristama ja tegema spetsiaalse logijate operatsiooni jaoks valamise jaoks:<\/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             \/\/... \u00e4riloogika\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>Ahned lugeja m\u00e4rkab, et <strong>LogAfter<\/strong>, <strong>LogBefore<\/strong> ja <strong>OnError<\/strong> v\u00f5ivad samuti eraldi muutuda, ja eelnevate toimingute analoogiana luuakse kolm klassi: <strong>PourLoggerBefore<\/strong>, <strong>PourLoggerAfter<\/strong> ja <strong>PourErrorLogger<\/strong>.<\/p>\n<p><\/p>\n<p>Ja meenutades, et joodikule on kolm operatsiooni \u2014 saame \u00fcheksa salvestuse klassi. L\u00f5ppkokkuv\u00f5ttes koosneb kogu joodik 14 (!!!) klassist.<\/p>\n<p><\/p>\n<p>H\u00fcperbool? Vaevalt! Inimene-j\u00e4nes dekomponatsiooni granaadiga purustab \"t\u00e4itja\" karahviniks, klaasiks, valamisoperaatoriteks, vee esitamise teenuseks, molekulide kokkup\u00f5rke f\u00fc\u00fcsiliseks mudeliks ning j\u00e4rgmise kvartali jooksul p\u00fc\u00fcab ta lahendada s\u00f5ltuvusi ilma globaalsete muutujateta. Ja uskuge mind \u2014 ta ei peatu.<\/p>\n<p><\/p>\n<p>Just sellel hetkel j\u00f5uavad paljud j\u00e4reldusele, et SRP on muinasjutud roosades kuningriikides ja l\u00e4hevad nuusutama\u2026<\/p>\n<p><\/p>\n<p>... nii ka mitte teada kolmas definitsioon Srp: <\/p>\n<p><\/p>\n<p>\u00ab\u00dcksiku vastutuse printsiip \u00fctleb, et <strong>muutmiseks sarnased asjad peavad olema \u00fches kohas<\/strong>\u00ab. v\u00f5i \u201c<strong>Koos muutuv asi peab olema \u00fches kohas.<\/strong>\u201d<\/p>\n<p><\/p>\n<p>See t\u00e4hendab, et kui me muudame tegevuste logimist, siis peame seda muutma \u00fches kohas.<\/p>\n<p><\/p>\n<p>See on v\u00e4ga oluline hetk \u2014 kuna k\u00f5ik eelnevad SRP selgitused r\u00e4\u00e4kisid sellest, et tuleb jagada t\u00fc\u00fcpe, kuni nad jagunevad, s.t. seadsid \u00ab\u00fclemise piiri\u00bb objekti suurusele, siis n\u00fc\u00fcd r\u00e4\u00e4gime ka \u00abalumise piiri\u00bb seadmisest. Teisis\u00f5nu, <strong>SRP n\u00f5uab mitte ainult \u00abjagamist, kuni nad jagunevad\u00bb, vaid ka mitte \u00fcle pingutamist \u2014 \u00ab\u00e4rge jagage \u00fchendatud asju\u00bb.<\/strong>. See on suur v\u00f5itlus Ockhami nuga ja inimahviga!<\/p>\n<p>\n<img decoding=\"async\" alt=\"\u00dcksiku Vastutuse Printsiip. Mitte nii lihtne, kui tundub\" src=\"\/wp-content\/uploads\/2019\/06\/2e349a5b119a511d716341f3f6725844.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>N\u00fc\u00fcd peaks purju j\u00e4\u00e4mine olema lihtsam. Peale selle, et pole vaja IPourLoggerit kolme klassi jagada, saame me ka k\u00f5ik logijad kokku koondada \u00fchte t\u00fc\u00fcpi:<\/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>Ja kui meiedele lisandub neljas operatsioonit\u00fc\u00fcp, siis selle jaoks on juba logimine valmis. Ja operatsioonide kood on puhas ja vaba infrastruktuuri m\u00fcra eest.<\/p>\n<p><\/p>\n<p>Kokku on meil 5 klassi joogiaja \u00fclesande lahendamiseks:<\/p>\n<p><\/p>\n<ul>\n<li>Kalla operatsioon<\/li>\n<li>Joo operatsioon<\/li>\n<li>S\u00f6\u00f6 operatsioon<\/li>\n<li>Logija<\/li>\n<li>Purjuse fassaad<\/li>\n<\/ul>\n<p><\/p>\n<p>Iga\u00fcks neist vastutab rangelt \u00fche funktsionaalsuse eest, omab \u00fchte muutmis p\u00f5hjust. K\u00f5ik sarnased muutmisreeglid asuvad \u00fcksteise k\u00f5rval. <\/p>\n<p>\n<b class=\"spoiler_title\">Reaalelu n\u00e4ide<\/b><\/p>\n<p>Kord kirjutasime automaatse b2b kliendi registreerimise teenust. Ja ilmus GOD -meetod 200 rea sarnase sisu kaupa:<\/p>\n<p><\/p>\n<ul>\n<li>Mine 1C-sse ja ava konto<\/li>\n<li>Selle kontoga mine maksemoodulisse ja registreeri see seal<\/li>\n<li>Kontrolli, et peamine konto ei oleks sellise kontoga loodud <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/server\/dts-dronten\/\"   title=\"serveril\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2485\">serveril<\/a><\/li>\n<li>Loo uus konto<\/li>\n<li>Makseteen registreerimise tulemuste teenusesse ja numbri 1C lisamine.<\/li>\n<li>Lisa see teave konto kohta sellesse tabelisse.<\/li>\n<li>Loo selle kliendi jaoks punkti number punktide teenuses. Edasta sellele teenusele 1C arve number.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ja selles loendis oli veel umbes 10 \u00e4ritegevust, mis olid omavahel tihedalt seotud. Arve objekt oli vajalik enamikele. Punkti identifikaator ja kliendi nimi olid pooltel kutsungitel vajalikud.<\/p>\n<p><\/p>\n<p>P\u00e4rast tunni pikkust refaktoreerimist suutsime eraldada infrastruktuuri koodi ja m\u00f5ned konto haldamise n\u00fcansid eraldi meetoditeks\/klassideks. God meetod muutus kergemaks, kuid 100 rida koodi j\u00e4i alles, mis ei tahtnud kuidagi lahti harutada. <\/p>\n<p><\/p>\n<p>Ainult m\u00f5ne p\u00e4eva p\u00e4rast tuli arusaamine, et selle \u00abkerge\u00bb meetodi olemus on \u00e4ri algoritm. Ja et algne spetsifikatsioon oli \u00fcsna keeruline. Ja just katse jagada see meetod t\u00fckkideks rikub SRP-d, mitte vastupidi. <\/p>\n<p><\/p>\n<h2 id=\"formalizm\">Formalism.<\/h2>\n<p><\/p>\n<p>On aeg j\u00e4tta meie joodik rahule. Kustuta pisarad \u2014 me naaseme temaga mingil hetkel. Aga praegu formaliseerime selle artikli teadmist. <\/p>\n<p><\/p>\n<h4 id=\"formalizm-1-opredelenie-srp\">Formalism 1. SRP m\u00e4\u00e4ratlemine.<\/h4>\n<p><\/p>\n<ol>\n<li>Jagage elemendid niimoodi, et iga\u00fchel oleks vastutus ainult \u00fche asja eest.<\/li>\n<li>Vastutus t\u00f5lgitakse kui \u00abmuutmis p\u00f5hjust\u00bb. See t\u00e4hendab, et iga elemendi jaoks on ainult \u00fcks muutmis p\u00f5hjus, \u00e4riloogika m\u00f5istes.<\/li>\n<li>Potentsiaalsed muudatused \u00e4ri loogikas peavad olema lokaliseeritud. Muutused, mis toimuvad s\u00fcnkroonselt, peavad olema \u00fcksteise k\u00f5rval.<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"formalizm-2-neobhodimye-kriterii-samoproverki\">Formalism 2. Vajalikud enesehindamise kriteeriumid.<\/h4>\n<p><\/p>\n<p>Ma ei ole kohanud piisavaid SRP t\u00e4itmise kriteeriume. Kuid on m\u00f5ned vajalikud tingimused:<\/p>\n<p><\/p>\n<p>1) Esitage endale k\u00fcsimus \u2014 mida teeb see klass\/metod\/moodul\/teenus? Te peate sellele vastama lihtsa m\u00e4\u00e4ratlusega. (t\u00e4nan) <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\">selgitused<\/b><\/p>\n<p>Kuid m\u00f5nikord on v\u00e4ga raske leida lihtsat m\u00e4\u00e4ratlust. <\/p>\n<p><\/p>\n<p>2) Teatud vea parandamine v\u00f5i uue funktsiooni lisamine m\u00f5jutab minimaalset arvu faile\/klasse. Ideaalis \u2014 \u00fcks. <\/p>\n<p>\n<b class=\"spoiler_title\">selgitused<\/b><\/p>\n<p>Kuna vastutus (funktsiooni v\u00f5i vea) on kapseldatud \u00fches failis\/klassis, teate t\u00e4pselt, kust otsida ja mida muuta. N\u00e4iteks: funktsioon operatsioonide logimise v\u00e4ljundi muutmiseks n\u00f5uab muutmist ainult logijalt. Teiste koodide seas ringi liikumine ei ole vajalik. <\/p>\n<p><\/p>\n<p>Teine n\u00e4ide on uue UI-juhtseadmestiku lisamine, mis sarnaneb varasematega. Kui see sunnib teid lisama 10 erinevat \u00fcksust ja 15 erinevat konverterit \u2014 tundub, et olete \"\u00fclekuulunud\".<\/p>\n<p><\/p>\n<p>Kui mitu arendajat t\u00f6\u00f6tavad teie projekti erinevate funktsioonide kallal, siis on merge-konflikti t\u00f5en\u00e4osus, st et sama faili\/klassiga tegeleb mitu arendajat samal ajal \u2014 minimaalne.<\/p>\n<p>\n<b class=\"spoiler_title\">selgitused<\/b><\/p>\n<p>Kui uue tegevuse \"Valatud viina laua alla\" lisamiseks on vaja puudutada logijat, joomise ja valamise tegevust, siis tundub, et vastutused on kuidagi eba\u00fchtlaselt jagatud. Kuigi see ei ole alati v\u00f5imalik, tuleks p\u00fc\u00fcda seda n\u00e4itajat alandada. <\/p>\n<p><\/p>\n<p>Selgitava k\u00fcsimuse korral \u00e4ri loogika kohta (arendajalt v\u00f5i juhilt) kaevate te t\u00e4pselt \u00fchte klassi\/faili ja saate teavet ainult sealt.<\/p>\n<p>\n<b class=\"spoiler_title\">selgitused<\/b><\/p>\n<p>Funktsioonid, reeglid v\u00f5i algoritmid on kompaktsetes kirjalikes vormides, mitte igasuguseid lipukesi koodi ruumis laiali.<\/p>\n<p><\/p>\n<p>Nimede seadmine on arusaadav.<\/p>\n<p>\n<b class=\"spoiler_title\">selgitused<\/b><\/p>\n<p>Meie klass v\u00f5i meetod vastutab millegi \u00fche eest, ja vastutus peegelduku tema nimedes.<\/p>\n<p><\/p>\n<p>AllManagersManagerService \u2014 t\u00f5en\u00e4oliselt God-klass.<br \/>\nLocalPayment \u2014 t\u00f5en\u00e4oliselt mitte <\/p>\n<p><\/p>\n<h4 id=\"formalizm-3-metodika-razrabotki-okkama-first\">Formalism 3. \"Okkami-eesm\u00e4rk\" arendusmeetod.<\/h4>\n<p><\/p>\n<p>Projekteerimise alguses ei tea ja ei tunne ahv inimene k\u00f5iki lahendatavaid \u00fclesandeid ja v\u00f5ib eksida. Eksida saab erinevalt:<\/p>\n<p><\/p>\n<ul>\n<li>Teha liiga suured objektid, liites erinevaid vastutusi<\/li>\n<li>Eraldada, jagades \u00fche vastutuse paljuks erinevateks t\u00fc\u00fcpideks<\/li>\n<li>V\u00e4\u00e4ralt m\u00e4\u00e4rata vastutuse piire<\/li>\n<\/ul>\n<p><\/p>\n<p>Oluline on meeles pidada reeglit: \"eksida on parem suuremalt\" v\u00f5i \"kui pole kindel - \u00e4ra jaota\". Kui n\u00e4iteks teie klass kannab endas kaht vastutust, siis on see endiselt arusaadav ning selle v\u00f5ib jagada kaheks minimaalsete muudatustega kliendikoodis. Kildudest klaasi kokku panemine on reeglina keerulisem, kuna kontekst on laiali mitmes failis ja kliendikoodis puuduvad vajalikud s\u00f5ltuvused. <\/p>\n<p><\/p>\n<h2 id=\"pora-zakruglyatsya\">Aeg kokku v\u00f5tta<\/h2>\n<p><\/p>\n<p>SRP rakendusalad ei piirdu OOP ja SOLID-iga. See on kohaldatav meetoditele, funktsioonidele, klassidele, moodulitele, mikroteenustele ja teenustele. Seda saab rakendada nii 'figaks-figaks-ja-\u00f6ko' kui ka 'raketiteaduse' arenduses, muutes k\u00f5ikjal maailma pisut paremaks. Kui m\u00f5elda, siis on see t\u00f5eliselt p\u00f5hialus kogu inseneriteaduses. Masinatootmine, juhtimiss\u00fcsteemid, \u00fcldiselt k\u00f5ik keerulised s\u00fcsteemid \u2014 koosnevad komponentidest, ning '\u00fclemoodustamine' v\u00f5tab konstruktoritelt paindlikkuse, 'alumoodustamine' \u2014 efektiivsuse, ja vale piirid \u2014 m\u00f5istuse ja meelerahu. <\/p>\n<p>\n<img decoding=\"async\" alt=\"\u00dcksiku Vastutuse Printsiip. Mitte nii lihtne, kui tundub\" src=\"\/wp-content\/uploads\/2019\/06\/b70fb2b0b87cf90d41462263e839902b.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>SRP pole loodud looduse poolt ega kuulu t\u00e4ppisteaduse hulka. See tuleneb meie bioloogilistest ja ps\u00fchholoogilistest piirangutest. See on lihtsalt viis keeruliste s\u00fcsteemide kontrollimiseks ja arendamiseks inimese-kontrollija abil. See \u00f5petab meile, kuidas s\u00fcsteemi dekompositsioneerida. Algne s\u00f5nastus n\u00f5udis arvestatavat telepaatiatehnikat, kuid loodan, et see artikkel hajutas veidi suitsu.<\/p>\n<p>Allikas: <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-novosti-interneta"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"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.\" \/>\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\/et\/blog\/novosti-interneta\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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:description\" content=\"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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/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\udd47\u00dcksikvastutuse P\u00f5him\u00f5te. Ei ole nii lihtne, kui tundub | ProHoster","description":"\u00dcksikvastutuse p\u00f5him\u00f5te, ehk siis \u00fche vastutuse p\u00f5him\u00f5te, ehk siis \u00fche muutlikkuse p\u00f5him\u00f5te \u2014 on \u00e4\u00e4rmiselt libe ja keeruline arusaam ning veelgi n\u00e4rvilisem teema programmeerija intervjuudel. Minu t\u00f5sine tutvus selle p\u00f5him\u00f5ttega toimus esimesel kursusel, kui meid noori ja rohelisi viidi metsa, et muuta tudengite vastsetest \u2014 t\u00f5elisteks tudengiteks.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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:description":"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.","og:url":"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=34828"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34828\/revisions"}],"predecessor-version":[{"id":159767,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34828\/revisions\/159767"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/26229"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=34828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=34828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=34828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}