Mabda'a Mas'uuliyadda Keliya. Ma fududa sida ay u muuqato

Mabda'a Mas'uuliyadda Keliya. Ma fududa sida ay u muuqato Mabda'a mas'uuliyadda keli ah, oo sidoo kale loo yaqaan mabda'a mas'uuliyadda keli ah.
aka the mabda'a kala duwanaanshaha lebbiska - nin aad u sibiqsan in la fahmo iyo sida su'aal neerfaha ah marka wareysiga barnaamijiyaha.

Aqoontii ugu horreysay ee aan la yeesho mabda'aani waxay dhacday bilowgii sanadka koowaad, markii kuwa yaryar iyo kuwa cagaarka ah loo qaaday kaynta si ardayda looga dhigo dirxiga - ardayda dhabta ah.

Kaynta, waxa naloo qaybiyay kooxo min 8-9 qof ah, waxaana tartan u galay - kooxdee ayaa sida ugu dhakhsaha badan u cabi doonta dhalo vodka ah, waase haddii qofka ugu horreeya ee kooxda ka mid ahi uu ku shubo vodka galaas, ka labaadna uu cabbo. tan saddexaadna waxay leedahay cunto fudud. Qaybta dhammaysay hawsheeda waxay u guuraysaa dhammaadka safka kooxda.

Kiiskii uu cabbirka safku ahaa isku dhufashada saddex ayaa ahayd hirgelinta SRP oo wanaagsan.

Qeexid 1. Masuuliyadda keli ah.

Qeexitaanka rasmiga ah ee Mabaadi'da Mas'uuliyadda Keliya (SRP) waxay sheegaysaa in qayb kastaa ay leedahay mas'uuliyaddeeda iyo sababta ay u jirto, ayna leedahay mas'uuliyad keliya.

Tixgeli shayga "Cabiyaha" (Tippler).
Si loo hirgeliyo mabda'a SRP, waxaan mas'uuliyadaha u qaybin doonaa saddex:

  • Hal ku shub (Hawl-gelinta)
  • Hal cabitaan (DrinkUpoperation)
  • Mid wuxuu leeyahay cunto fudud (Hawl-galka TakeBite)

Mid kasta oo ka mid ah ka qaybgalayaasha geeddi-socodka ayaa mas'uul ka ah hal qayb oo ka mid ah geeddi-socodka, taas oo ah, waxay leedahay hal mas'uuliyad atomic - cabitaan, shub ama cunto fudud.

Godka cabitaanka, isna, ayaa waji u ah hawlgalladan:

сlass Tippler {
    //...
    void Act(){
        _pourOperation.Do() // Π½Π°Π»ΠΈΡ‚ΡŒ
        _drinkUpOperation.Do() // Π²Ρ‹ΠΏΠΈΡ‚ΡŒ
        _takeBiteOperation.Do() // Π·Π°ΠΊΡƒΡΠΈΡ‚ΡŒ
    }
}

Mabda'a Mas'uuliyadda Keliya. Ma fududa sida ay u muuqato

Waa maxay sababta?

Barnaamijka bani'aadamku wuxuu u qoraa koodka ninka daanyeerka ah, daanyeerka-ninkuna waa mid aan fiiro lahayn, doqon ah oo had iyo jeer degdeg ah. Wuxuu hayn karaa oo fahmi karaa 3-7 erey hal mar.
Marka laga hadlayo khamriga, waxaa jira saddex erey oo ka mid ah. Si kastaba ha ahaatee, haddii aan ku qorno koodhka hal xaashi, markaa waxay ka kooban tahay gacmo, muraayado, dagaal iyo muran aan dhammaad lahayn oo ku saabsan siyaasadda. Oo waxaas oo dhan waxay ku jiri doonaan jirka hal hab. Waan hubaa inaad ku aragtay koodka noocaas ah dhaqankaaga. Ma aha imtixaanka ugu bini'aadannimo ee maskaxda.

Dhanka kale, ninka daanyeerka ah waxaa loogu talagalay inuu ku ekaado walxaha dhabta ah ee madaxiisa. Male-awaalkiisa, wuu isku riixi karaa, oo ka ururin karaa walxo cusub, oo u kala furfuri karaa si la mid ah. Bal qiyaas gaadhi nooc hore ah. Male-awaalkaaga, waxaad furi kartaa albaabka, fur furka jar jarka albaabka oo aad halkaas ku arki kartaa hababka wiishka daaqada, kuwaas oo gudaha ay ku jiri doonaan gears. Laakiin ma arki kartid dhammaan qaybaha mishiinka isku mar, hal "liiska". Ugu yaraan "nin daanyeer" ma awoodo.

Sidaa darteed, barnaamijyada bini'aadamka waxay u jajabiyaan habab isku dhafan oo isku dhafan oo ka kooban qaybo yar oo adag oo shaqeynaya. Si kastaba ha ahaatee, waxaa loo kala jajabin karaa siyaabo kala duwan: Baabuur badan oo duug ah, tuubada hawadu waxay ka soo galaan albaabka, iyo baabuurta casriga ah, cilladda qalabka elektaroonigga ah ee qufulka ayaa ka hortagaya in mishiinka uu bilaabo, taas oo ah dhibaato inta lagu jiro dayactirka.

Haddaba, SRP waa mabda'a sharaxaya sida loo burburiyo, taas oo ah, halka laga sawirayo xariiqda qaybinta.

Waxa uu sheegay in ay lagama maarmaan tahay in la burburiyo iyada oo la raacayo mabda'a qaybinta "mas'uuliyadda," taas oo ah, marka loo eego hawlaha walxaha qaarkood.

Mabda'a Mas'uuliyadda Keliya. Ma fududa sida ay u muuqato

Aan u soo laabano cabitaanka iyo faa'iidooyinka uu helo daanyeerku marka uu burburo:

  • Xeerku wuxuu noqday mid aad u cad heer kasta
  • Koodhka waxa hal mar wada qori kara dhawr programmer (mid kastaaba qayb gooni ah buu qoraa)
  • Tijaabada otomaatiga ah waa la fududeeyay - cunsurka fudud, way fududahay in la tijaabiyo
  • Halabuurka koodhka ayaa u muuqda - waad bedeli kartaa DrinkUpoperation qalliin uu sakhraanku dareeraha ugu shubo miiska hoostiisa. Ama ku beddel qalliinka shubista oo aad ku qasto khamriga iyo biyaha ama vodka iyo biirka. Iyada oo ku xidhan shuruudaha ganacsiga, waxaad samayn kartaa wax kasta adoon taaban code habka Tippler.Sharciga.
  • Hawlgalladan waxaad laabi kartaa glutton-ka (adoo isticmaalaya kaliya TakeBitOperation), Khamriga (la isticmaalo oo keliya DrinkUpoperation si toos ah dhalada) oo buuxi shuruudo kale oo badan oo ganacsi.

(Oh, waxay u muuqataa in tani ay tahay mabda'a OCP, waxaanan ku xadgudbay mas'uuliyadda boostada)

Iyo, dabcan, qasaarooyinka:

  • Waa inaan abuurnaa noocyo badan.
  • Sakhraanku wuxuu cabbaa markii ugu horreysay dhowr saacadood ka dib markii uu haddii kale cabbi lahaa.

Qeexid 2. Kala duwanaansho midaysan.

Allow i aqbal, mudane! Heerka cabitaanka sidoo kale wuxuu leeyahay hal mas'uuliyad - wuu cabbaa! Iyo guud ahaan, ereyga "mas'uuliyadda" waa fikrad aan caddayn. Qof baa ka masuula masiirka bini'aadantinimada, qof baa mas'uul ka ah in uu kor u qaado penguin-yada lagu rogay tiirka.

Aynu ka fiirsanno laba dhaqan-gelinta khamriga. Midka ugu horreeya, ee aan kor ku soo sheegnay, wuxuu ka kooban yahay saddex qaybood - shub, cabitaan iyo cunto fudud.

Midda labaad waxa lagu qoray habka "Hordhac iyo Horudhac Keliya" oo ka kooban dhammaan caqli-galnimada habka fal:

//НС Ρ‚Ρ€Π°Ρ‚ΡŒΡ‚Π΅ врСмя  Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ этого класса. Π›ΡƒΡ‡ΡˆΠ΅ ΡΡŠΠ΅ΡˆΡŒΡ‚Π΅ ΠΏΠ΅Ρ‡Π΅Π½ΡŒΠΊΡƒ
сlass BrutTippler {
   //...
   void Act(){
        // Π½Π°Π»ΠΈΠ²Π°Π΅ΠΌ
    if(!_hand.TryDischarge(from:_bottle, to:_glass, size:_glass.Capacity))
        throw new OverdrunkException();

    // Π²Ρ‹ΠΏΠΈΠ²Π°Π΅ΠΌ
    if(!_hand.TryDrink(from: _glass,  size: _glass.Capacity))
        throw new OverdrunkException();

    //ЗакусываСм
    for(int i = 0; i< 3; i++){
        var food = _foodStore.TakeOrDefault();
        if(food==null)
            throw new FoodIsOverException();

        _hand.TryEat(food);
    }
   }
}

Labadan fasal, marka laga eego aragtida kormeeraha dibadda, waxay u egyihiin isku mid waxayna wadaagaan mas'uuliyadda "cabitaanka" isku mid ah.

Jahawareer!

Kadibna waxaan galeynaa khadka oo aan ogaanay qeexitaan kale oo SRP ah - Mabda'a Isbeddelka Keliya.

SCP wuxuu leeyahay "Module wuxuu leeyahay hal sabab oo kaliya oo lagu beddelo" Taasi waa, "Mas'uuliyadu waa sababta isbeddelka."

(Waxay u muuqataa in ragga la yimid qeexitaan asalka ah ay kalsooni ku qabaan kartida telepathic ee ninka daanyeerka ah)

Hadda wax walba meeshay ku dhacaan. Si gooni ah, waxaan u bedeli karnaa hababka shubista, cabbitaanka iyo cunto fudud, laakiin cabbitaanka laftiisa waxaan kaliya bedeli karnaa habka iyo isku dhafka hawlgallada, tusaale ahaan, adigoo dhaqaajinaya cunto fudud ka hor inta aan la cabbin ama ku darin akhrinta rootiga.

Habka "Forward and Only Forward" habka, wax kasta oo la bedeli karo waxaa lagu bedelay kaliya habka fal. Tani waxay noqon kartaa mid la akhriyi karo oo wax ku ool ah marka ay jirto caqli-gal yar oo marar dhif ah isbeddelo, laakiin inta badan waxay ku dhammaataa hababka xun ee 500 ee khadadka midkiiba, oo leh wax ka badan haddii-bayaannada looga baahan yahay Ruushka inuu ku biiro NATO.

Qeexid 3. Degenaansho isbedelada.

Khamrigu inta badan ma fahmaan sababta ay uga soo tooseen aqal qof kale, ama halka uu talefankooda gacanta ku yaallo. Waa waqtigii lagu dari lahaa qoritaan faahfaahsan.

Aan ku bilowno galitaanka habka shubista:

class PourOperation: IOperation{
    PourOperation(ILogger log /*....*/){/*...*/}
    //...
    void Do(){
        _log.Log($"Before pour with {_hand} and {_bottle}");
        //Pour business logic ...
        _log.Log($"After pour with {_hand} and {_bottle}");
    }
}

Adigoo ku soo koobaya Hawl-gelinta, Waxaan u dhaqannay si xikmad leh marka laga eego aragtida mas'uuliyadda iyo soo koobidda, laakiin hadda waxaan ku wareernay mabda'a isbeddelka. Marka lagu daro qalliinka laftiisa, oo isbedeli kara, geedka laftiisa ayaa sidoo kale noqda mid isbedeli kara. Waa inaad kala soocdaa oo aad samaysaa logger gaar ah hawsha shubista:

interface IPourLogger{
    void LogBefore(IHand, IBottle){}
    void LogAfter(IHand, IBottle){}
    void OnError(IHand, IBottle, Exception){}
}

class PourOperation: IOperation{
    PourOperation(IPourLogger log /*....*/){/*...*/}
    //...
    void Do(){
        _log.LogBefore(_hand, _bottle);
        try{
             //... business logic
             _log.LogAfter(_hand, _bottle");
        }
        catch(exception e){
            _log.OnError(_hand, _bottle, e)
        }
    }
}

Akhristaha taxaddar leh ayaa taas ogaan doona LogAfter, LogKahor ΠΈ Hal Khalad sidoo kale si gaar ah ayaa loo beddeli karaa, oo, iyadoo la barbar dhigayo tillaabooyinka hore, waxay abuuri doontaa saddex fasal: PourLogger Kahor, PourLoggerAfter ΠΈ PourErrorLogger.

Iyadoo la xasuusan yahay inay jiraan saddex qalliin oo loogu talagalay khamriga, waxaan helnaa sagaal fasal oo jarista. Natiijo ahaan, goobada cabitaanka oo dhan waxay ka kooban tahay 14 (!!!) fasal.

Hyperbola? Adag! Nin daanyeer ah oo bam-gacmeed leh ayaa u kala qaybin doona "shubiyaha" oo u kala qaybin doona muraayad, galaas, shubaya hawl-wadeenno, adeeg biyo-bixineed, qaabka jireed ee isku dhaca molecules, iyo rubuci soo socda wuxuu isku dayi doonaa inuu furfuro ku-tiirsanaanta iyada oo aan la helin. doorsoomayaal caalami ah. I rumayso, ma joojin doono.

Halkaa marka ay marayso in qaar badani ay go'aansadeen in SRP ay yihiin sheeko-xariiro ka yimid boqortooyooyin casaan ah, oo ay u tagaan inay ciyaaraan baasto ...

... adigoon waligaa baranin jiritaanka qeexida saddexaad ee Srp:

"Mabda'a Mas'uuliyadda Keliya ayaa dhigaya in wax la mid ah isbeddelka waa in lagu kaydiyaa hal meel" ama"Wixii is beddelaya waa in hal meel lagu hayaa"

Yacni, haddii aan beddelno gundhigga hawlgalka, markaas waa in aan ku beddelnaa hal meel.

Tani waa qodob aad muhiim u ah - maadaama dhammaan sharraxaadaha SRP ee kor ku xusan ay sheegeen in ay lagama maarmaan tahay in la burburiyo noocyada marka la burburinayo, taas oo ah, waxay ku soo rogeen "xadka sare" ee cabbirka shayga, iyo hadda Waxaan mar hore ka hadlaynaa "xadka hoose" . Si kale haddii loo dhigo, SRP kaliya uma baahna "burburin marka la burburinayo", laakiin sidoo kale yaan la badin - "ha burburin waxyaabaha is-dhexyaacsan". Kani waa dagaalkii weynaa ee u dhexeeya mandiilkii Occam iyo ninka daanyeerka ah!

Mabda'a Mas'uuliyadda Keliya. Ma fududa sida ay u muuqato

Hadda cabbiyuhu waa inuu roonaadaa. Marka laga soo tago xaqiiqda ah inaysan jirin baahi loo qabo in loo qaybiyo IPourLogger logger saddex fasal, waxaan sidoo kale ku dari karnaa dhammaan gooyayaasha hal nooc:

class OperationLogger{
    public OperationLogger(string operationName){/*..*/}
    public void LogBefore(object[] args){/*...*/}       
    public void LogAfter(object[] args){/*..*/}
    public void LogError(object[] args, exception e){/*..*/}
}

Oo haddii aan ku darno nooca afaraad ee hawlgalka, ka dibna qoritaanka loogu talagalay waa horeba diyaar. Xeerka hawlgallada laftooduna waa nadiif oo ka madax bannaan qaylada kaabayaasha.

Natiijo ahaan, waxaan leenahay 5 fasal oo lagu xalliyo dhibaatada cabitaanka:

  • Hawlgalka shubista
  • Qaliinka cabitaanka
  • Hawlgalka xoqidda
  • Logger
  • wejiga cabbista

Mid kasta oo iyaga ka mid ah ayaa si adag uga mas'uul ah hal shaqeyn oo wuxuu leeyahay hal sabab oo isbeddel ah. Dhammaan sharciyada la midka ah isbeddelka ayaa ku yaal meel u dhow.

Tusaalaha nolosha dhabta ah

Waxaan mar u qornay adeeg si toos ah loogu diiwaangelinayo macmiilka b2b. Habka ILAAHAY wuxuu u muuqday 200 oo sadar oo isku mid ah:

  • Tag 1C oo samee akoon
  • Akoonkan, u tag qaybta lacag bixinta oo ku samee halkaas
  • Hubi in koontada koontada noocaas ah aan lagu samayn server-ka ugu weyn
  • Abuur xisaab cusub
  • Ku dar natiijooyinka diiwaangelinta ee qaybta lacag bixinta iyo lambarka 1c adeegga natiijada diiwaangelinta
  • Ku dar macluumaadka xisaabta miiskan
  • U samee nambar dhibco macmiilkan adeega dhibcaha. U gudbi lambarkaaga akoontiga 1c adeegan.

Oo waxaa jiray ilaa 10 hawlo ganacsi oo kale oo liiskan ku jira oo leh xidhiidh xun. Ku dhawaad ​​qof kastaa wuxuu u baahday shayga akoontada. Aqoonsiga barta iyo magaca macmiilka ayaa loo baahnaa badhkii wicitaanada.

Saacad dib-u-habayn ka dib, waxaan awoodnay inaan kala saarno koodhka kaabayaasha iyo qaar ka mid ah nuucyada la shaqeynta koontada oo aan u kala saarno habab / fasallo gaar ah. Habka Ilaahay wuu fududeeyey, laakiin waxa hadhay 100 xariiq oo kood ah oo aan doonayn in la furfuro.

Kaliya dhowr maalmood ka dib ayaa caddaatay in nuxurka habkan "miisaanka fudud" uu yahay algorithm ganacsi. Iyo in sharraxaadda asalka ah ee qeexitaannada farsamada ay ahayd mid aad u adag. Waana isku dayga lagu jebinayo habkan qaybo ka mid ah kuwa ku xad-gudbi doona SRP, oo aan liddi ku ahayn.

Qaabka rasmiga ah.

Waa waqtigii aan ka tagi lahayn sakhraankeena. Ilmadaada qalaji - hubaal waanu ku soo laaban doonaa maalin uun. Hadda aan si rasmi ah uga dhigno aqoonta maqaalkan.

Qaabka rasmiga ah 1. Qeexida SRP

  1. Kala saar curiyeyaasha si mid kasta oo iyaga ka mid ahi uu hal shay masuul ka yahay.
  2. Mas'uuliyaddu waxay u taagan tahay "sabab lagu beddelayo." Taasi waa, cunsur kastaa wuxuu leeyahay hal sabab oo kaliya oo isbeddel ah, marka la eego macquulnimada ganacsiga.
  3. Isbadalada suurtagalka ah ee macquulka ganacsiga. waa in deegaan ahaan laga dhigaa. Walxaha is beddela waa in ay u dhow yihiin.

Qaabka rasmiga ah 2. Shuruudaha is-imtixaanka lagama maarmaanka ah.

Maan arag shuruudo ku filan oo lagu buuxinayo SRP. Laakiin waxaa jira shuruudo lagama maarmaan ah:

1) Is weydii waxa fasalkan/habka/module/adeeggani qabto. waa in aad si fudud uga jawaabto. ( Mahadsanid Brightori )

sharaxaad

Si kastaba ha ahaatee, mararka qaarkood aad bay u adagtahay in la helo qeexitaan fudud

2) Hagaajinta cayayaanka ama ku darista sifo cusub waxay saamaysaa tirada ugu yar ee faylalka/fasalada. Fikrad ahaan - mid.

sharaxaad

Mar haddii mas'uuliyadda (sifo ama bug) lagu soo koobay hal fayl/fasal, waxaad si sax ah u garanaysaa meesha aad ka eegi karto iyo waxa aad tafatirto. Tusaale ahaan: qaabka beddelka wax-soo-saarka hawlgallada jaridda waxay u baahan doontaa in la beddelo oo keliya qoraha. Looma baahna in la dhex maro koodka intiisa kale.

Tusaale kale ayaa ku daraya kantarool UI cusub, oo la mid ah kuwii hore. Haddii tani ay kugu qasbeyso inaad ku darto 10 qaybood oo kala duwan iyo 15 beddelayaal kala duwan, waxay u egtahay inaad ka badan tahay.

3) Haddii dhowr horumariyayaal ay ka shaqeynayaan sifooyin kala duwan oo mashruucaaga ah, markaa suurtagalnimada isku dhaca isku dhafka ah, taas oo ah, suurtagalnimada in fayl isku mid ah / fasal isku mid ah ay beddelaan dhowr horumariye isla waqti isku mid ah, waa mid aad u yar.

sharaxaad

Haddii, marka lagu daro qalliin cusub "Ku shub vodka miiska hoostiisa", waxaad u baahan tahay inaad saameyn ku yeelato logger, hawlgalka cabitaanka iyo shubista, ka dibna waxay u egtahay in masuuliyadaha loo qaybiyay si qalloocan. Dabcan, tani mar walba suurtagal maaha, laakiin waa inaan isku daynaa inaan dhimno tiradan.

4) Marka lagu weydiiyo su'aal caddaynaysa oo ku saabsan macquulka ganacsiga (laga bilaabo horumariyaha ama maamulaha), waxaad si adag u gashaa hal fasal / fayl oo waxaad ka heshaa macluumaadka halkaas oo keliya.

sharaxaad

Tilmaamaha, xeerarka ama algorithms-yada waxaa loo qoraa si kooban, mid walbana hal meel, oo aan lagu kala firdhin calammo inta lagu jiro booska koodka.

5) Magacaabistu waa caddahay.

sharaxaad

Fasalkayaga ama habkayaga ayaa ka masuul ah hal shay, mas'uuliyaddana waxay ka muuqataa magaceeda

AllManagersManagerService - waxay u badan tahay fasalka Ilaah
Lacag-bixinta maxaliga ah - malaha maaha

Qaabka rasmiga ah 3. Occam-habka koboca koowaad.

Bilowga naqshadeynta, daanyeerku ma garanayo mana dareemo dhammaan khiyaanada dhibaatada in la xalliyo oo khalad ayuu samayn karaa. Waxaad u samayn kartaa khaladaad siyaabo kala duwan:

  • Ka dhig shayada mid aad u weyn adiga oo isku daraya mas'uuliyado kala duwan
  • Dib-u-habaynta iyadoo loo qaybinayo hal mas'uuliyadda noocyo badan oo kala duwan
  • Si khaldan u qeex xuduudaha mas'uuliyadda

Waa muhiim in la xasuusto qaanuunka: "waxaa fiican inaad sameyso qalad weyn," ama "haddii aadan hubin, ha kala qaybin." Haddii, tusaale ahaan, fasalkaagu ka kooban yahay laba mas'uuliyadood, markaa weli waa la fahmi karaa waxaana loo qaybin karaa laba iyada oo wax yar laga beddelayo koodhka macmiilka. Isku-dubbarididda muraayadda jeexjeexyada muraayadaha ayaa badanaa aad u dhib badan sababtoo ah macnaha guud ayaa ku faafay dhowr faylal iyo la'aanta ku-tiirsanaanta lagama maarmaanka ah ee xeerka macmiilka.

Waa waqtigii loogu yeeri lahaa maalin

Baaxadda SRP kuma koobna OOP iyo SOLID. Waxay khusaysaa hababka, hawlaha, fasallada, modules-yada, adeegyada yar yar iyo adeegyada. Waxay khusaysaa labadaba "figax-figax-and-prod" iyo "sayenta gantaalaha" horumarinta, taas oo ka dhigaysa aduunka wax yar ka wanaagsan meel kasta. Haddii aad ka fikirto, tani waa ku dhawaad ​​mabda'a aasaasiga ah ee dhammaan injineernimada. Injineerinka farsamada, nidaamyada xakamaynta, iyo runtii dhammaan nidaamyada qalafsan ayaa laga dhisay qaybo, iyo "hoos u dhac" waxay diidaysaa naqshadeeyayaasha dabacsanaanta, "xad-dhaafka" waxay diidaysaa naqshadeeyayaasha waxtarka, iyo xuduudaha khaldan waxay ka horjoogsanayaan caqliga iyo nabadda maskaxda.

Mabda'a Mas'uuliyadda Keliya. Ma fududa sida ay u muuqato

SRP ma aha mid la hindisay dabeecadda kamana mid aha sayniska saxda ah. Waxay ka baxdaa xaddidaadda nafleyda iyo nafsiga ah.Waa uun dariiqo lagu xakameynayo laguna horumarinayo nidaamyada adag iyadoo la adeegsanayo maskaxda daanyeerka. Wuxuu noo sheegaa sida nidaamka loo dumiyo. Habka asalka ah wuxuu u baahday qadar cadaalad ah oo telepathy ah, laakiin waxaan rajeynayaa in maqaalkani uu nadiifiyo qaar ka mid ah qiiqa qiiqa.

Source: www.habr.com

Add a comment