ነጠላ የኃላፊነት መርህ. የሚመስለው ቀላል አይደለም

ነጠላ የኃላፊነት መርህ. የሚመስለው ቀላል አይደለም ነጠላ የኃላፊነት መርሆ፣ የነጠላ ኃላፊነት መርህ በመባልም ይታወቃል፣
aka የዩኒፎርም ተለዋዋጭነት መርህ - ለመረዳት በጣም የሚያዳልጥ ሰው እና በፕሮግራመር ቃለ መጠይቅ ላይ እንደዚህ ያለ የነርቭ ጥያቄ።

ከዚህ መርህ ጋር የመጀመሪያ ትውውቅ ያደረኩት በአንደኛው አመት መጀመሪያ ላይ ሲሆን ወጣቶች እና አረንጓዴዎች ተማሪዎችን ከእጭ ለማውጣት ወደ ጫካ ሲወሰዱ - እውነተኛ ተማሪዎች።

በጫካው ውስጥ እያንዳንዳቸው ከ8-9 ሰዎች በቡድን ተከፋፍለን ውድድር አደረግን - የትኛው ቡድን አንድ ጠርሙስ ቮድካ በፍጥነት ይጠጣል ፣ ከቡድኑ ውስጥ የመጀመሪያው ሰው ቮድካን በመስታወት ውስጥ ካፈሰሰ ፣ ሁለተኛው ቢጠጣ ። እና ሶስተኛው መክሰስ አለው. ሥራውን ያጠናቀቀው ክፍል ወደ የቡድኑ ወረፋ መጨረሻ ይንቀሳቀሳል.

የወረፋው መጠን የሶስት ብዜት የሆነበት ሁኔታ የ SRP ጥሩ አተገባበር ነበር።

ፍቺ 1. ነጠላ ሃላፊነት.

የነጠላ ኃላፊነት መርህ (SRP) ኦፊሴላዊ ፍቺ እያንዳንዱ አካል የራሱ ኃላፊነት እና የሕልውና ምክንያት እንዳለው ይገልጻል, እና አንድ ኃላፊነት ብቻ ነው ያለው.

“ጠጪ” የሚለውን ነገር ግምት ውስጥ ያስገቡ (ቲፕለር).
የ SRP መርህን ለመተግበር ኃላፊነቶቹን በሦስት እንከፍላለን፡-

  • አንድ አፍስሷል (PourOperation)
  • አንድ መጠጥ (የመጠጥ አፕኦፕሬሽን)
  • አንድ ሰው መክሰስ አለው (TakeBiteOperation)

እያንዳንዱ የሂደቱ ተሳታፊዎች ለሂደቱ አንድ አካል ማለትም አንድ አቶሚክ ሃላፊነት አለባቸው - ለመጠጣት, ለማፍሰስ ወይም ለመክሰስ.

የመጠጫው ጉድጓድ, በተራው, ለእነዚህ ስራዎች የፊት ገጽታ ነው.

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

ነጠላ የኃላፊነት መርህ. የሚመስለው ቀላል አይደለም

ለምን?

የሰው ፕሮግራም አድራጊው ለዝንጀሮ ሰው ኮድ ይጽፋል, እና የዝንጀሮው ሰው ግድየለሽ, ደደብ እና ሁልጊዜም በችኮላ ነው. እሱ በአንድ ጊዜ ከ3-7 ቃላትን መያዝ እና መረዳት ይችላል።
በሰካራም ሁኔታ ውስጥ, ከእነዚህ ቃላት ውስጥ ሦስቱ አሉ. ነገር ግን ኮዱን በአንድ ሉህ ከጻፍነው እጅን፣ መነፅርን፣ ጠብንና ፖለቲካን በተመለከተ ማለቂያ የለሽ ክርክሮችን ይይዛል። እና ይህ ሁሉ በአንድ ዘዴ አካል ውስጥ ይሆናል. እርግጠኛ ነኝ በተግባርህ እንደዚህ አይነት ኮድ አይተሃል። ለሥነ-አእምሮ በጣም ሰብአዊ ፈተና አይደለም.

በሌላ በኩል የዝንጀሮው ሰው በጭንቅላቱ ውስጥ ያሉትን የገሃዱ ዓለም ዕቃዎችን ለማስመሰል የተነደፈ ነው። በአዕምሮው ውስጥ, አንድ ላይ መግፋት, አዲስ እቃዎችን ከነሱ መሰብሰብ እና በተመሳሳይ መንገድ መበታተን ይችላል. አንድ የድሮ ሞዴል መኪና አስቡት። በዓይነ ሕሊናዎ ውስጥ, በሩን መክፈት, የበሩን መቁረጫ መፍታት እና እዚያ ውስጥ የዊንዶው ማንሻ ዘዴዎችን ማየት ይችላሉ, በውስጡም ማርሽ ይኖራል. ነገር ግን ሁሉንም የማሽኑን ክፍሎች በአንድ ጊዜ ማየት አይችሉም, በአንድ "ዝርዝር" ውስጥ. ቢያንስ "የጦጣ ሰው" አይችልም.

ስለዚህ, የሰው ፕሮግራም አድራጊዎች ውስብስብ ስልቶችን ወደ ውስብስብ እና አነስተኛ የስራ ክፍሎች ስብስብ ያበላሻሉ. ይሁን እንጂ በተለያየ መንገድ መበስበስ ይቻላል: በብዙ አሮጌ መኪኖች ውስጥ የአየር ማስተላለፊያ ቱቦ ወደ በር ውስጥ ይገባል, እና በዘመናዊ መኪኖች ውስጥ, በኤሌክትሮኒክስ መቆለፊያ ውስጥ ያለው ብልሽት ሞተሩን ከመጀመር ይከላከላል, ይህም በጥገና ወቅት ችግር ሊሆን ይችላል.

አሁን, SRP እንዴት እንደሚበሰብስ ማለትም የመለያያ መስመርን የት እንደሚሳል የሚያብራራ መርህ ነው።.

በ "ኃላፊነት" ክፍፍል መርህ መሰረት መበስበስ እንደሚያስፈልግ ይናገራል, ማለትም በአንዳንድ ነገሮች ተግባራት መሰረት.

ነጠላ የኃላፊነት መርህ. የሚመስለው ቀላል አይደለም

ወደ መጠጥ እንመለስ እና የዝንጀሮው ሰው በመበስበስ ጊዜ የሚያገኛቸውን ጥቅሞች:

  • ኮዱ በየደረጃው እጅግ በጣም ግልፅ ሆኗል።
  • ኮዱ በአንድ ጊዜ በበርካታ ፕሮግራመሮች ሊፃፍ ይችላል (እያንዳንዱ የተለየ አካል ይጽፋል)
  • አውቶማቲክ ሙከራ ቀለል ይላል - ንጥረ ነገሩ ቀለል ባለ መጠን ለመፈተሽ ቀላል ነው።
  • የኮዱ ጥንቅር ይታያል - መተካት ይችላሉ የመጠጥ አፕኦፕሬሽን አንድ ሰካራም በጠረጴዛው ሾር ፈሳሽ ወደሚያፈስበት ቀዶ ጥገና. ወይም የማፍሰስ ስራውን ወይን እና ውሃ ወይም ቮድካ እና ቢራ በሚቀላቀሉበት ቀዶ ጥገና ይቀይሩት. በንግድ መስፈርቶች ላይ በመመስረት, የስልት ኮድን ሳይነኩ ሁሉንም ነገር ማድረግ ይችላሉ ቲፕለር ህግ.
  • ከእነዚህ ክዋኔዎች ሆዳምነትን (ብቻ በመጠቀም) ማጠፍ ይችላሉ TakeBitOperation, አልኮል (ብቻ በመጠቀም የመጠጥ አፕኦፕሬሽን በቀጥታ ከጠርሙሱ) እና ሌሎች ብዙ የንግድ መስፈርቶችን ያሟሉ.

(ኦህ፣ ይህ አስቀድሞ የOCP መርህ ነው የሚመስለው፣ እና እኔ የዚህን ልጥፍ ሃላፊነት ጥሻለሁ)

እና በእርግጥ ጉዳቶቹ፡-

  • ተጨማሪ ዓይነቶችን መፍጠር አለብን.
  • ሰካራም ለመጀመሪያ ጊዜ ከሚጠጣው ከሁለት ሰአታት በኋላ ይጠጣል።

ፍቺ 2. የተዋሃደ ተለዋዋጭነት.

ፍቀዱልኝ ክቡራን! የመጠጫው ክፍልም አንድ ኃላፊነት አለበት - ይጠጣል! እና በአጠቃላይ "ኃላፊነት" የሚለው ቃል እጅግ በጣም ግልጽ ያልሆነ ጽንሰ-ሐሳብ ነው. አንድ ሰው ለሰው ልጅ እጣ ፈንታ ተጠያቂ ነው, እና አንድ ሰው በፖሊው ላይ የተገለበጠውን ፔንግዊን የማሳደግ ሃላፊነት አለበት.

የጠጪውን ሁለት አተገባበር እንመልከት። ከላይ የተጠቀሰው የመጀመሪያው, ሶስት ክፍሎች አሉት - ማፍሰስ, መጠጥ እና መክሰስ.

ሁለተኛው በ "ወደ ፊት እና ወደፊት ብቻ" ዘዴ የተፃፈ ሲሆን በስልቱ ውስጥ ያሉትን ሁሉንም አመክንዮዎች ይዟል ተግባር:

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

እነዚህ ሁለቱም ክፍሎች, ከውጭ ተመልካቾች እይታ አንጻር, በትክክል ተመሳሳይ ይመስላሉ እና "የመጠጥ" ሃላፊነት ይጋራሉ.

ግራ መጋባት!

ከዚያም መስመር ላይ ገብተን የ SRP ሌላ ፍቺን እናገኛለን - ነጠላ የለውጥ መርህ።

SCP እንዲህ ይላል "አንድ ሞጁል ለመለወጥ አንድ እና አንድ ምክንያት ብቻ አለው።". ማለትም “ኃላፊነት የለውጥ ምክንያት ነው” ማለት ነው።

(የመጀመሪያውን ፍቺ ያወጡት ሰዎች በዝንጀሮው ሰው የቴሌፓቲክ ችሎታ የሚተማመኑ ይመስላል)

አሁን ሁሉም ነገር ወደ ቦታው ይደርሳል. በተናጥል ፣ የማፍሰስ ፣ የመጠጣት እና የመክሰስ ሂደቶችን መለወጥ እንችላለን ፣ ግን በጠጪው ውስጥ ራሱ የአሠራር ሂደቶችን ቅደም ተከተል እና ስብጥር ብቻ መለወጥ እንችላለን ፣ ለምሳሌ ፣ ከመጠጣቱ በፊት መክሰስ በማንቀሳቀስ ወይም የቶስት ንባብን በመጨመር።

በ "ወደ ፊት እና ወደ ፊት ብቻ" አቀራረብ ሁሉም ነገር ሊለወጥ የሚችለው በስልቱ ውስጥ ብቻ ነው ተግባር. ይህ ሊነበብ የሚችል እና ውጤታማ ሊሆን የሚችለው ትንሽ አመክንዮ ሲኖር እና ብዙም የማይለዋወጥ ነው, ነገር ግን ብዙውን ጊዜ እያንዳንዱን 500 መስመር ወደ አስፈሪ ዘዴዎች ያበቃል, ሩሲያ ኔቶ እንድትቀላቀል ከሚያስፈልገው በላይ ከሆነ መግለጫዎች ጋር.

ፍቺ 3. የለውጦች አካባቢያዊነት.

ጠጪዎች ለምን በሌላ ሰው አፓርታማ ውስጥ እንደሚነቁ ወይም ሞባይል ስልካቸው የት እንዳለ አይረዱም። ዝርዝር ምዝግብ ማስታወሻን ለመጨመር ጊዜው አሁን ነው።

በማፍሰስ ሂደት መግባት እንጀምር፡-

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

ወደ ውስጥ በማስገባት PourOperation, ከኃላፊነት እና ከማሸግ አንፃር በጥበብ እንሰራ ነበር, አሁን ግን ከተለዋዋጭነት መርህ ጋር ግራ ተጋባን. ከቀዶ ጥገናው በተጨማሪ ሊለወጥ ይችላል, የምዝግብ ማስታወሻው ራሱ ሊለወጥ ይችላል. ለማፍሰስ ስራው መለያየት እና ልዩ ሎገር መፍጠር አለብዎት።

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

አስተዋይ አንባቢ ያንን ያስተውላል LogAfter, በፊት ይመዝገቡ и አንድ ስህተት እንዲሁም በተናጥል ሊለወጥ ይችላል ፣ እና ከቀደምት ደረጃዎች ጋር በማነፃፀር ፣ ሶስት ክፍሎችን ይፈጥራል ። PourLogger በፊት, PourLogger After и PourErrorLogger.

እና ለመጠጥ ሶስት ኦፕሬሽኖች እንዳሉ በማስታወስ, ዘጠኝ የሎግ ትምህርት ቤቶችን እናገኛለን. በውጤቱም, አጠቃላይ የመጠጥ ክበብ 14 (!!!) ክፍሎችን ያካትታል.

ሃይፐርቦላ? በጭንቅ! የዝንጀሮ ሰው መበስበስ ያለበት የእጅ ቦምብ "ማፍሰሻውን" በዲካንተር, በመስታወት, በማፍሰስ ኦፕሬተሮች, የውሃ አቅርቦት አገልግሎት, የሞለኪውሎች ግጭት አካላዊ ሞዴል, እና ለቀጣዩ ሩብ ጊዜ ጥገኞችን ያለምንም ችግር ለመፍታት ይሞክራል. ዓለም አቀፍ ተለዋዋጮች. እና እመኑኝ, እሱ አይቆምም.

ብዙዎች SRP ከሮዝ መንግስታት ተረት ናቸው ወደሚል መደምደሚያ የደረሱት እና ኑድል ለመጫወት ይሄዳሉ።

ስለ Srp ሦስተኛው ፍቺ መኖር መቼም ሳናውቅ፡-

“ነጠላ የኃላፊነት መርህ እንዲህ ይላል። ከለውጥ ጋር ተመሳሳይ የሆኑ ነገሮች በአንድ ቦታ መቀመጥ አለባቸው". ወይም "አንድ ላይ የሚለወጡ ነገሮች በአንድ ቦታ መቀመጥ አለባቸው"

ማለትም የአንድን ኦፕሬሽን ምዝግብ ማስታወሻ ከቀየርን በአንድ ቦታ መቀየር አለብን።

ይህ በጣም አስፈላጊ ነጥብ ነው - ከላይ ያሉት ሁሉም የ SRP ማብራሪያዎች በሚፈጩበት ጊዜ ዓይነቶችን መፍጨት አስፈላጊ ስለነበረ ፣ ማለትም በእቃው መጠን ላይ “የላይኛውን ገደብ” ገድበዋል ፣ እና አሁን እየተነጋገርን ያለነው ስለ "ዝቅተኛ ገደብ" ነው. በሌላ ቃል, SRP "በመጨፍለቅ ጊዜ መጨፍለቅ" ብቻ ሳይሆን ከመጠን በላይ ላለመውሰድም ጭምር - "የተጠላለፉ ነገሮችን አትፍጩ". ይህ በኦካም ምላጭ እና በዝንጀሮ ሰው መካከል ያለው ታላቅ ጦርነት ነው!

ነጠላ የኃላፊነት መርህ. የሚመስለው ቀላል አይደለም

አሁን ጠጪው የተሻለ ስሜት ሊሰማው ይገባል. የ IPourLogger ሎገርን በሶስት ክፍሎች መከፋፈል አያስፈልግም ከማለት በተጨማሪ ሁሉንም ሎገርን ወደ አንድ አይነት ማጣመር እንችላለን.

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

እና አራተኛውን አይነት ኦፕሬሽን ከጨመርን, ለእሱ መግቢያው ቀድሞውኑ ዝግጁ ነው. እና የኦፕሬሽኖቹ ኮድ እራሳቸው ንጹህ እና ከመሠረተ ልማት ጫጫታ የፀዱ ናቸው.

በዚህ ምክንያት የመጠጥ ችግርን ለመፍታት 5 ክፍሎች አሉን-

  • የማፍሰስ ተግባር
  • የመጠጥ አሠራር
  • የማጨናነቅ ተግባር
  • ሎገር
  • የጠጪ ፊት

እያንዳንዳቸው ለአንድ ተግባር ጥብቅ ተጠያቂ ናቸው እና አንድ ለውጥ ምክንያት አላቸው. ከለውጥ ጋር ተመሳሳይ የሆኑ ሁሉም ህጎች በአቅራቢያ ይገኛሉ።

የእውነተኛ ህይወት ምሳሌ

አንድ ጊዜ የb2b ደንበኛን በራስ ሰር ለመመዝገብ አገልግሎት ጽፈናል። እና ለ200 መስመሮች ተመሳሳይ ይዘት ያለው የ GOD ዘዴ ታየ።

  • ወደ 1C ይሂዱ እና መለያ ይፍጠሩ
  • በዚህ መለያ ወደ የክፍያ ሞጁል ይሂዱ እና እዚያ ይፍጠሩት።
  • እንደዚህ ያለ መለያ ያለው መለያ በዋናው አገልጋይ ላይ እንዳልተፈጠረ ያረጋግጡ
  • አዲስ መለያ ፍጠር
  • በክፍያ ሞጁል ውስጥ የምዝገባ ውጤቶችን እና የ 1c ቁጥርን ወደ የምዝገባ ውጤቶች አገልግሎት ይጨምሩ
  • ወደዚህ ሠንጠረዥ የመለያ መረጃ ያክሉ
  • በነጥብ አገልግሎት ውስጥ ለዚህ ደንበኛ የነጥብ ቁጥር ይፍጠሩ። የእርስዎን 1c መለያ ቁጥር ወደዚህ አገልግሎት ያስተላልፉ።

እና በዚህ ዝርዝር ውስጥ ከአስፈሪ ግንኙነት ጋር ወደ 10 የሚጠጉ ተጨማሪ የንግድ ስራዎች ነበሩ። ሁሉም ሰው ማለት ይቻላል የመለያው ነገር ያስፈልገዋል። ከጥሪዎቹ ግማሽ ውስጥ የነጥብ መታወቂያው እና የደንበኛ ስም ያስፈልጋል።

ከአንድ ሰአት ማሻሻያ በኋላ የመሠረተ ልማት ደንቦቹን እና አንዳንድ ከመለያ ጋር የመስራትን ልዩ ልዩ ዘዴዎች/ክፍሎች መለየት ችለናል። የእግዚአብሔር ዘዴ ቀላል አድርጎታል, ነገር ግን መፈታታት የማይፈልጉ 100 የኮድ መስመሮች ቀርተዋል.

ከጥቂት ቀናት በኋላ የዚህ "ቀላል ክብደት" ዘዴ ዋናው ነገር የንግድ ሥራ ስልተ ቀመር እንደሆነ ግልጽ ሆነ. እና የቴክኒካዊ ዝርዝሮች የመጀመሪያ መግለጫ በጣም የተወሳሰበ ነበር። እና SRP የሚጥሰው ይህንን ዘዴ ወደ ቁርጥራጮች ለመከፋፈል ሙከራ ነው, እና በተቃራኒው አይደለም.

ፎርማሊዝም.

ሰካራማችንን ብቻችንን የምንተውበት ጊዜ ነው። እንባዎን ያድርቁ - በእርግጠኝነት አንድ ቀን ወደ እሱ እንመለሳለን. አሁን ከዚህ ጽሑፍ እውቀቱን መደበኛ እናድርገው.

ፎርማሊዝም 1. የ SRP ፍቺ

  1. እያንዳንዳቸው ለአንድ ነገር ተጠያቂ እንዲሆኑ ንጥረ ነገሮቹን ይለያዩ.
  2. ኃላፊነት ማለት "ለመለወጥ ምክንያት" ማለት ነው. ያም ማለት እያንዳንዱ አካል ለለውጥ አንድ ምክንያት ብቻ አለው, ከንግድ ሎጂክ አንጻር.
  3. በንግድ ሥራ አመክንዮ ላይ ሊሆኑ የሚችሉ ለውጦች። አካባቢያዊ መሆን አለበት. በተመሳሳይ ጊዜ የሚለወጡ ንጥረ ነገሮች በአቅራቢያ መሆን አለባቸው።

ፎርማሊዝም 2. አስፈላጊ የራስ-ሙከራ መስፈርቶች.

SRP ን ለማሟላት በቂ መመዘኛዎችን አላየሁም። ግን አስፈላጊ ሁኔታዎች አሉ-

1) ይህ ክፍል / ዘዴ / ሞዱል / አገልግሎት ምን እንደሚሰራ እራስዎን ይጠይቁ. በቀላል ትርጉም መመለስ አለብህ። ( አመሰግናለሁ ብራይቶሪ )

ማብራሪያዎች

ሆኖም, አንዳንድ ጊዜ ቀላል ትርጉም ማግኘት በጣም አስቸጋሪ ነው

2) ስህተትን ማስተካከል ወይም አዲስ ባህሪ ማከል በትንሹ የፋይል/የክፍል ብዛት ላይ ተጽዕኖ ያሳድራል። በሐሳብ ደረጃ - አንድ.

ማብራሪያዎች

ሃላፊነት (ለአንድ ባህሪ ወይም ስህተት) በአንድ ፋይል/ክፍል ውስጥ የታሸገ ስለሆነ፣ የት እንደሚታይ እና ምን እንደሚስተካከል በትክክል ያውቃሉ። ለምሳሌ፡ የምዝግብ ማስታወሻ ስራዎችን ውጤት የመቀየር ባህሪ የምዝግብ ማስታወሻውን ብቻ መቀየር ያስፈልገዋል። በተቀረው ኮድ ውስጥ ማለፍ አያስፈልግም.

ሌላው ምሳሌ ከቀዳሚዎቹ ጋር ተመሳሳይ የሆነ አዲስ የዩአይ መቆጣጠሪያ ማከል ነው። ይህ 10 የተለያዩ አካላትን እና 15 የተለያዩ ለዋጮችን ለመጨመር የሚያስገድድ ከሆነ, ከመጠን በላይ እየሰሩት ይመስላል.

3) ብዙ ገንቢዎች በተለያዩ የፕሮጀክትዎ ገፅታዎች ላይ እየሰሩ ከሆነ፣ የውህደት ግጭት፣ ማለትም፣ ተመሳሳይ ፋይል/ክፍል በተመሳሳይ ጊዜ በብዙ ገንቢዎች የመቀየር እድሉ አነስተኛ ነው።

ማብራሪያዎች

አዲስ ቀዶ ጥገና “ከጠረጴዛው በታች ቮድካን አፍስሱ” ከሆነ ፣ በሎገር ፣ በመጠጣት እና በማፍሰስ ሥራ ላይ ተጽዕኖ ማሳደር ያስፈልግዎታል ፣ ከዚያ ኃላፊነቶቹ በትክክል የተከፋፈሉ ይመስላል። በእርግጥ ይህ ሁልጊዜ የሚቻል አይደለም, ነገር ግን ይህን አሃዝ ለመቀነስ መሞከር አለብን.

4) ስለ ንግድ ሥራ አመክንዮ (ከገንቢ ወይም ሥራ አስኪያጅ) ግልጽ የሆነ ጥያቄ ሲጠየቁ ወደ አንድ ክፍል / ፋይል ገብተው መረጃን ከዚያ ብቻ ይቀበላሉ.

ማብራሪያዎች

ባህሪያት፣ህጎች ወይም ስልተ ቀመሮች የታመቁ፣እያንዳንዳቸው በአንድ ቦታ ነው የተፃፉት፣እና በኮዱ ቦታ ሁሉ በባንዲራ አልተበተኑም።

5) ስያሜው ግልጽ ነው.

ማብራሪያዎች

የእኛ ክፍል ወይም ዘዴ ለአንድ ነገር ተጠያቂ ነው, እና ኃላፊነቱ በስሙ ውስጥ ይንጸባረቃል

AllManagersManagerService - ምናልባት የእግዚአብሔር ክፍል ነው።
የአካባቢ ክፍያ - ምናልባት ላይሆን ይችላል።

ፎርማሊዝም 3. ኦካም-የመጀመሪያው የእድገት ዘዴ.

በንድፍ መጀመሪያ ላይ የዝንጀሮው ሰው አያውቅም እና ሁሉም የችግሩ ጥቃቅን ነገሮች እንደተፈቱ አይሰማቸውም እና ስህተት ሊሠሩ ይችላሉ. በተለያዩ መንገዶች ስህተቶችን ማድረግ ይችላሉ-

  • የተለያዩ ኃላፊነቶችን በማዋሃድ ዕቃዎችን በጣም ትልቅ ያድርጉት
  • አንድን ኃላፊነት ወደ ብዙ የተለያዩ ዓይነቶች በመከፋፈል እንደገና ማቋቋም
  • የኃላፊነት ድንበሮችን በትክክል ይግለጹ

ደንቡን ማስታወስ አስፈላጊ ነው: "ትልቅ ስህተት መሥራቱ የተሻለ ነው," ወይም "እርግጠኛ ካልሆኑ, አይከፋፍሉት." ለምሳሌ፣ ክፍልዎ ሁለት ኃላፊነቶችን ከያዘ፣ አሁንም ለመረዳት የሚቻል ነው እና በደንበኛው ኮድ ላይ በትንሹ ለውጦች ለሁለት ሊከፈል ይችላል። አውድ በበርካታ ፋይሎች ላይ በመሰራጨቱ እና በደንበኛው ኮድ ውስጥ አስፈላጊ ጥገኞች ባለመኖሩ ምክንያት ብርጭቆን ከመስታወት መስታወት መሰብሰብ ብዙውን ጊዜ በጣም ከባድ ነው።

አንድ ቀን ለመጥራት ጊዜው አሁን ነው

የ SRP ወሰን በOOP እና SOLID ብቻ የተገደበ አይደለም። እሱ ዘዴዎችን ፣ ተግባሮችን ፣ ክፍሎች ፣ ሞጁሎችን ፣ ማይክሮ አገልግሎቶችን እና አገልግሎቶችን ይመለከታል። ለሁለቱም "figax-figax-and-prod" እና "ሮኬት-ሳይንስ" እድገትን ይመለከታል, ይህም ዓለምን በሁሉም ቦታ ትንሽ የተሻለ ያደርገዋል. ስለእሱ ካሰቡ, ይህ ማለት ይቻላል የሁሉም ምህንድስና መሰረታዊ መርህ ነው. የሜካኒካል ምህንድስና፣ የቁጥጥር ስርዓቶች እና ሁሉም ውስብስብ ስርዓቶች የተገነቡት ከክፍሎቹ ነው፣ እና “መበታተን” ዲዛይነሮችን የመተጣጠፍ ችሎታን ያሳጣቸዋል፣ “ከመጠን በላይ መቆራረጥ” ዲዛይነሮችን ቅልጥፍና ያሳጣቸዋል፣ እና የተሳሳቱ ድንበሮች ምክንያታዊ እና የአእምሮ ሰላም ያሳጣቸዋል።

ነጠላ የኃላፊነት መርህ. የሚመስለው ቀላል አይደለም

SRP በተፈጥሮ ያልተፈለሰፈ እና የትክክለኛ ሳይንስ አካል አይደለም. ከሥነ ህይወታዊ እና ስነ ልቦናዊ ውሱንነቶች ይወጣል።የዝንጀሮ-ሰውን አንጎል በመጠቀም ውስብስብ ስርዓቶችን ለመቆጣጠር እና ለማዳበር ብቻ ነው። ስርዓትን እንዴት መበስበስ እንዳለብን ይነግረናል. የመጀመሪያው አጻጻፍ ፍትሃዊ የሆነ የቴሌፓቲ መጠን ያስፈልገዋል፣ ነገር ግን ይህ መጣጥፍ አንዳንድ የጭስ ማውጫውን ያጸዳል ብዬ ተስፋ አደርጋለሁ።

ምንጭ: hab.com

አስተያየት ያክሉ