{"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\/sq\/blog\/news\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya","title":{"rendered":"Parimi i P\u00ebrgjegj\u00ebsis\u00eb s\u00eb Vetme. Nuk \u00ebsht\u00eb aq i thjesht\u00eb sa duket.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Parimi i P\u00ebrgjegj\u00ebsis\u00eb s\u00eb Vetme. Nuk \u00ebsht\u00eb aq i thjesht\u00eb sa duket.\" src=\"\/wp-content\/uploads\/2019\/06\/5b253ff55e3c97b6baf5f7a7ae7f3b98.JPG\" style=\"display:block;margin: 0 auto;\" \/> Principi i p\u00ebrgjegj\u00ebsis\u00eb unike, i njohur gjithashtu si parimi i nj\u00eb p\u00ebrgjegj\u00ebsie,<br \/>\n\u00ebsht\u00eb nj\u00eb koncept shum\u00eb i v\u00ebshtir\u00eb p\u00ebr t'u kuptuar dhe nj\u00eb pyetje e nd\u00ebrlikuar n\u00eb intervistat p\u00ebr pun\u00eb p\u00ebr programuesit. <\/p>\n<p><\/p>\n<p>Takimi im i par\u00eb serioz me k\u00ebt\u00eb parim ndodhi n\u00eb fillim t\u00eb vitit t\u00eb par\u00eb, kur t\u00eb rinjt\u00eb dhe t\u00eb paeksperimentuar na \u00e7uan n\u00eb pyll, p\u00ebr t\u00eb shnd\u00ebrruar larvat e student\u00ebve n\u00eb student\u00eb t\u00eb v\u00ebrtet\u00eb.<\/p>\n<p><\/p>\n<p>N\u00eb pyll, na ndan\u00eb n\u00eb grupe prej 8-9 personash dhe organizuam nj\u00eb gar\u00eb - cili grup do t\u00eb pij\u00eb shpejt nj\u00eb shishe vodka, me kushtin q\u00eb personi i par\u00eb n\u00eb grup t\u00eb derdh vodka n\u00eb got\u00eb, i dyti ta pij\u00eb, dhe i treti t\u00eb ha di\u00e7ka. Nj\u00ebsia q\u00eb realizon veprimin e saj shkon n\u00eb fund t\u00eb radh\u00ebs s\u00eb grupit. <\/p>\n<p><\/p>\n<p>Rasti kur madh\u00ebsia e radh\u00ebs ishte e shumfish t\u00eb tre, ishte nj\u00eb realizim i mir\u00eb i SRP.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex> <\/p>\n<h2 id=\"opredelenie-1-edinaya-otvetstvennost\">Definicioni 1. P\u00ebrgjegj\u00ebsia unike.<\/h2>\n<p><\/p>\n<p>Definicioni zyrtar i parimit t\u00eb p\u00ebrgjegj\u00ebsis\u00eb s\u00eb vetme (SRP) thot\u00eb se \u00e7do objekt ka nj\u00eb p\u00ebrgjegj\u00ebsi dhe nj\u00eb arsye p\u00ebr ekzistenc\u00ebn e tij dhe kjo p\u00ebrgjegj\u00ebsi \u00ebsht\u00eb vet\u00ebm nj\u00eb.<\/p>\n<p><\/p>\n<p>Le t\u00eb shqyrtojm\u00eb objektin &#171;Tippler&#187; (<strong>Tippler<\/strong>).<br \/>\nP\u00ebr t\u00eb p\u00ebrmbushur parimin SRP, ndarim detyrat n\u00eb tre: <\/p>\n<p><\/p>\n<ul>\n<li>Nj\u00eb derdh (<strong>PourOperation<\/strong>)<\/li>\n<li>Nj\u00eb pi (<strong>DrinkUpOperation<\/strong>)<\/li>\n<li>Nj\u00eb ha (<strong>TakeBiteOperation<\/strong>)<\/li>\n<\/ul>\n<p><\/p>\n<p>\u00c7do pjes\u00ebmarr\u00ebs n\u00eb proces \u00ebsht\u00eb p\u00ebrgjegj\u00ebs p\u00ebr nj\u00eb komponent t\u00eb procesit, dometh\u00ebn\u00eb ka nj\u00eb p\u00ebrgjegj\u00ebsi atomike - t\u00eb pij\u00eb, t\u00eb derdh\u00eb ose t\u00eb haj\u00eb. <\/p>\n<p><\/p>\n<p>Tippler, nga ana e tij, \u00ebsht\u00eb nj\u00eb fasad\u00eb p\u00ebr k\u00ebto operacione:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">class Tippler {\n    \t\/\/...\n    \tvoid Act(){\n        _pourOperation.Do() \t\/\/ derdh\n        _drinkUpOperation.Do() \t\/\/ pi\n        _takeBiteOperation.Do() \t\/\/ ha\n    }\n}<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Parimi i P\u00ebrgjegj\u00ebsis\u00eb s\u00eb Vetme. Nuk \u00ebsht\u00eb aq i thjesht\u00eb sa duket.\" src=\"\/wp-content\/uploads\/2019\/06\/8d591a474e3555edfee3ffebc28d079b.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4 id=\"zachem\">P\u00ebrse?<\/h4>\n<p><\/p>\n<p>Njeriu-program \u00ebsht\u00eb duke shkruar kod p\u00ebr njeriun-majmund, dhe njeriu-majmund \u00ebsht\u00eb i pav\u00ebmendsh\u00ebm, budalla dhe gjithmon\u00eb nxiton diku. Ai mund t\u00eb mbaj\u00eb dhe kuptoj\u00eb rreth 3 - 7 terma n\u00eb nj\u00eb moment.<br \/>\nN\u00eb rastin e tippler, k\u00ebta terma jan\u00eb tre. Megjithat\u00eb, n\u00ebse shkruajm\u00eb nj\u00eb kod si nj\u00eb shirit, do t\u00eb ket\u00eb duar, gota, dhun\u00eb dhe debate t\u00eb pafund mbi politik\u00ebn. Dhe e gjith\u00eb kjo do t\u00eb jet\u00eb brenda nj\u00eb metode. Jam i sigurt - e keni par\u00eb nj\u00eb kod t\u00eb till\u00eb n\u00eb praktik\u00ebn tuaj. Nuk \u00ebsht\u00eb nj\u00eb prov\u00eb e mir\u00eb p\u00ebr psiken.<\/p>\n<p><\/p>\n<p>Nga ana tjet\u00ebr, njeriu-maja \u00ebsht\u00eb i aft\u00eb t\u00eb modeloj\u00eb objekte t\u00eb bot\u00ebs reale n\u00eb mendjen e tij. N\u00eb imagjinat\u00ebn e tij, ai mund t'i p\u00ebrplas\u00eb, t'i grumbulloj\u00eb ato n\u00eb objekte t\u00eb reja dhe gjithashtu t'i zb\u00ebrthej\u00eb. Imagjinoni nj\u00eb model t\u00eb vjet\u00ebr t\u00eb nj\u00eb makine. Ju mund t\u00eb hapni n\u00eb mendje der\u00ebn, t\u00eb \u00e7montoni mbules\u00ebn e der\u00ebs dhe t\u00eb shihni mekanizmat e ngrit\u00ebsve t\u00eb xhamit, brenda t\u00eb cil\u00ebve do t\u00eb jen\u00eb ingranazhet. Por nuk mund t\u00eb shihni t\u00eb gjith\u00eb komponent\u00ebt e makin\u00ebs nj\u00ebkoh\u00ebsisht, n\u00eb nj\u00eb \"listim\". T\u00eb pakt\u00ebn \"njeriu-maja\" nuk mund.<\/p>\n<p><\/p>\n<p>Prandaj programuesit-njer\u00ebz zb\u00ebrthejn\u00eb mekanizmat e komplikuar n\u00eb nj\u00eb grup element\u00ebsh m\u00eb pak t\u00eb komplikuar dhe funksional\u00eb. Megjithat\u00eb, zb\u00ebrthimi mund t\u00eb b\u00ebhet n\u00eb m\u00ebnyra t\u00eb ndryshme: n\u00eb shum\u00eb makina t\u00eb vjetra, kanali i ajrit del n\u00eb der\u00eb, nd\u00ebrsa n\u00eb ato moderne, d\u00ebshtimi i elektronik\u00ebs s\u00eb \u00e7el\u00ebsit nuk lejon q\u00eb motori t\u00eb filloj\u00eb, gj\u00eb q\u00eb e b\u00ebn t\u00eb v\u00ebshtir\u00eb riparimin.<\/p>\n<p><\/p>\n<p>Pra, <strong>SRP \u00ebsht\u00eb nj\u00eb parim q\u00eb shpjegon SE si t\u00eb zb\u00ebrthen, dometh\u00ebn\u00eb ku t\u00eb t\u00ebrhiqet linja e ndarjes.<\/strong>. <\/p>\n<p><\/p>\n<p>Ai thot\u00eb se zb\u00ebrthimi duhet t\u00eb b\u00ebhet sipas parimit t\u00eb ndarjes \"t\u00eb p\u00ebrgjegj\u00ebsive\", dometh\u00ebn\u00eb sipas detyrave t\u00eb objekteve t\u00eb ndryshme.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Parimi i P\u00ebrgjegj\u00ebsis\u00eb s\u00eb Vetme. Nuk \u00ebsht\u00eb aq i thjesht\u00eb sa duket.\" src=\"\/wp-content\/uploads\/2019\/06\/b1980c3dc9742b921eb818f14fe3527e.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Le t\u00eb kthehemi te alkoolisti dhe p\u00ebrfitimet q\u00eb merr njeriu-maja gjat\u00eb zb\u00ebrthimit: <\/p>\n<p><\/p>\n<ul>\n<li>Kodi \u00ebsht\u00eb b\u00ebr\u00eb maksimalisht i qart\u00eb n\u00eb \u00e7do nivel.<\/li>\n<li>Kodi mund t\u00eb shkruhet nga disa programues nj\u00ebher\u00ebsh (secili shkruan nj\u00eb element t\u00eb ve\u00e7ant\u00eb).<\/li>\n<li>Testimi automatizuar b\u00ebhet m\u00eb i leht\u00eb\u2014sa m\u00eb i thjesht\u00eb t\u00eb jet\u00eb elementi, aq m\u00eb e leht\u00eb \u00ebsht\u00eb ta testosh at\u00eb.<\/li>\n<li>Krijohet kompozueshm\u00ebri e kodit\u2014ju mund t\u00eb z\u00ebvend\u00ebsoni <strong>DrinkUpOperation<\/strong> me nj\u00eb operacion, n\u00eb t\u00eb cilin alkoolisti derdh l\u00ebngun n\u00ebn tavolin\u00eb. Ose t\u00eb z\u00ebvend\u00ebsoni operacionin e derdhjes me nj\u00eb operacion, n\u00eb t\u00eb cilin p\u00ebrzieni ver\u00ebn dhe ujin ose vodka dhe birr\u00ebn. N\u00eb var\u00ebsi t\u00eb k\u00ebrkesave t\u00eb biznesit, ju mund t\u00eb b\u00ebni gjith\u00e7ka, pa e prekur kodin e metod\u00ebs. <strong>Tippler.Act<\/strong>. <\/li>\n<li>Nga k\u00ebto operacione mund t\u00eb krijoni nj\u00eb obez (duke p\u00ebrdorur vet\u00ebm <strong>TakeBitOperation<\/strong>), nj\u00eb Alkoolist (duke p\u00ebrdorur vet\u00ebm <strong>DrinkUpOperation<\/strong> direkt nga shishja) dhe t\u00eb k\u00ebnaqi shum\u00eb k\u00ebrkesa t\u00eb tjera t\u00eb biznesit.<\/li>\n<\/ul>\n<p><\/p>\n<p><em>(Oh, duket se ky \u00ebsht\u00eb tashm\u00eb parimi OCP, dhe kam shkelur p\u00ebrgjegj\u00ebsin\u00eb e k\u00ebtij posti.) <\/em><\/p>\n<p><\/p>\n<p>Dhe, sigurisht, disavantazhet: <\/p>\n<p><\/p>\n<ul>\n<li>Do t'ju duhet t\u00eb krijoni m\u00eb shum\u00eb lloje. <\/li>\n<li>Alkoolisti do t\u00eb pihet p\u00ebr her\u00eb t\u00eb par\u00eb disa or\u00eb m\u00eb von\u00eb se sa mund t\u00eb ishte.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"opredelenie-2-edinaya-izmenchivost\">P\u00ebrcaktimi 2. Ndarja e vetme.<\/h2>\n<p><\/p>\n<p>P\u00ebrsh\u00ebndetje zot\u00ebrinj! Klasa e pijakut gjithashtu kryen nj\u00eb p\u00ebrgjegj\u00ebsi t\u00eb vetme \u2013 ai pi! Dhe n\u00eb p\u00ebrgjith\u00ebsi, fjala \"p\u00ebrgjegj\u00ebsi\" \u00ebsht\u00eb nj\u00eb koncept jasht\u00ebzakonisht i paqart\u00eb. Disa jan\u00eb p\u00ebrgjegj\u00ebs p\u00ebr fatin e njer\u00ebzimit, nd\u00ebrsa disa jan\u00eb p\u00ebrgjegj\u00ebs p\u00ebr ngritjen e pingvin\u00ebve t\u00eb p\u00ebrmbysur n\u00eb pol.<\/p>\n<p><\/p>\n<p>Le t\u00eb shqyrtojm\u00eb dy realizime t\u00eb pijakut. E para, e p\u00ebrmendur m\u00eb lart, p\u00ebrmban tre klasa \u2013 derdh, pi dhe shijoje.<\/p>\n<p><\/p>\n<p>E dyta, e shkruar sipas metodologjis\u00eb \"P\u00ebrpara dhe vet\u00ebm p\u00ebrpara\" dhe p\u00ebrmban gjith\u00eb logjik\u00ebn n\u00eb metod\u00eb. <strong>Akt<\/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>T\u00eb dy k\u00ebto klasa, nga pik\u00ebpamja e nj\u00eb v\u00ebzhguesi t\u00eb jasht\u00ebm, duken plot\u00ebsisht identike dhe kryejn\u00eb nj\u00eb p\u00ebrgjegj\u00ebsi t\u00eb vetme \"t\u00eb pijn\u00eb\". <\/p>\n<p><\/p>\n<p>M\u00ebnyra qesharake!<\/p>\n<p><\/p>\n<p>At\u00ebher\u00eb, ne hyjm\u00eb n\u00eb internet dhe zbulojm\u00eb nj\u00eb p\u00ebrkufizim tjet\u00ebr t\u00eb SRP \u2013 Parimi i ndryshueshm\u00ebris\u00eb s\u00eb vetme (Single Changeability Principle).<\/p>\n<p><\/p>\n<p>SCP thot\u00eb se \"<strong>Moduli ka nj\u00eb dhe vet\u00ebm nj\u00eb arsye p\u00ebr ndryshim.<\/strong>\" Pra, \"P\u00ebrgjegj\u00ebsia \u00ebsht\u00eb arsyeja p\u00ebr ndryshim\". <\/p>\n<p><\/p>\n<p><em>(Duket se djemt\u00eb q\u00eb shpik\u00ebn p\u00ebrkufizimin origjinal ishin t\u00eb sigurt n\u00eb aft\u00ebsit\u00eb telepatike t\u00eb njeriut-majmun.)<\/em><\/p>\n<p><\/p>\n<p>Tani gjith\u00e7ka po vendoset n\u00eb vendin e vet. Mund t\u00eb ndryshojm\u00eb veprimet e derdhjes, pirjes dhe shijimit ndaras, dhe n\u00eb vet\u00eb pijakut mund t\u00eb ndryshojm\u00eb vet\u00ebm rendin dhe p\u00ebrb\u00ebrjen e operacioneve, p\u00ebr shembull, duke e zhvendosur shijimin para pirjes ose duke shtuar leximin e nj\u00eb tosti.<\/p>\n<p><\/p>\n<p>N\u00eb qasjen \"P\u00ebrpara dhe vet\u00ebm p\u00ebrpara\", gjith\u00e7ka q\u00eb mund t\u00eb ndryshohet \u2013 ndryshohet vet\u00ebm n\u00eb metod\u00eb. <strong>Akt<\/strong>. Kjo mund t\u00eb jet\u00eb e lexueshme dhe efikase n\u00eb rastet kur logjika \u00ebsht\u00eb e vog\u00ebl dhe ndodhi rrall\u00eb, por shpesh kjo p\u00ebrfundon me metoda t\u00eb tmerrshme me 500 rreshta n\u00eb secil\u00ebn, me numrin e if-eve m\u00eb t\u00eb madh se sa nevojitet p\u00ebr hyrjen e Rusis\u00eb n\u00eb NATO. <\/p>\n<p><\/p>\n<h2 id=\"opredelenie-3-lokalizaciya-izmeneniy\">P\u00ebrkufizimi 3. Lokalizimi i ndryshimeve.<\/h2>\n<p><\/p>\n<p>Pijak\u00ebt shpesh nuk kuptojn\u00eb pse jan\u00eb zgjuar n\u00eb nj\u00eb apartament t\u00eb huaj, ose ku \u00ebsht\u00eb telefoni i tyre mobil. Ka ardhur koha t\u00eb shtojm\u00eb nj\u00eb regjistrim t\u00eb detajuar.<\/p>\n<p><\/p>\n<p>Le t\u00eb fillojm\u00eb regjistrimin me procesin e derdhjes:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">class PourOperation: IOperation{\n    PourOperation(ILogger log \/*....*\/){\/*...*\/}\n    \/\/...\n    void Do(){\n        _log.Log($\"Para derdhjes me {_hand} dhe {_bottle}\");\n        \/\/Logjika e biznesit p\u00ebr derdhjen ...\n        _log.Log($\"Pas derdhjes me {_hand} dhe {_bottle}\");\n    }\n}<\/code><\/pre>\n<p><\/p>\n<p>Duke e inkapsuluar at\u00eb n\u00eb <strong>PourOperation<\/strong>, ne b\u00ebm\u00eb me men\u00e7uri nga pik\u00ebpamja e p\u00ebrgjegj\u00ebsis\u00eb dhe inkapsulimit, por tani kemi nj\u00eb ng\u00ebr\u00e7 me parimin e ndryshueshm\u00ebris\u00eb. P\u00ebrve\u00e7 operacionit vet\u00eb, gjithashtu po b\u00ebhet e ndryshueshme logimi. Do t\u00eb duhet t\u00eb ndajm\u00eb dhe t\u00eb krijojm\u00eb nj\u00eb logues special p\u00ebr operacionin e derdhjes:<\/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             \/\/... logjika e biznesit\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>Lexuesi i kujdessh\u00ebm do t\u00eb v\u00ebrej\u00eb se <strong>LogAfter<\/strong>, <strong>LogBefore<\/strong> dhe <strong>OnError<\/strong> po ashtu mund t\u00eb ndryshojn\u00eb ndaras, dhe p\u00ebr t\u00eb ngjash\u00ebm me veprimet e m\u00ebparshme do t\u00eb krijojm\u00eb tre klasa: <strong>PourLoggerBefore<\/strong>, <strong>PourLoggerAfter<\/strong> dhe <strong>PourErrorLogger<\/strong>.<\/p>\n<p><\/p>\n<p>Dhe duke kujtuar se operacionet p\u00ebr pijanec jan\u00eb tri \u2014 arrijm\u00eb n\u00eb n\u00ebnt\u00eb klasa logimi. Si rezultat, i gjith\u00eb pijaneci p\u00ebrb\u00ebhet nga 14 (!!!) klasa.<\/p>\n<p><\/p>\n<p>Hyperbola? Nj\u00ebfar\u00eb, me siguri! Njeriu-majm\u00eb me granat\u00ebn e dekompozimit do ta cop\u00ebtoj\u00eb \u201cderdh\u00ebsin\u201d n\u00eb karaf, filxhan, operator\u00eb derdhjeje, sh\u00ebrbimin e ujit, modelin fizik t\u00eb p\u00ebrplasjeve t\u00eb molekulave dhe gjat\u00eb kvartalit t\u00eb ardhsh\u00ebm do t\u00eb mundohet t\u00eb zgjidh\u00eb var\u00ebsit\u00eb pa variables globale. Dhe besoni \u2014 ai nuk do t\u00eb ndalet.<\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb moment shum\u00eb njer\u00ebz arrijn\u00eb n\u00eb p\u00ebrfundimin se SRP \u00ebsht\u00eb legjenda nga mbret\u00ebrit\u00eb e tr\u00ebndafilave, dhe largohet duke lidhur pasta\u2026<\/p>\n<p><\/p>\n<p>\u2026 pa e ditur kurr\u00eb ekzistenc\u00ebn e p\u00ebrkufizimit t\u00eb tret\u00eb t\u00eb SRP: <\/p>\n<p><\/p>\n<p>\u00abParimi i p\u00ebrgjegj\u00ebsis\u00eb s\u00eb vetme thot\u00eb se <strong>gj\u00ebrat e ngjashme p\u00ebr ndryshim duhet t\u00eb ruhen n\u00eb nj\u00eb vend<\/strong>\u00bb. ose \u201c<strong>Ajo q\u00eb ndryshon s\u00eb bashku, duhet t\u00eb ruhen n\u00eb nj\u00eb vend<\/strong>\u201d<\/p>\n<p><\/p>\n<p>Pra, n\u00ebse ne ndryshojm\u00eb logimin e operacionit, ne duhet ta ndryshojm\u00eb at\u00eb n\u00eb nj\u00eb vend.<\/p>\n<p><\/p>\n<p>Ky \u00ebsht\u00eb nj\u00eb moment shum\u00eb i r\u00ebnd\u00ebsish\u00ebm \u2014 n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb gjitha shpjegimet e SRP, t\u00eb cilat ishin m\u00eb sip\u00ebr, flisnin p\u00ebr thyerjen e llojeve, derisa ato thahen, q\u00eb do t\u00eb thot\u00eb se vendosnin \u00abnj\u00eb kufizim nga lart\u00bb n\u00eb madh\u00ebsin\u00eb e objektit, tani po flasim gjithashtu p\u00ebr nj\u00eb 'kufizim nga posht\u00eb'. N\u00eb tjera fjal\u00eb, <strong>SRP k\u00ebrkon jo vet\u00ebm \u201at\u00eb cop\u00ebtohet deri sa t\u00eb cop\u00ebtohet\u2018, por gjithashtu \u201at\u00eb mos e teprojm\u00eb \u2014 \u2018t\u00eb mos e ndajm\u00eb gj\u00ebrat e lidhura\u2018<\/strong>. Kjo \u00ebsht\u00eb nj\u00eb betej\u00eb e madhe mes gjilp\u00ebr\u00ebs s\u00eb Okamit dhe njeriut-majm\u00eb!<\/p>\n<p>\n<img decoding=\"async\" alt=\"Parimi i P\u00ebrgjegj\u00ebsis\u00eb s\u00eb Vetme. Nuk \u00ebsht\u00eb aq i thjesht\u00eb sa duket.\" src=\"\/wp-content\/uploads\/2019\/06\/2e349a5b119a511d716341f3f6725844.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Tani pijaneci duhet t\u00eb leht\u00ebsohet. P\u00ebrve\u00e7 faktit se nuk na nevojitet t\u00eb ndajm\u00eb loguesin IPourLogger n\u00eb tri klasa, ne gjithashtu mund ta bashkojm\u00eb t\u00eb gjith\u00eb loguesit n\u00eb nj\u00eb lloj:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">class OperationLogger{\n    public OperationLogger(string operationName){\n    \/*..*\/\n}\n    public void LogBefore(object[] args){\n    \/*...*\/\n}\n    public void LogAfter(object[] args){\n    \/*..*\/\n}\n    public void LogError(object[] args, exception e){\n    \/*..*\/\n}\n}<\/code><\/pre>\n<p><\/p>\n<p>Dhe n\u00ebse na shtohet nj\u00eb lloj i kat\u00ebrt operacioni, at\u00ebher\u00eb logimi p\u00ebr t\u00eb \u00ebsht\u00eb gati. Dhe kodi i operacioneve \u00ebsht\u00eb i past\u00ebr dhe i liruar nga zhurma infrastrukturore.<\/p>\n<p><\/p>\n<p>Si rezultat, ne kemi 5 klasa p\u00ebr zgjidhjen e problemit t\u00eb pirjes:<\/p>\n<p><\/p>\n<ul>\n<li>Operacioni i derdhjes<\/li>\n<li>Operacioni i pirjes<\/li>\n<li>Operacioni i ngr\u00ebnies<\/li>\n<li>Loguesi<\/li>\n<li>Fasada e pir\u00ebsit<\/li>\n<\/ul>\n<p><\/p>\n<p>\u00c7do nj\u00ebri prej tyre p\u00ebrgjigjet sakt\u00ebsisht p\u00ebr nj\u00eb funksionalitet, ka nj\u00eb arsye p\u00ebr t'u ndryshuar. T\u00eb gjitha rregullat e ngjashme p\u00ebr ndryshimin jan\u00eb af\u00ebr nj\u00ebra-tjetr\u00ebs. <\/p>\n<p>\n<b class=\"spoiler_title\">Shembulli nga jeta reale<\/b><\/p>\n<p>Nj\u00eb her\u00eb ne shkruam nj\u00eb sh\u00ebrbim p\u00ebr regjistrimin automatik t\u00eb klient\u00ebve B2B. Dhe u shfaq nj\u00eb metod\u00eb GOD me 200 rreshta t\u00eb p\u00ebrmbajtjes s\u00eb till\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Shko te 1C dhe hap nj\u00eb llogari<\/li>\n<li>Me k\u00ebt\u00eb llogari shko te moduli i pagesave dhe regjistroje atje<\/li>\n<li>Kontrollo q\u00eb nj\u00eb llogari me k\u00ebt\u00eb num\u00ebr t\u00eb mos jet\u00eb krijuar n\u00eb kryesore <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sq\/server\/dts-dronten\/\"   title=\"\u0441\u0435\u0440\u0432\u0435\u0440\u0435\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2485\">\u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/a><\/li>\n<li>Krijo nj\u00eb llogari t\u00eb re<\/li>\n<li>Shtoji rezultatin e regjistrimit n\u00eb modulin e pagesave dhe numrin 1C sh\u00ebrbimit t\u00eb rezultateve t\u00eb regjistrimit<\/li>\n<li>Shtoji n\u00eb k\u00ebt\u00eb tabel\u00eb informacionin p\u00ebr llogarin\u00eb<\/li>\n<li>Krijo nj\u00eb num\u00ebr pik\u00eb p\u00ebr k\u00ebt\u00eb klient n\u00eb sh\u00ebrbimin e pikave. D\u00ebrgo n\u00eb k\u00ebt\u00eb sh\u00ebrbim numrin e llogaris\u00eb 1C.<\/li>\n<\/ul>\n<p><\/p>\n<p>Dhe n\u00eb k\u00ebt\u00eb list\u00eb kishte rreth 10 operacione biznesi me lidhje t\u00eb frikshme. Objekti i llogaris\u00eb kishte nevoj\u00eb p\u00ebr pothuajse t\u00eb gjith\u00eb. Identifikuesi i pik\u00ebs dhe emri i klientit ishin t\u00eb nevojshme n\u00eb gjysm\u00ebn e thirrjeve.<\/p>\n<p><\/p>\n<p>Pas nj\u00eb or\u00eb refaktorizimi, mund\u00ebm t\u00eb ndahej kodi infrastrukturore dhe disa nuanca t\u00eb pun\u00ebs me llogarin\u00eb n\u00eb metoda t\u00eb ve\u00e7anta \/ klasa. Metoda God leht\u00ebsua, por mbet\u00ebn 100 rreshta kodi, t\u00eb cil\u00ebt nuk donin t\u00eb zgjidhnin. <\/p>\n<p><\/p>\n<p>Vet\u00ebm pas disa dit\u00ebsh erdhi kuptimi q\u00eb thelbi i k\u00ebsaj metode 'leht\u00ebsuese' \u00ebsht\u00eb algoritmi biznesi. Dhe q\u00eb p\u00ebrshkrimi fillestar i k\u00ebrkesave ishte mjaft i komplikuar. Dhe p\u00ebrpjekja p\u00ebr t\u00eb ndar\u00eb k\u00ebt\u00eb metod\u00eb n\u00eb copa do t\u00eb ishte nj\u00eb shkelje e SRP, dhe jo e kund\u00ebrta. <\/p>\n<p><\/p>\n<h2 id=\"formalizm\">Formalizmi.<\/h2>\n<p><\/p>\n<p>Erdhi koha t\u00eb l\u00ebm\u00eb n\u00eb paqe pir\u00ebsin ton\u00eb. Lani lot\u00ebt \u2014 ne patjet\u00ebr do t\u00eb kthehemi te ai ndonj\u00ebher\u00eb. Dhe tani le t\u00eb formalizojm\u00eb dijet nga ky artikull. <\/p>\n<p><\/p>\n<h4 id=\"formalizm-1-opredelenie-srp\">Formalizmi 1. P\u00ebrcaktimi i SRP<\/h4>\n<p><\/p>\n<ol>\n<li>Ndani element\u00ebt n\u00eb m\u00ebnyr\u00eb q\u00eb secili t\u00eb jet\u00eb p\u00ebrgjegj\u00ebs p\u00ebr di\u00e7ka t\u00eb vet\u00ebm.<\/li>\n<li>P\u00ebrgjegj\u00ebsia shpjegohet si 'arsye p\u00ebr ndryshim'. Pra, secili element ka vet\u00ebm nj\u00eb arsye p\u00ebr ndryshim, n\u00eb terma logjike biznesi.<\/li>\n<li>Potencialet ndryshimeve t\u00eb logjik\u00ebs s\u00eb biznesit duhet t\u00eb lokalizohen. Element\u00ebt q\u00eb ndryshojn\u00eb sinhronisht duhet t\u00eb jen\u00eb af\u00ebr nj\u00ebri-tjetrit.<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"formalizm-2-neobhodimye-kriterii-samoproverki\">Formalizmi 2. Kriteret e nevojshme p\u00ebr vet\u00ebkontroll.<\/h4>\n<p><\/p>\n<p>Nuk kam hasur n\u00eb kritere t\u00eb mjaftueshme p\u00ebr p\u00ebrmbushjen e SRP. Por ka kushte t\u00eb nevojshme:<\/p>\n<p><\/p>\n<p>1) Shtrojeni pyetjen \u2014 \u00e7far\u00eb b\u00ebn kjo klas\u00eb\/metod\u00eb\/modul\/sh\u00ebrbim. Duhet ta p\u00ebrgjigjeni me nj\u00eb definicion t\u00eb thjesht\u00eb. (faleminderit) <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\">shpjegime<\/b><\/p>\n<p>Megjithat\u00eb, ndonj\u00ebher\u00eb \u00ebsht\u00eb shum\u00eb e v\u00ebshtir\u00eb t\u00eb gjendet nj\u00eb definicion i thjesht\u00eb. <\/p>\n<p><\/p>\n<p>2) Rregullimi i ndonj\u00eb gabimi ose shtimi i nj\u00eb funksionaliteti t\u00eb ri prek numrin minimal t\u00eb skedar\u00ebve\/klasave. Idealisht \u2014 nj\u00eb. <\/p>\n<p>\n<b class=\"spoiler_title\">shpjegime<\/b><\/p>\n<p>Ngjash\u00ebm me p\u00ebrgjegj\u00ebsin\u00eb (p\u00ebr funksionalitetin ose gabimin) q\u00eb \u00ebsht\u00eb e inkapsuluar n\u00eb nj\u00eb skedar\/klas\u00eb, keni nj\u00eb ide t\u00eb qart\u00eb se ku t\u00eb k\u00ebrkoni dhe \u00e7far\u00eb t\u00eb korrigjoni. P\u00ebr shembull: funksionaliteti i ndryshimit t\u00eb m\u00ebnyr\u00ebs s\u00eb prezantimit t\u00eb veprimeve do t\u00eb k\u00ebrkoj\u00eb t\u00eb ndryshohet vet\u00ebm regjistruesi. Nuk nevojitet t\u00eb vraponi n\u00eb t\u00eb gjith\u00eb kodin tjet\u00ebr. <\/p>\n<p><\/p>\n<p>Nj\u00eb shembull tjet\u00ebr \u2014 shtimi i nj\u00eb kontrolli UI t\u00eb ri, i ngjash\u00ebm me t\u00eb kaluarit. N\u00ebse kjo ju detyron t\u00eb shtoni 10 entitete t\u00eb ndryshme dhe 15 konvertues t\u00eb ndrysh\u00ebm \u2014 duket sikur keni \u2018tepruar\u2019.<\/p>\n<p><\/p>\n<p>3) N\u00ebse disa zhvillues po punojn\u00eb n\u00eb funksionalitete t\u00eb ndryshme t\u00eb projektit tuaj, probabiliteti i konflikteve t\u00eb mergjit, pra probabiliteti q\u00eb nj\u00eb i nj\u00ebjt\u00eb skedar\/klas\u00eb t\u00eb ndryshohet nga disa zhvillues nj\u00ebkoh\u00ebsisht \u2014 \u00ebsht\u00eb minimal.<\/p>\n<p>\n<b class=\"spoiler_title\">shpjegime<\/b><\/p>\n<p>N\u00ebse gjat\u00eb shtimit t\u00eb nj\u00eb operacioni t\u00eb ri \u2018Derdh vodka n\u00ebn tavolin\u00eb\u2019 ju nevojitet t\u00eb prekeni regjistruesi, operacioni i pirjes dhe derdhjes \u2014 duket se p\u00ebrgjegj\u00ebsit\u00eb jan\u00eb ndar\u00eb keq. Sigurisht, kjo nuk \u00ebsht\u00eb gjithmon\u00eb e mundur, por duhet t\u00eb p\u00ebrpiqemi t\u00eb ulim k\u00ebt\u00eb tregues. <\/p>\n<p><\/p>\n<p>4) Kur b\u00ebni nj\u00eb pyetje sqaruese rreth logjik\u00ebs s\u00eb biznesit (nga zhvilluesi ose menaxheri), ju shkoni vet\u00ebm n\u00eb nj\u00eb klas\u00eb\/skedar dhe merrni informacion vet\u00ebm nga aty.<\/p>\n<p>\n<b class=\"spoiler_title\">shpjegime<\/b><\/p>\n<p>Funksionalitetet, rregullat ose algoritmet jan\u00eb shkruar kompakt secila n\u00eb nj\u00eb vend, dhe nuk jan\u00eb shp\u00ebrndar\u00eb me flamuj n\u00eb t\u00eb gjith\u00eb hap\u00ebsir\u00ebn e kodin.<\/p>\n<p><\/p>\n<p>5) Em\u00ebrtimi \u00ebsht\u00eb i qart\u00eb.<\/p>\n<p>\n<b class=\"spoiler_title\">shpjegime<\/b><\/p>\n<p>Klasa ose metoda jon\u00eb \u00ebsht\u00eb p\u00ebrgjegj\u00ebse p\u00ebr di\u00e7ka t\u00eb vetme, dhe p\u00ebrgjegj\u00ebsia reflektohet n\u00eb emrin e saj.<\/p>\n<p><\/p>\n<p>AllManagersManagerService \u2014 me siguri, nj\u00eb klas\u00eb e Hyjit.<br \/>\nLocalPayment \u2014 ndoshta, jo. <\/p>\n<p><\/p>\n<h4 id=\"formalizm-3-metodika-razrabotki-okkama-first\">Formalizmi 3. Metodologjia e zhvillimit \u2018Okham-first\u2019.<\/h4>\n<p><\/p>\n<p>N\u00eb fillim t\u00eb projektimit, majmuni nuk e di dhe nuk e ndjen t\u00eb gjitha nuancat e problemit q\u00eb po zgjidhet dhe mund t\u00eb b\u00ebj\u00eb nj\u00eb gabim. Mund t\u00eb gabohesh n\u00eb m\u00ebnyra t\u00eb ndryshme:<\/p>\n<p><\/p>\n<ul>\n<li>T\u00eb krijosh objekte shum\u00eb t\u00eb m\u00ebdha duke bashkuar p\u00ebrgjegj\u00ebsi t\u00eb ndryshme.<\/li>\n<li>T\u00eb grimcosh, duke ndar\u00eb nj\u00eb p\u00ebrgjegj\u00ebsi t\u00eb vetme n\u00eb shum\u00eb lloje t\u00eb ndryshme.<\/li>\n<li>T\u00eb p\u00ebrcaktosh gabim kufijt\u00eb e p\u00ebrgjegj\u00ebsis\u00eb.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u00cbsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb mbash mend rregullin: \"t\u00eb gabosh m\u00eb mir\u00eb n\u00eb m\u00ebnyr\u00eb t\u00eb madhe\", ose \"n\u00ebse nuk je i sigurt - mos e grimco\". N\u00ebse, p\u00ebr shembull, klasa juaj mbledh n\u00eb vete dy p\u00ebrgjegj\u00ebsi - at\u00ebher\u00eb ajo p\u00ebrs\u00ebri \u00ebsht\u00eb e kuptueshme dhe mund t\u00eb ndahet n\u00eb dy me nj\u00eb ndryshim minimal n\u00eb kodin e klientit. T\u00eb mbledh\u00ebsh nj\u00eb got\u00eb nga fragmente xhami, zakonisht \u00ebsht\u00eb m\u00eb e v\u00ebshtir\u00eb p\u00ebr shkak t\u00eb kontekstit t\u00eb shp\u00ebrndar\u00eb n\u00eb disa skedar\u00eb dhe munges\u00ebs s\u00eb var\u00ebsive t\u00eb nevojshme n\u00eb kodin e klientit. <\/p>\n<p><\/p>\n<h2 id=\"pora-zakruglyatsya\">\u00cbsht\u00eb koha t\u00eb mbyllemi.<\/h2>\n<p><\/p>\n<p>Fusha e aplikimit t\u00eb SRP-s\u00eb nuk kufizohet n\u00eb OOP dhe SOLID. Ai \u00ebsht\u00eb i aplikuesh\u00ebm p\u00ebr metoda, funksione, klasa, module, mikrosisteme dhe sh\u00ebrbime. Ai \u00ebsht\u00eb i aplikuesh\u00ebm si n\u00eb zhvillimin \"fiksisht-fiksisht-dhe- n\u00eb-prod\", ashtu edhe n\u00eb \"shkenc\u00ebn e raketave\", duke e b\u00ebr\u00eb bot\u00ebn pak m\u00eb t\u00eb mir\u00eb kudo. N\u00ebse mendojm\u00eb, kjo ndoshta \u00ebsht\u00eb nj\u00eb parim themelor i gjith\u00eb inxhinieris\u00eb. Inxhinieria mekanike, sistemet e menaxhimit, dhe n\u00eb p\u00ebrgjith\u00ebsi t\u00eb gjitha sistemet komplekse - ndodhen nga komponent\u00ebt, dhe \"mos-grimcimi\" privon nd\u00ebrtuesit nga fleksibiliteti, \"grimcimi\" - nga efikasiteti, dhe kufijt\u00eb e gabuara - nga arsyeja dhe qet\u00ebsia shpirt\u00ebrore. <\/p>\n<p>\n<img decoding=\"async\" alt=\"Parimi i P\u00ebrgjegj\u00ebsis\u00eb s\u00eb Vetme. Nuk \u00ebsht\u00eb aq i thjesht\u00eb sa duket.\" src=\"\/wp-content\/uploads\/2019\/06\/b70fb2b0b87cf90d41462263e839902b.JPG\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>SRP nuk \u00ebsht\u00eb shpikur nga natyra dhe nuk \u00ebsht\u00eb pjes\u00eb e shkenc\u00ebs s\u00eb sakt\u00eb. Ai del nga kufizimet tona biologjike dhe psikologjike. Ky \u00ebsht\u00eb thjesht nj\u00eb m\u00ebnyr\u00eb p\u00ebr t\u00eb kontrolluar dhe zhvilluar sisteme komplekse me ndihm\u00ebn e trurit t\u00eb njeriut-majmund. Ai na tregon se si t\u00eb dekompozojm\u00eb nj\u00eb sistem. Formulimi fillestar k\u00ebrkonte nj\u00eb aft\u00ebsi t\u00eb konsiderueshme telepatie, por shpresoj se ky artikull e ka hequr disi mjegull\u00ebn.<\/p>\n<p>Burimi: <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.1.1 - 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\/sq\/blog\/news\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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\udd47Principi i P\u00ebrgjegj\u00ebsis\u00eb s\u00eb Vetme. Nuk \u00ebsht\u00eb kaq e thjesht\u00eb sa duket | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/news\/single-responsibility-principle-ne-takoj-prostoj-kak-kazhetsya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/34828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=34828"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/34828\/revisions"}],"predecessor-version":[{"id":159767,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/34828\/revisions\/159767"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/26229"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=34828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=34828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=34828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}