Fitsipiky ny andraikitra tokana. Tsy tsotra araka ny hita

Fitsipiky ny andraikitra tokana. Tsy tsotra araka ny hita Fitsipika andraikitra tokana, fantatra ihany koa amin'ny hoe fitsipiky ny andraikitra tokana,
aka ny fitsipiky ny fiovaovan'ny fanamiana - lehilahy iray tena malama sy mampatahotra toy izany amin'ny tafatafa amin'ny programer.

Ny fahafantarako matotra voalohany an'io fitsipika io dia natao tamin'ny fiandohan'ny taona voalohany, rehefa nentina tany an'ala ireo tanora sy maitso mba hahatonga ny mpianatra amin'ny olitra - tena mpianatra.

Tao anaty ala, dia nizara ho vondrona misy olona 8-9 avy izahay ary nanao fifaninanana - iza no vondrona hisotro vodka iray tavoahangy haingana indrindra, raha toa ny olona voalohany ao amin'ny vondrona dia mandatsaka vodka ao anaty vera iray, ny faharoa misotro azy, ary ny fahatelo dia misakafo. Mifindra any amin'ny faran'ny filahatry ny vondrona ilay vondrona nahavita ny asany.

Ny tranga misy ny haben'ny filaharana dia maromaro amin'ny telo dia fampiharana tsara ny SRP.

Famaritana 1. Andraikitra tokana.

Ny famaritana ofisialin'ny Principle Responsibility Single (SRP) dia milaza fa ny orinasa tsirairay dia manana ny andraikiny sy ny anton'ny fisiany, ary iray ihany ny andraikitra.

Diniho ilay zavatra “Mpisotro” (Tippler).
Mba hampiharana ny foto-kevitry ny SRP dia hizara telo ny andraikitra:

  • Isaky ny iray (PourOperation)
  • Iray zava-pisotro (DrinkUpOperation)
  • Misy sakafo kely (TakeBiteOperation)

Ny tsirairay amin'ireo mpandray anjara amin'ny dingana dia tompon'andraikitra amin'ny singa iray amin'ny dingana, izany hoe, manana andraikitra atomika iray - misotro, misotro na misakafo.

Ny lavaka fisotroana, kosa, dia facade ho an'ireto asa ireto:

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

Fitsipiky ny andraikitra tokana. Tsy tsotra araka ny hita

Nahoana?

Ny mpandrindra olombelona dia manoratra kaody ho an'ny lehilahy rajako, ary ny lehilahy rajako dia tsy miraharaha, adala ary maika foana. Afaka mihazona sy mahazo teny 3 - 7 eo ho eo izy indray mandeha.
Raha ny momba ny mamo dia misy telo amin'ireo teny ireo. Na izany aza, raha manoratra ny kaody amin'ny taratasy iray isika, dia hisy tanana, solomaso, ady ary adihevitra tsy misy farany momba ny politika. Ary izany rehetra izany dia ho ao amin`ny vatana ny fomba iray. Azoko antoka fa nahita kaody toy izany ianao tamin'ny fanaonao. Tsy ny fitsapana maha-olombelona indrindra ho an'ny psyche.

Etsy an-danin'izany, ny lehilahy rajako dia natao haka tahaka ny zava-misy eo amin'izao tontolo izao ao an-dohany. Amin'ny eritreriny, afaka manosika azy ireo miaraka izy, manangona zavatra vaovao avy amin'izy ireo, ary manaparitaka azy ireo amin'ny fomba mitovy. Alaivo sary an-tsaina ny fiara modely tranainy iray. Ao amin'ny eritreritrao, azonao atao ny manokatra ny varavarana, sokafy ny varavarankelin'ny varavarana ary jereo eo ny mekanika fanandratana varavarankely, izay hisy fitaovana ao anatiny. Saingy tsy afaka mahita ny singa rehetra amin'ny milina miaraka amin'ny fotoana iray ianao, ao anaty "lisitra" iray. Farafaharatsiny tsy afaka ny "lehilahy gidro".

Noho izany, ny mpandrindran'olombelona dia mamadika ny rafitra sarotra ho andiana singa tsy dia be pitsiny sy miasa. Na izany aza, dia azo levona amin'ny fomba isan-karazany: amin'ny fiara tranainy maro, ny fantsona rivotra miditra ao amin'ny varavarana, ary amin'ny fiara maoderina, ny tsy fahombiazana eo amin'ny hidin-trano elektronika manakana ny maotera tsy manomboka, izay mety ho olana mandritra ny fanamboarana.

ankehitriny, Ny SRP dia fitsipika iray manazava ny fomba famongorana, izany hoe ny toerana hanaovana ny tsipika mampisaraka.

Milaza izy fa ilaina ny simba araka ny fitsipiky ny fizarana ny "andraikitra", izany hoe, araka ny asan'ny zavatra sasany.

Fitsipiky ny andraikitra tokana. Tsy tsotra araka ny hita

Andao hiverina amin'ny fisotroana sy ny tombony azon'ny rajako mandritra ny fahalovana:

  • Ny kaody dia lasa tena mazava amin'ny ambaratonga rehetra
  • Ny code dia azo soratan'ny programmer maromaro indray mandeha (samy manoratra singa iray)
  • Ny fitiliana mandeha ho azy dia notsorina - arakaraky ny tsotsotra ilay singa no mora kokoa ny fitiliana
  • Ny compositionality ny kaody miseho - azonao soloina DrinkUpOperation amin'ny fandidiana iray izay nandrarahana ranon-javatra teo ambanin'ny latabatra ny mpimamo. Na manolo ny fandidiana fandatsahana amin'ny fandidiana izay mampifangaro divay sy rano na vodka sy labiera. Miankina amin'ny fepetra takian'ny orinasa, azonao atao ny manao ny zava-drehetra tsy misy fikasihana ny code code Tippler.Act.
  • Avy amin'ireo asa ireo dia azonao aforitra ny tendan-kanina (mampiasa fotsiny TakeBitOperation), Alcoholique (mampiasa fotsiny DrinkUpOperation mivantana avy amin'ny tavoahangy) ary mahafeno fepetra ara-barotra maro hafa.

(Oh, toa efa fitsipika OCP ity, ary nandika ny andraikitry ity lahatsoratra ity aho)

Ary, mazava ho azy, ny cons:

  • Tsy maintsy mamorona karazany bebe kokoa isika.
  • Ny mpimamo iray dia misotro sambany adiny roa aorian'izay mety ho azony.

Famaritana 2. Fahasamihafana mitambatra.

Avelao aho tompoko! Ny kilasy fisotroana koa dia manana andraikitra tokana - dia misotro! Ary amin'ny ankapobeny, ny teny hoe "andraikitra" dia hevitra tena manjavozavo. Misy tompon'andraikitra amin'ny anjaran'ny olombelona, ​​ary misy tompon'andraikitra amin'ny fampiakarana ireo pingouins izay nivadika teo amin'ny tsato-kazo.

Andeha hodinihintsika ny fampiharana roa amin'ny mpisotro. Ny voalohany, voalaza etsy ambony, dia misy kilasy telo - ny rano, ny fisotroana ary ny sakafo maivana.

Ny faharoa dia nosoratana tamin'ny alàlan'ny fomba fiasa "Mandroso sy mandroso" ary mirakitra ny lojika rehetra amin'ny fomba Act:

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

Ireo kilasy roa ireo, raha ny fijerin’ny mpanara-baovao avy any ivelany, dia mitovy tanteraka ary mitovy andraikitra amin’ny “fisotroana”.

Misavoritaka!

Avy eo dia mandeha an-tserasera isika ary mahita famaritana iray hafa momba ny SRP - ny fitsipika tokana afaka miova.

SCP dia milaza fa "Ny module iray dia manana antony iray ary iray ihany no tokony hiova". Izany hoe “antom-piovana ny andraikitra”.

(Toa natoky ny fahaizan'ny telepatika an'ilay lehilahy rajako ry zalahy namorona ny famaritana tany am-boalohany)

Mipetraka amin'ny toerany izao ny zava-drehetra. Amin'ny lafiny iray, afaka manova ny fomba fandatsahana, fisotroana ary snacking isika, fa amin'ny mpiboboka ihany dia afaka manova ny filaharana sy ny firafitry ny asa isika, ohatra, amin'ny alàlan'ny fampandehanana ny sakafo alohan'ny hisotroana na manampy ny famakiana toast.

Ao amin'ny fomba fiasa "Mandroso sy mandroso ihany", ny zavatra rehetra azo ovaina dia ovaina amin'ny fomba ihany Act. Azo vakiana sy mahomby izany rehefa misy lojika kely ary zara raha miova, fa matetika dia miafara amin'ny fomba mahatsiravina amin'ny andalana 500 tsirairay avy, miaraka amin'ny fanambarana raha mihoatra noho ny takina amin'i Rosia hiditra ao amin'ny OTAN.

Famaritana 3. Fametrahana ny fanovana.

Matetika ny mpiboboka no tsy mahazo ny antony nifohany tao amin’ny tranon’olon-kafa, na ny toerana misy ny findainy. Fotoana hanampiana ny firaketana an-tsoratra amin'ny antsipiriany.

Andeha isika hanomboka amin'ny fizotry ny fandatsahana:

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

Amin'ny fampidirana azy ao anaty PourOperation, dia nanao zavatra tamim-pahendrena avy amin'ny fomba fijery ny andraikitra sy ny encapsulation, fa ankehitriny dia sahiran-tsaina amin'ny fitsipiky ny miovaova. Ho fanampin'ny fampandehanana azy, izay mety hiova, dia lasa miovaova ihany koa ny logging. Tsy maintsy misaraka ianao ary mamorona logger manokana ho an'ny asa fandatsahana:

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

Ny mpamaky malina dia hahatsikaritra izany LogAfter, LogBefore и OnError azo ovaina tsirairay ihany koa, ary, raha ampitahaina amin'ireo dingana teo aloha, dia hamorona kilasy telo: PourLoggerBefore, PourLoggerAfter и PourErrorLogger.

Ary raha tsaroana fa misy hetsika telo ho an'ny mpisotro toaka dia mahazo kilasy sivy izahay. Vokany, misy kilasy 14 (!!!) ny faribolana misotro toaka iray manontolo.

Hyperbola? Zara raha! Lehilahy gidro iray misy grenady simba dia hanasaraka ny "pourer" ho lasa decanter, vera, mpandraharaha fandatsahana rano, serivisy famatsiana rano, modely ara-batana amin'ny fifandonan'ny molekiola, ary amin'ny telovolana manaraka dia hiezaka ny hamaha ny fiankinan-doha tsy misy. variables manerantany. Ary minoa ahy, tsy hijanona izy.

Amin’izay fotoana izay indrindra no tonga saina ny maro fa angano avy amin’ny fanjakana mavokely ny SRP, ka lasa milalao paty...

... tsy nianatra momba ny fisian'ny famaritana fahatelo ny Srp:

“Ny fitsipiky ny andraikitra tokana dia manambara izany zavatra mitovy amin'ny fiovana dia tokony hotehirizina amin'ny toerana iray". na"Ny fiovana miaraka dia tokony hotehirizina amin'ny toerana iray"

Izany hoe, raha manova ny fandrafetana ny hetsika iray isika dia tsy maintsy manova azy amin'ny toerana iray.

Hevitra tena manan-danja tokoa izany - satria ny fanazavana rehetra momba ny SRP voalaza etsy ambony dia nilaza fa ilaina ny manapotika ireo karazana mandritra ny fanosihosena azy ireo, izany hoe nametraka "fetra ambony" amin'ny haben'ny zavatra izy ireo, ary ankehitriny Efa miresaka momba ny "faritra ambany" isika. Raha lazaina amin'ny fomba hafa, Ny SRP dia tsy mitaky fotsiny ny "torotoro rehefa manosihosy", fa tsy tokony ho tafahoatra koa - "aza manapotika zavatra mifamatotra". Ity no ady lehibe teo amin'ny hareza Occam sy ilay lehilahy rajako!

Fitsipiky ny andraikitra tokana. Tsy tsotra araka ny hita

Ankehitriny dia tokony hahatsiaro ho tsara kokoa ny mpisotro. Ho fanampin'ny hoe tsy ilaina ny mizara ny IPourLogger logger ho kilasy telo, azontsika atao ihany koa ny manambatra ny mpitrandraka hazo rehetra ho karazany iray:

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

Ary raha manampy karazana asa fahefatra isika, dia efa vonona ny logging ho azy. Ary ny fehezan-dalàna momba ny asa dia madio ary tsy misy tabataba amin'ny fotodrafitrasa.

Vokatr'izany dia manana kilasy 5 izahay hamahana ny olana momba ny fisotroana:

  • Fandrotsahana asa
  • Fisotroana fandidiana
  • Hetsika fanenjehana
  • Logger
  • Fasadin'ny mpisotro toaka

Ny tsirairay amin'izy ireo dia tompon'andraikitra tanteraka amin'ny fiasa iray ary manana antony iray hanovana azy. Ny fitsipika rehetra mitovy amin'ny fanovana dia hita eo akaiky eo.

Ohatra tena misy

Nanoratra serivisy ho an'ny fisoratana anarana ho azy mpanjifa b2b izahay. Ary nisy fomba ANDRIAMANITRA niseho ho an'ny andalana 200 mitovitovy amin'izany:

  • Mandehana any amin'ny 1C ary mamorona kaonty
  • Miaraka amin'ity kaonty ity, mankanesa any amin'ny maody fandoavam-bola ary mamorona azy ao
  • Hamarino fa tsy noforonina tao amin'ny lohamilina lehibe ny kaonty misy kaonty toy izany
  • Mamorona kaonty vaovao
  • Ampio ny valin'ny fisoratana anarana ao amin'ny maody fandoavam-bola sy ny laharana 1c amin'ny serivisy valin'ny fisoratana anarana
  • Ampio ny mombamomba ny kaonty amin'ity latabatra ity
  • Mamorona isa isa ho an'ity mpanjifa ity amin'ny serivisy teboka. Alefaso amin'ity serivisy ity ny laharan'ny kaontinao 1c.

Ary nisy asa fandraharahana 10 teo ho eo tao amin'ity lisitra ity izay misy fifandraisana mahatsiravina. Saika ny olon-drehetra no nila ny zavatra kaonty. Ny ID teboka sy ny anaran'ny mpanjifa dia nilaina tamin'ny antsasaky ny antso.

Taorian'ny adiny iray nanaovana refactoring, dia afaka nanasaraka ny kaody fotodrafitrasa sy ny sasany amin'ireo nuances amin'ny fiasana amin'ny kaonty ho fomba / kilasy samihafa. Ny fomban'Andriamanitra dia nanamora izany, saingy nisy tsipika 100 sisa tavela izay tsy te ho voavaha.

Taorian'ny andro vitsivitsy monja dia nanjary nazava fa ny fototry ny fomba "maivana" dia algorithm amin'ny raharaham-barotra. Ary ny famaritana tany am-boalohany momba ny fepetra ara-teknika dia somary sarotra. Ary ny fikasana hanapaka izany fomba izany ho tapatapaka no hanitsakitsaka ny SRP, fa tsy ny mifamadika amin'izany.

Formalisma.

Fotoana tokony hialana amin'ny mamo isika izao. Hamainina ny ranomasonao - hiverina amin'izany isika indray andro any. Andeha hojerentsika ny fahalalana avy amin'ity lahatsoratra ity.

Formalisma 1. Famaritana ny SRP

  1. Saraho ny singa mba samy tompon'andraikitra amin'ny zavatra iray.
  2. Ny andraikitra dia midika hoe "antony hanovana". Izany hoe, ny singa tsirairay dia tsy manana afa-tsy antony iray hanovana azy, raha ny lojika momba ny raharaham-barotra.
  3. Fanovana mety ho an'ny lojika fandraharahana. tsy maintsy atao eo an-toerana. Ny singa miova miaraka dia tsy maintsy eo akaiky.

Formalisma 2. Fepetra ilaina amin'ny fitsirihana tena.

Tsy hitako izay fepetra ampy hanatanterahana ny SRP. Saingy misy fepetra ilaina:

1) Anontanio ny tenanao hoe inona no ataon'ity kilasy / fomba / module / serivisy ity. tsy maintsy mamaly azy amin'ny famaritana tsotra ianao. ( Misaotra anao Brightori )

fanazavana

Na izany aza, indraindray dia sarotra be ny mahita famaritana tsotra

2) Misy fiantraikany amin'ny isan'ny rakitra/kilasy faran'izay kely ny fanamboarana bug na manampy endri-javatra vaovao. Ny tsara indrindra - iray.

fanazavana

Koa satria ny andraikitra (ho an'ny endri-javatra na ny bug) dia voarakitra ao anaty rakitra/kilasy iray, fantatrao tsara hoe aiza no hijerena sy inona no ho ovaina. Ohatra: ny endri-javatra hanovana ny vokatra avy amin'ny asa fitotoana dia tsy maintsy manova ny logger ihany. Tsy ilaina ny mihazakazaka amin'ny sisa amin'ny kaody.

Ohatra iray hafa dia manampy fanaraha-maso UI vaovao, mitovy amin'ny teo aloha. Raha manery anao hampiditra singa 10 samihafa sy mpanova 15 samihafa izany, dia toa mihoa-pefy loatra ianao.

3) Raha maro ny mpamorona miasa amin'ny endri-javatra samihafa amin'ny tetikasanao, dia kely dia kely ny mety hisian'ny fifandirana, izany hoe, ny mety hisian'ny rakitra/kilasy mitovy amin'ny mpamorona maromaro miaraka amin'ny fotoana iray.

fanazavana

Raha, rehefa manampy hetsika vaovao "Arotsaka ny vodka eo ambanin'ny latabatra", dia mila misy fiantraikany amin'ny logger, ny fiasan'ny fisotroana sy ny fandatsahana, dia toa mizarazara ny andraikitra. Mazava ho azy fa tsy azo atao foana izany, fa tokony hiezaka ny hampihenana io tarehimarika io isika.

4) Rehefa nanontaniana fanontaniana manazava momba ny lojikan'ny fandraharahana (avy amin'ny mpamorona na mpitantana) ianao dia miditra amin'ny kilasy / rakitra iray ary avy eo ihany no mahazo vaovao.

fanazavana

Ny endri-javatra, ny fitsipika na ny algorithm dia nosoratana mirindra, tsirairay amin'ny toerana iray, ary tsy miparitaka amin'ny saina manerana ny habaka code.

5) Mazava ny anarana.

fanazavana

Ny kilasy na ny fombantsika dia tompon'andraikitra amin'ny zavatra iray, ary ny andraikitra dia hita taratra amin'ny anarany

AllManagersManagerService - mety ho kilasin'Andriamanitra
LocalPayment - mety tsy

Formalisma 3. Fomba fampandrosoana occam-voalohany.

Tany am-piandohan'ny famolavolana, ny lehilahy gidro dia tsy mahalala ary tsy mahatsapa ny soatoavina rehetra momba ny olana voavaha ary mety hanao fahadisoana. Afaka manao fahadisoana amin'ny fomba samihafa ianao:

  • Ataovy lehibe loatra ny zavatra amin'ny fanakambanana andraikitra samihafa
  • Reframing amin'ny fizarana andraikitra tokana ho karazany maro samihafa
  • Diso famaritana ny fetran'ny andraikitra

Zava-dehibe ny mitadidy ny fitsipika: "tsara kokoa ny manao fahadisoana lehibe," na "raha tsy azonao antoka, aza mizara izany." Raha toa, ohatra, ny kilasy misy anao dia misy andraikitra roa, dia mbola azo takarina izany ary azo zaraina roa miaraka amin'ny fiovana kely amin'ny kaody mpanjifa. Ny fanangonana vera avy amin'ny vaky vera dia matetika sarotra kokoa noho ny teny manodidina miparitaka amin'ny rakitra maromaro sy ny tsy fisian'ny fiankinan-doha ilaina amin'ny kaody mpanjifa.

Tonga ny fotoana hiantsoana azy hoe andro iray

Ny sehatry ny SRP dia tsy voafetra amin'ny OOP sy SOLID. Izy io dia mihatra amin'ny fomba, fiasa, kilasy, modules, microservices ary serivisy. Izy io dia mihatra amin'ny fampandrosoana ny "figax-figax-and-prod" sy ny "rocket-science", izay mahatonga an'izao tontolo izao ho tsara kokoa na aiza na aiza. Raha mieritreritra an'izany ianao dia saika io no fitsipika fototry ny injeniera rehetra. Ny injeniera mekanika, ny rafitra fanaraha-maso, ary ny rafitra sarotra rehetra dia naorina avy amin'ny singa, ary ny "underfragmentation" dia manakana ny mpamorona ny fahaiza-manaony, ny "overfragmentation" dia manakana ny mpamorona ny fahombiazany, ary ny sisin-tany diso dia manala azy ireo amin'ny saina sy ny fiadanan-tsaina.

Fitsipiky ny andraikitra tokana. Tsy tsotra araka ny hita

Ny SRP dia tsy noforonin'ny natiora ary tsy anisan'ny siansa marina. Izy io dia miala amin'ny fetran'ny biolojika sy ara-tsaina, fomba iray hifehezana sy hamolavola rafitra sarotra amin'ny fampiasana ny atidohan'ny rajako. Lazainy amintsika ny fomba handrava rafitra iray. Ny famolavolana tany am-boalohany dia nitaky telepathy, saingy manantena aho fa ity lahatsoratra ity dia manadio ny sasany amin'ny setroka.

Source: www.habr.com

Add a comment