Ụkpụrụ Ọrụ Otu. Ọ bụghị dị mfe dị ka o yiri

Ụkpụrụ Ọrụ Otu. Ọ bụghị dị mfe dị ka o yiri Ụkpụrụ ọrụ otu, nke a makwaara dị ka ụkpụrụ nke otu ọrụ,
aka ụkpụrụ nke edo mgbanwe - ihe kemgwucha na-amị amị Ihọd ịghọta na ndị dị otú ahụ a ụjọ ajụjụ na programmer ajụjụ ọnụ.

Ihe mbụ m maara nke ọma na ụkpụrụ a mere na mmalite nke afọ mbụ, mgbe a kpọgara ndị na-eto eto na akwụkwọ ndụ akwụkwọ ndụ n'ọhịa iji mee ka ụmụ akwụkwọ si na larvae - ezigbo ụmụ akwụkwọ.

N'ime ọhịa, e kewara anyị n'ìgwè nke mmadụ 8-9 nke ọ bụla ma nwee asọmpi - ndị otu ga-aṅụ karama vodka ngwa ngwa, ma ọ bụrụhaala na onye mbụ sitere na otu ahụ na-agbanye vodka n'ime otu iko, nke abụọ na-aṅụ ya. na nke atọ nwere nri nri. Ngalaba mezuru ọrụ ya na-aga na njedebe nke kwụ n'ahịrị otu ahụ.

Ikpe ebe nha kwụ n'ahịrị bụ otutu nke atọ bụ ezigbo mmejuputa SRP.

Nkọwa 1. Otu ọrụ.

Nkọwa ọrụ gọọmentị nke Ụkpụrụ Nanị Ọrụ (SRP) na-ekwu na ụlọ ọrụ ọ bụla nwere ọrụ nke ya na ihe kpatara ịdị adị, na ọ nwere naanị otu ọrụ.

Tụlee ihe ahụ bụ "Onye na-aṅụ mmanya" (Tippler).
Iji mejuputa ụkpụrụ SRP, anyị ga-ekewa ọrụ ahụ ụzọ atọ:

  • Otu na-awụ (Ịrụ ọrụ)
  • Otu mmanya (DrinkUpoperation)
  • Otu nwere nri nri (Ọrụ TakeBite)

Onye ọ bụla n'ime ndị so na usoro ahụ bụ maka otu akụkụ nke usoro ahụ, ya bụ, nwere otu ọrụ atọm - ịṅụ mmanya, wụsa ma ọ bụ nri.

Oghere mmanya, n'aka nke ya, bụ facade maka ọrụ ndị a:

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

Ụkpụrụ Ọrụ Otu. Ọ bụghị dị mfe dị ka o yiri

Ntak-a?

Onye na-eme ihe omume mmadụ na-ede koodu maka nwoke enwe, na enwe-na-adịghị ege ntị, onye nzuzu na mgbe ọ bụla na-eme ngwa ngwa. Ọ nwere ike ijide ma ghọta ihe dịka okwu 3-7 n'otu oge.
N'ihe banyere onye aṅụrụma, e nwere atọ n'ime okwu ndị a. Otú ọ dị, ọ bụrụ na anyị ejiri otu mpempe akwụkwọ dee koodu ahụ, mgbe ahụ ọ ga-enwe aka, iko, ọgụ na arụmụka na-adịghị agwụ agwụ banyere ndọrọ ndọrọ ọchịchị. Na ihe niile a ga-abụ na ahụ nke otu usoro. Eji m n'aka na ị hụla koodu dị otú ahụ na omume gị. Ọ bụghị ule kachasị mmadụ maka psyche.

N'aka nke ọzọ, e mere nwoke enwe ka ọ na-eṅomi ihe ndị dị n'ụwa n'isi. N'echiche ya, ọ nwere ike ịkwanye ha ọnụ, chịkọta ihe ọhụrụ n'ime ha, ma kewaa ha n'otu ụzọ ahụ. Cheedị banyere ụgbọ ala ochie. N'echiche gị, ị nwere ike imeghe ọnụ ụzọ, kpughee mkpụbelata ọnụ ụzọ ma hụ ebe a na-ebuli windo, n'ime ya ga-enwe ngwa ngwa. Mana ị nweghị ike ịhụ akụkụ niile nke igwe n'otu oge, n'otu “ndepụta”. Opekempe, “nwoke enwe” enweghị ike.

Ya mere, ndị na-eme ihe omume mmadụ na-emebi usoro mgbagwoju anya n'ime ihe ndị na-adịghị mgbagwoju anya na ndị na-arụ ọrụ. Otú ọ dị, enwere ike imebi ya n'ụzọ dị iche iche: n'ọtụtụ ụgbọ ala ochie, ikuku ikuku na-abanye n'ọnụ ụzọ, na ụgbọ ala nke oge a, ọdịda nke mkpọchi ngwá electronic na-egbochi engine ịmalite, nke nwere ike ịbụ nsogbu n'oge nrụzi.

Ugbu a, SRP bụ ụkpụrụ nke na-akọwa OTÚ e si agbaze, ya bụ, ebe a ga-esere ahịrị nkewa.

Ọ na-ekwu na ọ dị mkpa ka ọ gbarie dị ka ụkpụrụ nke nkewa nke "ọrụ," ya bụ, dị ka ọrụ nke ụfọdụ ihe.

Ụkpụrụ Ọrụ Otu. Ọ bụghị dị mfe dị ka o yiri

Ka anyị laghachi n'ịṅụ mmanya na uru nke enwe na-enweta n'oge ire ere:

  • Koodu apụtala nke ukwuu na ọkwa ọ bụla
  • Ọtụtụ ndị mmemme nwere ike dee koodu ahụ n'otu oge (nke ọ bụla na-ede ihe dị iche)
  • A na-eme ka ule akpaghị aka dị mfe - ihe dị mfe dị mfe, ọ dị mfe ịnwale
  • Ihe mejupụtara koodu ahụ pụtara - ị nwere ike dochie ya DrinkUpoperation na-arụ ọrụ nke onye aṅụrụma na-agbanye mmiri mmiri n'okpuru tebụl. Ma ọ bụ dochie ọrụ ịwụsa na-arụ ọrụ nke ị na-agwakọta mmanya na mmiri ma ọ bụ vodka na biya. Dabere na azụmahịa chọrọ, ị nwere ike ime ihe niile na-emetụghị koodu usoro ahụ aka Tippler.Act.
  • Site na arụmọrụ ndị a, ị nwere ike ịgbaji nri nri (iji naanị TakeBitOperation), Mmanya (na-eji naanị DrinkUpoperation kwụ ọtọ site na karama) ma zute ọtụtụ ihe azụmaahịa ndị ọzọ chọrọ.

(Oh, ọ dị ka nke a bụrịrị ụkpụrụ OCP, emebikwara m ọrụ nke post a)

Na, n'ezie, ọghọm:

  • Anyị ga-emepụta ụdị ndị ọzọ.
  • Onye aṅụrụma na-aṅụ ihe ọṅụṅụ nke mbụ awa ole na ole ka ọ gachara karịa ka ọ gaara aṅụ.

Nkọwa 2. Mgbanwe dị n'otu.

Kwe ka m, ụmụ nwoke! Klas ịṅụ mmanya nwekwara otu ọrụ - ọ na-aṅụ mmanya! Na n'ozuzu, okwu ahụ bụ "ọrụ" bụ echiche na-edochaghị anya. Onye na-ahụ maka akara aka nke ụmụ mmadụ, ma ọ bụ onye na-ahụ maka ịzụlite penguin ndị a kwaturu n'osisi.

Ka anyị tụlee omume abụọ nke onye na-aṅụ mmanya. Nke mbụ, nke a kpọtụrụ aha n'elu, nwere klas atọ - wụsa, ihe ọṅụṅụ na nri.

Edere nke abụọ site na usoro "Gaa n'ihu na Naanị N'ihu" ma nwee echiche niile dị na usoro ahụ Iwu:

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

Klas abụọ a, site n'echiche nke onye na-ekiri ihe n'èzí, na-ele anya otu ihe ahụ ma kesaa otu ọrụ nke "ịṅụ mmanya".

Ọgbaghara!

Mgbe ahụ, anyị na-aga na ntanetị wee chọpụta nkọwa ọzọ nke SRP - Ụkpụrụ Ngbanwe Na-adịghị.

SCP kwuru na "Modul nwere otu na naanị otu ihe kpatara ịgbanwe". Ya bụ, "Ịrụ ọrụ bụ ihe kpatara mgbanwe."

(Ọ dị ka ụmụ okorobịa ndị bịara na nkọwa mbụ ahụ nwere obi ike na ikike telepathic nke nwoke ape)

Ugbu a ihe niile dabara ebe. Iche iche, anyị nwere ike ịgbanwe usoro ịwụsa, ịṅụ mmanya na nri nri, ma na onye na-aṅụ mmanya n'onwe ya, anyị nwere ike ịgbanwe usoro na nhazi nke ọrụ, dịka ọmụmaatụ, site n'ịkwagharị nri tupu ịṅụ mmanya ma ọ bụ na-agbakwunye ịgụ nke toast.

Na usoro "Na-aga n'ihu na naanị n'ihu", ihe niile nwere ike ịgbanwe naanị na usoro Iwu. Nke a nwere ike ịgụ ma dị irè mgbe enwere obere mgbagha na ọ na-adịkarịghị agbanwe, ma mgbe mgbe ọ na-ejedebe n'ụzọ dị egwu nke ahịrị 500 nke ọ bụla, na-enwekwu ma ọ bụrụ na-ekwu karịa ka achọrọ Russia ịbanye NATO.

Nkọwa 3. Mpaghara mgbanwe.

Ndị na-aṅụ mmanya anaghị aghọtakarị ihe mere ha ji teta n'ụlọ onye ọzọ, ma ọ bụ ebe ekwentị mkpanaaka ha dị. Ọ bụ oge ịgbakwunye ndekọ ndekọ zuru ezu.

Ka anyị malite ịdebanye aha na usoro ịwụsa:

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

Site na itinye ya n'ime Ịrụ ọrụ, anyị mere ihe amamihe dị na ya site n'echiche nke ibu ọrụ na encapsulation, ma ugbu a, anyị na-enwe mgbagwoju anya na ụkpụrụ nke mgbanwe. Na mgbakwunye na ọrụ ahụ n'onwe ya, nke nwere ike ịgbanwe, ndekọ n'onwe ya na-aghọkwa mgbanwe. Ị ga-ekewa ma mepụta logger pụrụ iche maka ọrụ ịwụsa:

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

Onye na-agụ nke ọma ga-achọpụta nke ahụ LogMgbe, Log tupu и Otu Njehie nwekwara ike gbanwee n'otu n'otu, na, site na ntụnyere usoro ndị gara aga, ga-emepụta klas atọ: PourLogger Tupu, PourLoggerMgbe и PourErrorLogger.

Na icheta na a na-arụ ọrụ atọ maka onye na-aṅụ mmanya, anyị na-enweta klas ịgba osisi itoolu. N'ihi ya, gburugburu mmanya na-aba n'anya nwere klas iri na anọ (!!!).

Hyperbola? O siri ike! Otu enwe nke nwere ogbunigwe na-emebi emebi ga-ekewa "onye na-awụsa" n'ime onye na-emepụta ihe, otu iko, ndị na-arụ ọrụ mmiri, ọrụ mmiri mmiri, ihe atụ anụ ahụ nke nkukota nke ụmụ irighiri ihe, na nkeji iri na ise na-esote, ọ ga-anwa ịmeghe ihe ndabere na-enweghị. mgbanwe ụwa. Ma kwere m, ọ gaghị akwụsị.

Ọ bụ n'oge a ka ọtụtụ na-abịa na nkwubi okwu na SRP bụ akụkọ ifo sitere na alaeze pink, wee pụọ igwu egwu noodles ...

... na-amụtaghị mgbe ọ bụla gbasara ịdị adị nke nkọwa nke atọ nke Srp:

“Ụkpụrụ Ọrụ Na-alụbeghị di na-ekwu na ihe ndị yiri mgbanwe kwesịrị idobe n'otu ebe". ma ọ bụ"Ihe mgbanwe ọnụ kwesịrị idobe n'otu ebe"

Ya bụ, ọ bụrụ na anyị agbanwee ndekọ nke ọrụ, mgbe ahụ anyị ga-agbanwe ya n'otu ebe.

Nke a bụ isi ihe dị ezigbo mkpa - ebe ọ bụ na nkọwa niile nke SRP nke e kwuru n'elu kwuru na ọ dị mkpa ịkụpịa ụdị ahụ mgbe a na-echipịa ha, ya bụ, ha tinyere "oke oke" na nha nke ihe ahụ, ma ugbu a. anyị na-ekwu okwu banyere "oke ala" . Yabụ, SRP ọ bụghị naanị na-achọ "ịzọpịa mgbe ị na-echipịa", kamakwa ọ bụghị imebiga ya ókè - "egwepịala ihe ndị na-ejikọta ọnụ". Nke a bụ nnukwu ọgụ dị n'etiti agụba Occam na nwoke enwe!

Ụkpụrụ Ọrụ Otu. Ọ bụghị dị mfe dị ka o yiri

Ugbu a onye na-aṅụ mmanya kwesịrị inwe ahụ nke ọma. Na mgbakwunye na eziokwu na ọ dịghị mkpa kewaa IPourLogger logger n'ime klaasị atọ, anyị nwekwara ike ikpokọta osisi niile n'otu ụdị:

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

Ma ọ bụrụ na anyị gbakwunye ụdị ọrụ nke anọ, mgbe ahụ, ịdebanye aha maka ya adịlarị. Na koodu nke arụmọrụ n'onwe ha dị ọcha na enweghị mkpọtụ akụrụngwa.

N'ihi ya, anyị nwere klas 5 maka idozi nsogbu ịṅụ mmanya:

  • Ịwụsa ọrụ
  • Ịṅụ mmanya
  • Arụmịkọ
  • Logger
  • Onye na-aṅụ facade

Onye ọ bụla n'ime ha na-ahụ maka otu ọrụ ma nwee otu ihe kpatara mgbanwe. Iwu niile yiri mgbanwe dị nso.

Ezi ihe nlereanya

Anyị dere otu ọrụ maka ịdenye onye ahịa b2b aha ozugbo. Na usoro Chineke pụtara maka ahịrị 200 nke ọdịnaya yiri ya:

  • Gaa na 1C wee mepụta akaụntụ
  • Site na akaụntụ a, gaa na modul ịkwụ ụgwọ ma mepụta ya n'ebe ahụ
  • Lelee na emebebeghị akaụntụ nwere ụdị akaụntụ ahụ na sava bụ isi
  • Mepụta akaụntụ ọhụrụ
  • Tinye nsonaazụ ndebanye aha na modul ịkwụ ụgwọ yana nọmba 1c na ọrụ nsonaazụ ndebanye aha
  • Tinye ozi akaụntụ na tebụl a
  • Mepụta akara akara maka onye ahịa a na ọrụ nrụtụaka. Nyefee nọmba akaụntụ 1c gị na ọrụ a.

Ma enwere ihe dị ka ọrụ azụmahịa iri ọzọ na ndepụta a nwere njikọ dị egwu. Ihe fọrọ nke nta ka ọ bụrụ onye ọ bụla chọrọ ihe akaụntụ ahụ. Achọrọ ID isi na aha onye ahịa na ọkara oku.

Mgbe otu awa nke nhazigharị, anyị nwere ike ikewapụ koodu akụrụngwa na ụfọdụ nuances nke ịrụ ọrụ na akaụntụ n'ime ụzọ / klaasị dị iche iche. Ụzọ Chineke mere ka ọ dịkwuo mfe, ma e nwere 100 ahịrị nke koodu fọdụrụ nke na-achọghị ka a tọhapụrụ ya.

Naanị mgbe ụbọchị ole na ole gasịrị, ọ bịara doo anya na isi nke usoro a "dị arọ" bụ algọridim azụmahịa. Na na nkọwa mbụ nke nkọwa teknụzụ dị mgbagwoju anya. Ma ọ bụ mgbalị iji mebie usoro a n'ime iberibe ga-emebi SRP, ọ bụghịkwa ọzọ.

Usoro iwu.

Oge erugo ịhapụ mmanya naanị anyị. Wepu anya mmiri gị - anyị ga-alaghachi na ya otu ụbọchị. Ugbu a, ka anyị hazie ihe ọmụma sitere na isiokwu a.

Formalism 1. Nkọwa nke SRP

  1. Kewapụ ihe ndị ahụ ka onye ọ bụla n'ime ha bụrụ maka otu ihe.
  2. Ọrụ pụtara "ihe kpatara ịgbanwe." Ya bụ, ihe ọ bụla nwere naanị otu ihe kpatara mgbanwe, n'ihe gbasara mgbagha azụmahịa.
  3. Mgbanwe enwere ike na mgbagha azụmahịa. ga-abụ mpaghara mpaghara. Ihe ndị na-agbanwe n'otu oge ga-adị nso.

Formalism 2. Nnwale nyocha onwe onye dị mkpa.

Ahụbeghị m njirisi zuru oke maka imezu SRP. Mana enwere ọnọdụ ndị dị mkpa:

1) Jụọ onwe gị ihe klas / usoro / modul / ọrụ a na-eme. ị ga-eji nkowa dị mfe zaa ya. ( Daalụ Brightori )

nkọwa

Agbanyeghị, mgbe ụfọdụ ọ na-esiri ike ịchọta nkọwa dị mfe

2) Idozi ahụhụ ma ọ bụ ịgbakwunye ihe ọhụrụ na-emetụta ọnụ ọgụgụ faịlụ / klaasị kacha nta. Kwesịrị - otu.

nkọwa

Ebe ọ bụ na arụnyere ọrụ (maka njirimara ma ọ bụ ahụhụ) n'otu faịlụ / klaasị, ị maara kpọmkwem ebe ị ga-ele anya na ihe ị ga-edezi. Dịka ọmụmaatụ: njirimara nke ịgbanwe mmepụta nke ọrụ ndekọ ga-achọ ịgbanwe naanị logger. Ọ dịghị mkpa na-agba ọsọ site ndị ọzọ nke koodu.

Ihe atụ ọzọ na-agbakwunye njikwa UI ọhụrụ, dị ka ndị gara aga. Ọ bụrụ na nke a na-amanye gị ịgbakwunye ụlọ ọrụ 10 dị iche iche na ndị ntụgharị 15 dị iche iche, ọ dị ka ị na-emebiga ya ókè.

3) Ọ bụrụ na ọtụtụ ndị mmepe na-arụ ọrụ na atụmatụ dị iche iche nke ọrụ gị, mgbe ahụ enwere ike ịmekọrịta esemokwu, ya bụ, ohere nke ọtụtụ ndị mmepe ga-agbanwe otu faịlụ / klaasị n'otu oge ahụ, dị ntakịrị.

nkọwa

Ọ bụrụ na, mgbe ị na-agbakwunye ọrụ ọhụrụ "Wụnye vodka n'okpuru tebụl", ịkwesịrị imetụta onye na-egbu osisi, ọrụ ịṅụ mmanya na ịwụsa, mgbe ahụ, ọ dị ka a na-ekewa ọrụ ndị ahụ n'ụzọ gbagọrọ agbagọ. N'ezie, nke a anaghị ekwe omume mgbe niile, ma anyị kwesịrị ịgbalị ibelata ọnụ ọgụgụ a.

4) Mgbe a jụrụ ajụjụ doro anya gbasara mgbagha azụmahịa (site na onye nrụpụta ma ọ bụ onye njikwa), ị na-abanye n'otu klaasị / faịlụ wee nweta ozi naanị site na ebe ahụ.

nkọwa

A na-ede atụmatụ, iwu ma ọ bụ algọridim n'otu n'otu, nke ọ bụla n'otu ebe, na agbasaghị ya na ọkọlọtọ na oghere koodu.

5) Aha ahụ doro anya.

nkọwa

Klas ma ọ bụ usoro anyị bụ maka otu ihe, ọrụ ahụ na-egosipụtakwa n'aha ya

AllManagersManagerService - o yikarịrị ka ọ bụ klaasị Chineke
Paymentkwụ ụgwọ mpaghara - eleghị anya ọ bụghị

Formalism 3. Occam-usoro mmepe mbụ.

Ná mmalite nke imewe, onye enwe amaghị na ọ dịghị eche na a na-edozi aghụghọ niile nke nsogbu ahụ ma nwee ike imehie ihe. Ị nwere ike imehie ihe n'ụzọ dị iche iche:

  • Mee ka ihe buru ibu site na ijikọ ọrụ dị iche iche
  • Ịmegharị site n'ịkekọrịta otu ọrụ n'ime ọtụtụ ụdị dị iche iche
  • Kọwaa nke ọma oke ọrụ

Ọ dị mkpa icheta iwu ahụ: "ọ ka mma ime nnukwu ndudue," ma ọ bụ "ọ bụrụ na ị maghị, ekewala ya." Ọ bụrụ na, dịka ọmụmaatụ, klaasị gị nwere ọrụ abụọ, mgbe ahụ ọ ka nwere ike nghọta ma nwee ike kewaa ya na abụọ na obere mgbanwe na koodu ndị ahịa. Ịchịkọta otu iko sitere na iko iko na-esikarị ike karị n'ihi na a na-agbasa gburugburu n'ọtụtụ faịlụ na enweghị ihe ndabere dị mkpa na koodu ndị ahịa.

Ọ bụ oge ịkpọ ya otu ụbọchị

Oke SRP ejedebeghị na OOP na SOLID. Ọ na-emetụta usoro, ọrụ, klaasị, modul, microservices na ọrụ. Ọ na-emetụta ma "figax-figax-and-prod" na "rocket-sayensị" mmepe, na-eme ka ụwa dịkwuo mma n'ebe niile. Ọ bụrụ na ị na-eche banyere ya, nke a fọrọ nke nta ka isi ụkpụrụ nke niile engineering. Mechanical engineering, njikwa usoro, na n'ezie usoro niile mgbagwoju anya na-wuru site na components, na "underfragmentation" na-egbochi ndị na-emepụta mgbanwe, "overfragmentation" na-eme ka ndị na-emepụta ihe na-arụ ọrụ nke ọma, na oke na-ezighị ezi na-egbochi ha echiche na udo nke uche.

Ụkpụrụ Ọrụ Otu. Ọ bụghị dị mfe dị ka o yiri

Ekepụtaghị SRP site na okike, ọ bụghịkwa akụkụ nke sayensị. Ọ na-esi n'oke ndụ anyị na nke uche pụta, ọ bụ naanị ụzọ isi chịkwaa ma mepụta usoro mgbagwoju anya site n'iji ụbụrụ enwe-mmadụ. Ọ na-agwa anyị ka anyị ga-esi mebie usoro. Nhazi izizi chọrọ ezigbo telepathy, mana enwere m olileanya na isiokwu a na-ekpochapụ ụfọdụ anwụrụ ọkụ.

isi: www.habr.com

Tinye a comment