Molao-motheo oa Boikarabello bo le Mong. Ha ho bonolo joalo ka ha ho bonahala

Molao-motheo oa Boikarabello bo le Mong. Ha ho bonolo joalo ka ha ho bonahala Molao-motheo oa boikarabello bo le bong, o tsejoang hape e le molao-motheo oa boikarabello bo le bong,
aka molao-motheo oa ho feto-fetoha ha maemo - monna ea thellang haholo ho utloisisa le potso e ts'oenyehileng joalo lipuisanong tsa mananeo.

Tsebo ea ka ea pele e tebileng ea molao-motheo ona e etsahetse qalong ea selemo sa pele, ha ba banyenyane le ba batala ba isoa morung ho ea etsa liithuti ho tsoa ho li-larvae - liithuti tsa sebele.

Ha re le morung, re ne re arotsoe ka lihlopha tsa batho ba 8-9 e mong le e mong 'me ra ba le tlhōlisano - ke sehlopha sefe se neng se tla noa botlolo ea vodka ka potlako, ha feela motho oa pele oa sehlopha a tšela vodka ka khalase, oa bobeli a e noa; mme wa boraro o na le seneke. Sehlopha se phethileng ts'ebetso ea sona se ea qetellong ea letoto la sehlopha.

Nyeoe moo boholo ba mela e neng e le makhetlo a mararo e ne e le ts'ebetsong e ntle ea SRP.

Tlhaloso 1. Boikarabello bo le bong.

Tlhaloso ea molao ea Molao-motheo oa Boikarabello bo le Mong (SRP) e bolela hore mokhatlo o mong le o mong o na le boikarabelo ba oona le lebaka la ho ba teng, 'me o na le boikarabelo bo le bong feela.

Nahana ka ntho "Drinker" (Tippler).
Ho kenya ts'ebetsong molao-motheo oa SRP, re tla arola boikarabello ka likarolo tse tharo:

  • E 'ngoe ea tšela (Ts'ebetso ea ho tšela)
  • Seno se le seng (DrinkUpOperation)
  • E mong o na le seneke (TakeBiteOperation)

E mong le e mong oa barupeluoa ts'ebetsong o ikarabella bakeng sa karolo e le 'ngoe ea ts'ebetso, ke hore, o na le boikarabelo bo le bong ba athomo - ho noa, ho tšela kapa ho ja lijo tse monate.

Lesoba la ho noa, ka lehlakoreng le leng, ke sebaka sa ts'ebetso ea ts'ebetso ena:

сlass Tippler {
    //...
    void Act(){
        _pourOperation.Do() // налить
        _drinkUpOperation.Do() // выпить
        _takeBiteOperation.Do() // закусить
    }
}

Molao-motheo oa Boikarabello bo le Mong. Ha ho bonolo joalo ka ha ho bonahala

Hobane'ng?

Moetsi oa mananeo a batho o ngolla motho oa tšoene, 'me motho oa tšoene ha a ele hloko, o sethoto ebile o lula a potlakile. O khona ho tšoara le ho utloisisa mantsoe a 3 - 7 ka nako e le 'ngoe.
Tabeng ea letahoa, ho na le a mararo a mantsoe ana. Leha ho le joalo, haeba re ngola khoutu ka lakane e le 'ngoe, joale e tla ba le matsoho, likhalase, lintoa le likhang tse sa feleng mabapi le lipolotiki. 'Me sena sohle se tla ba' meleng oa mokhoa o le mong. Kea kholoa u bone khoutu e joalo ts'ebetsong ea hau. Ha se teko ea botho ka ho fetisisa bakeng sa psyche.

Ka lehlakoreng le leng, monna oa tšoene o etselitsoe ho etsisa lintho tsa sebele tsa lefatše tse hloohong ea hae. Maikutlong a hae, a ka li sutumelletsa hammoho, a kopanya lintho tse ncha ho tsona, ’me a li qhaqholla ka tsela e tšoanang. Nahana ka koloi ea mohlala ea khale. Maikutlong a hau, u ka bula lemati, u theole sekoahelo sa monyako 'me u bone moo mekhoa ea ho phahamisa lifensetere, eo ka hare ho eona ho tla ba le likoloi. Empa u ke ke ua bona likarolo tsohle tsa mochine ka nako e le 'ngoe, "lethathamong" le le leng. Bonyane "monkey man" ha a khone.

Ka hona, baetsi ba mananeo a batho ba senya mekhoa e rarahaneng hore e be sehlopha sa likarolo tse sa rarahanang le tse sebetsang. Leha ho le joalo, e ka senyeha ka litsela tse sa tšoaneng: likoloing tse ngata tsa khale, mochine oa moea o kena monyako, 'me likoloing tsa morao-rao, ho hlōleha ha lisebelisoa tsa elektronike ho thibela enjene ho qala, e leng bothata nakong ea ho lokisoa.

Kahoo, SRP ke molao-motheo o hlalosang MOKHOA oa ho senya, ke hore, moo u ka hulang moeli o arolang.

O re hoa hlokahala ho bola ho ea ka molao-motheo oa ho arola "boikarabelo," ke hore, ho ea ka mesebetsi ea lintho tse itseng.

Molao-motheo oa Boikarabello bo le Mong. Ha ho bonolo joalo ka ha ho bonahala

Ha re khutleleng ho noeng le melemo eo monna oa litšoene a e fumanang nakong ea ho bola:

  • Khoutu e hlakile haholo maemong ohle
  • Khoutu e ka ngoloa ke baetsi ba mananeo a 'maloa ka nako e le ngoe (e mong le e mong o ngola ntho e fapaneng)
  • Teko ea othomathike e nolofalitsoe - ha ntho e le bonolo, ho bonolo ho e leka
  • The compositionality ea khoutu ea hlaha - o ka nka sebaka DrinkUpOperation ho ya tshebetsong eo ho yona letawa le tshelang lero ka tlasa tafole. Kapa nkela ts'ebetso ea ho tšela sebaka ka ts'ebetso eo ho eona u kopanyang veine le metsi kapa vodka le biri. Ho itšetlehile ka litlhoko tsa khoebo, u ka etsa ntho e 'ngoe le e' ngoe ntle le ho ama khoutu ea mokhoa Tippler.Ketso.
  • Ho tsoa lits'ebetsong tsena o ka mena monyollo (o sebelisa feela TakeBitOperation), Joala (ho sebelisoa feela DrinkUpOperation ho tloha botlolong) le ho fihlela litlhoko tse ling tse ngata tsa khoebo.

(Oh, ho bonahala eka sena e se e le molao-motheo oa OCP, 'me ke hataketse boikarabelo ba poso ena)

'Me, ho hlakile, mathata:

  • Re tla tlameha ho theha mefuta e meng.
  • Motho ea tahiloeng o noa lekhetlo la pele ka mor'a lihora tse 'maloa ho feta kamoo a neng a ka noa kateng.

Tlhaloso 2. Phapang e kopaneng.

Ntumelleng, Bahlomphehi! Sehlopha sa ho noa le sona se na le boikarabelo bo le bong - se noa! 'Me ka kakaretso, lentsoe "boikarabello" ke khopolo e sa hlakang haholo. Ho na le motho ea ikarabellang bakeng sa qetello ea moloko oa batho, 'me ho na le motho ea ikarabellang bakeng sa ho phahamisa li-penguin tse ileng tsa phethoha thupeng.

A re ke re nahaneng ka mekhoa e 'meli ea ho noa. Ea pele, e boletsoeng ka holimo, e na le lihlopha tse tharo - tšela, noa le seneke.

Ea bobeli e ngotsoe ka mokhoa oa "Forward and Only Forward" 'me e na le mabaka ohle a mokhoa ona Molao:

//Не тратьте время  на изучение этого класса. Лучше съешьте печеньку
с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);
    }
   }
}

Lihlopha tsena ka bobeli, ho ea ka pono ea motho ea shebileng ka ntle, li shebahala li tšoana hantle 'me li arolelana boikarabelo bo tšoanang ba "ho noa".

Pherekano!

Ebe re kena inthaneteng mme re fumana tlhaloso e nngwe ya SRP - The Single Changeability Principle.

SCP e bolela hore "Mojule o na le lebaka le le leng feela la ho fetoha". Ke hore, "Boikarabelo ke lebaka la phetoho."

(Ho bonahala eka bashanyana ba tlileng ka tlhaloso ea pele ba ne ba kholisehile ka bokhoni ba telepathic ba monna oa ape)

Joale tsohle li oela sebakeng. Ka lehlakoreng le leng, re ka fetola mekhoa ea ho tšela, ho noa le ho noa, empa ho motho ea noang ka boeona re ka fetola feela tatellano le sebopeho sa ts'ebetso, mohlala, ka ho tsamaisa seneke pele ho noa kapa ho eketsa ho bala ha toast.

Ka mokhoa oa "Forward and Only Forward", ntho e 'ngoe le e' ngoe e ka fetoloang e fetoloa feela ka mokhoa Molao. Sena se ka baloa le ho sebetsa ha ho na le mabaka a fokolang 'me ha se hangata se fetohang, empa hangata se qetella ka mekhoa e tšabehang ea mela ea 500 ka' ngoe, e nang le lipolelo tse ngata ho feta tse hlokahalang bakeng sa Russia ho kena NATO.

Tlhaloso 3. Sebaka sa liphetoho.

Hangata lino tse tahang ha li utloisise hore na ke hobane'ng ha li tsohile ka foleteng ea motho e mong, kapa moo liselefouno tsa bona li leng teng. Ke nako ea ho kenyelletsa ho rema lifate ka botlalo.

Ha re qale ho rema lifate ka mokhoa oa ho tšela:

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}");
    }
}

Ka ho e koahela ka hare Ts'ebetso ea ho tšela, re ile ra sebetsa ka bohlale ho tloha ponong ea boikarabelo le encapsulation, empa hona joale re ferekanngoa le molao-motheo oa ho fetoha. Ntle le ts'ebetso ka boeona, e ka fetohang, ho rema lifate ka boeona ho boetse ho fetoha. U tla tlameha ho arohana le ho theha logger e khethehileng bakeng sa ts'ebetso ea ho tšela:

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)
        }
    }
}

'Mali ea hlokolosi o tla hlokomela seo LogAfter, LogBefore и OneError e ka boela ea fetoloa ka bonngoe, 'me, ka papiso le mehato e fetileng, e tla theha lihlopha tse tharo: PourLoggerPele, PourLoggerAfter и PourErrorLogger.

'Me re hopola hore ho na le liopereishene tse tharo bakeng sa motho ea noang, re fumana lihlopha tse robong tsa ho rema lifate. Ka lebaka leo, selikalikoe sohle sa ho noa se na le lihlopha tse 14 (!!!).

Hyperbola? Ho hang! Monna oa litšoene ea nang le seqhomane sa ho bola o tla arola "pourer" hore e be "decanter", khalase, lisebelisoa tse tšelang metsi, tšebeletso ea phepelo ea metsi, mohlala oa 'mele oa ho thulana ha limolek'hule,' me karolong e latelang o tla leka ho rarolla litšepe ntle le ho senya. mefuta-futa ea lefatše. 'Me u nkholoe, a ke ke a emisa.

Ke nakong ena moo ba bangata ba fihlelang qeto ea hore SRP ke litšōmo tse tsoang mebusong e pinki, 'me ba tloha ho ea bapala li-noodle ...

... ntle le ho ithuta ka boteng ba tlhaloso ea boraro ea Srp:

“Molao-motheo oa Boikarabello bo le Mong o bolela hore lintho tse tshoanang le phetoho di lokela ho bolokoa sebakeng se le seng". kapa "Ke liphetoho life hammoho tse lokelang ho bolokoa sebakeng se le seng"

Ke hore, haeba re fetola ho rengoa ha opereishene, joale re tlameha ho e fetola sebakeng se le seng.

Ena ke ntlha ea bohlokoa haholo - kaha litlhaloso tsohle tsa SRP tse neng li le ka holimo li boletse hore ho ne ho hlokahala ho senya mefuta ha e ntse e hatelloa, ke hore, ba beha "moeli o tsoang holimo" ka boholo ba ntho, le hona joale re bua ka "thibelo ho tloha tlase" . Ka mantsoe a mang, SRP ha e hloke feela "ho sila ha u ntse u pshatla", empa hape u se ke ua e fetelletsa - "u se ke ua senya lintho tse kopanyang". Ena ke ntoa e kholo lipakeng tsa lehare la Occam le monna oa tšoene!

Molao-motheo oa Boikarabello bo le Mong. Ha ho bonolo joalo ka ha ho bonahala

Joale motho ea noang o lokela ho ikutloa a le betere. Ntle le taba ea hore ha ho na tlhoko ea ho arola logger ea IPourLogger ka lihlopha tse tharo, re ka boela ra kopanya ba remang lifate ho ba mofuta o le mong:

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

'Me haeba re eketsa mofuta oa bone oa ts'ebetso, joale ho rema lifate bakeng sa eona ho se ho loketse. 'Me khoutu ea ts'ebetso ka boeona e hloekile ebile ha e na lerata la lisebelisoa.

Ka lebaka leo, re na le lihlopha tse 5 tsa ho rarolla bothata ba ho noa:

  • Ts'ebetso ea ho tšela
  • Ts'ebetso ea ho noa
  • Ts'ebetso ea ho jamming
  • Logger
  • Facade ea linotsi

E 'ngoe le e' ngoe ea tsona e ikarabella ka ho feletseng bakeng sa ts'ebetso e le 'ngoe' me e na le lebaka le le leng la phetoho. Melao eohle e tšoanang le phetoho e haufi.

Mohlala oa sebele oa bophelo

Re kile ra ngola ts'ebeletso bakeng sa ho ngolisa moreki oa b2b ka bo eona. Mme ho hlahile mokhoa oa GOD bakeng sa mela e 200 ea litaba tse tšoanang:

  • Eya ho 1C mme o thehe akhaonto
  • Ka ak'haonte ena, e-ea mojuleng oa ho lefa 'me u e bōpe moo
  • Lekola hore ak'haonte e nang le ak'haonte e joalo ha e so thehoe ho seva se seholo
  • Theha ak'haonte e ncha
  • Kenya liphetho tsa ngoliso mojulung oa tefo le nomoro ea 1c litšebeletsong tsa liphetho tsa ngoliso
  • Kenya lintlha tsa akhaonto tafoleng ena
  • Theha nomoro ea lintlha bakeng sa moreki enoa tšebeletsong ea lintlha. Fetisetsa nomoro ea hau ea akhaonto ea 1c tšebeletsong ena.

Mme ho bile le ts'ebetso ea khoebo e ka bang 10 lethathamong lena le khokahanyo e mpe. Hoo e batlang e le motho e mong le e mong o ne a hloka ntho ea akhaonto. ID ea lintlha le lebitso la moreki li ne li hlokahala halofong ea mehala.

Ka mor'a hora ea refactoring, re ile ra khona ho arola khoutu ea litšebeletso tsa motheo le lintlha tse ling tsa ho sebetsa le akhaonto ka mekhoa / lihlopha tse fapaneng. Mokhoa oa Molimo o ile oa etsa hore ho be bonolo, empa ho ne ho setse mela e 100 ea khoutu e neng e sa batle ho thijoa.

Ke ka mor'a matsatsi a seng makae feela ho ileng ha hlaka hore moelelo oa mokhoa ona o "bonolo" ke algorithm ea khoebo. Le hore tlhaloso ea pele ea litlhaloso tsa tekheniki e ne e rarahane haholo. 'Me ke boiteko ba ho senya mokhoa ona likotoana tse tla tlōla SRP, eseng ka tsela e fapaneng.

Boikemisetso.

Ke nako ea hore re tlohele botahoa ba rona re le bang. Hlakola meokho ea hau - ka sebele re tla khutlela ho eona ka letsatsi le leng. Joale a re theheng tsebo e tsoang sengolong sena.

Formaliism 1. Tlhaloso ea SRP

  1. Arola likarolo e le hore e 'ngoe le e' ngoe ea tsona e ikarabelle bakeng sa ntho e le 'ngoe.
  2. Boikarabelo bo emetse "lebaka la ho fetoha." Ke hore, ntho e 'ngoe le e' ngoe e na le lebaka le le leng feela la phetoho, ho latela mohopolo oa khoebo.
  3. Liphetoho tse ka bang teng ho logic ea khoebo. e tlameha ho ba sebakeng sa heno. Lintho tse fetohang ka ho lumellana li tlameha ho ba haufi.

Formaliism 2. Mekhoa e hlokahalang ea ho itlhahloba.

Ha ke so bone mekhoa e lekaneng ea ho phethahatsa SRP. Empa ho na le maemo a hlokahalang:

1) Ipotse hore na sehlopha sena / mokhoa / mojule / tšebeletso e etsa eng. o tlameha ho e araba ka tlhaloso e bonolo. ( Kea leboha Brightori )

litlhaloso

Leha ho le joalo, ka linako tse ling ho thata haholo ho fumana tlhaloso e bonolo

2) Ho lokisa phoso kapa ho eketsa tšobotsi e ncha ho ama palo e fokolang ea lifaele/lihlopha. Hantle - e le 'ngoe.

litlhaloso

Kaha boikarabello (bakeng sa tšobotsi kapa kokoanyana) bo kentsoe faeleng/sehlopheng se le seng, u tseba hantle hore na u shebe hokae le hore na u ka hlophisa eng. Mohlala: tšobotsi ea ho fetola sephetho sa ts'ebetso ea ho rema lifate e tla hloka ho fetola sereti feela. Ha ho hlokahale hore u tsamaee ka har'a khoutu e setseng.

Mohlala o mong ke ho eketsa taolo e ncha ea UI, e ts'oanang le e fetileng. Haeba sena se o qobella ho kenya li-incent tse 10 tse fapaneng le li-converter tse fapaneng tse 15, ho bonahala eka oa e sebelisa ho feta tekano.

3) Haeba bahlahisi ba 'maloa ba ntse ba sebetsa likarolong tse sa tšoaneng tsa morero oa hau, joale monyetla oa ho kopanya likhohlano, ke hore, monyetla oa hore faele e tšoanang / sehlopha se tla fetoloa ke bahlahisi ba' maloa ka nako e le 'ngoe, e nyenyane.

litlhaloso

Haeba, ha u eketsa ts'ebetso e ncha "Tla vodka tlas'a tafole", o hloka ho ama logger, ts'ebetso ea ho noa le ho tšolla, joale ho bonahala eka boikarabelo bo arotsoe ka mokhoa o sothehileng. Ha e le hantle, sena hase kamehla se ka khonehang, empa re lokela ho leka ho fokotsa palo ena.

4) Ha u botsoa potso e hlakileng mabapi le logic ea khoebo (ho tsoa ho mohlahlami kapa mookameli), u kena ka har'a sehlopha se le seng / faele 'me u fumane boitsebiso feela ho tloha moo.

litlhaloso

Likarolo, melao kapa li-algorithms li ngotsoe ka mokhoa o kopanetsoeng, e 'ngoe le e' ngoe sebakeng se le seng, 'me ha e hasane ka lifolakha sebakeng sa khoutu.

5) Ho reha lebitso ho hlakile.

litlhaloso

Sehlopha sa rona kapa mokhoa oa rona o ikarabella bakeng sa ntho e le 'ngoe,' me boikarabelo bo bontšoa ka lebitso la eona

AllManagersManagerService - mohlomong ke sehlopha sa Molimo
LocalPayment - mohlomong ha ho joalo

Formalism 3. Mokhoa oa ntlafatso oa Occam-pele.

Qalong ea moralo, monna oa litšoene ha a tsebe ebile ha a utloe lintho tsohle tse poteletseng tsa bothata li rarolloa mme a ka etsa phoso. O ka etsa liphoso ka litsela tse fapaneng:

  • Etsa hore lintho li be kholo haholo ka ho kopanya boikarabello bo fapaneng
  • Ho hlophisa bocha ka ho arola boikarabello bo le bong ka mefuta e mengata e fapaneng
  • Hlalosa meeli ea boikarabelo ka tsela e fosahetseng

Ke habohlokoa ho hopola molao ona: "ho molemo ho etsa phoso e kholo," kapa "haeba u sa tsebe hantle, u se ke ua e arola." Haeba, ka mohlala, sehlopha sa hau se na le boikarabelo bo bongata, joale se ntse se utloahala 'me se ka aroloa ka bobeli ka liphetoho tse fokolang ho khoutu ea bareki. Ho bokella khalase ho tloha likhalaseng tsa khalase hangata ho thata haholo ka lebaka la moelelo o phatlalatsoang ho pholletsa le lifaele tse 'maloa le ho hloka litšepiso tse hlokahalang ho khoutu ea bareki.

Ke nako ea ho e bitsa letsatsi

Bophahamo ba SRP ha bo felle feela ho OOP le SOLID. E sebetsa ho mekhoa, mesebetsi, lihlopha, li-module, li-microservices le litšebeletso. E sebetsa ho nts'etsopele ea "figax-figax-and-prod" le "rocket-science", e etsang hore lefatše le be betere hohle. Haeba u nahana ka eona, hoo e batlang e le molao-motheo oa boenjiniere bohle. Boenjiniere ba mechine, litsamaiso tsa taolo, 'me ka sebele litsamaiso tsohle tse rarahaneng li hahiloe ho tsoa ho likarolo,' me "karolo e tlase" e amoha baqapi ho feto-fetoha ha maemo, "ho arohanngoa ho feteletseng" ho amoha baqapi ho sebetsa hantle, 'me meeli e fosahetseng e ba amoha monahano le khotso ea kelello.

Molao-motheo oa Boikarabello bo le Mong. Ha ho bonolo joalo ka ha ho bonahala

SRP ha e qapiloe ka tlhaho ebile ha se karolo ea mahlale a nepahetseng. E tsoa mefokolong ea rona ea tlhaho le ea kelello Ke mokhoa feela oa ho laola le ho theha litsamaiso tse rarahaneng ka ho sebelisa boko ba motho oa tšoene. O re bolella mokhoa oa ho senya tsamaiso. Sebopeho sa pele se ne se hloka palo e lekaneng ea telepathy, empa ke tšepa hore sengoloa sena se hlakola tse ling tsa li-smokescreen.

Source: www.habr.com

Eketsa ka tlhaloso