තනි වගකීම් මූලධර්මය. පෙනෙන තරම් සරල නැත

තනි වගකීම් මූලධර්මය. පෙනෙන තරම් සරල නැත තනි වගකීම් මූලධර්මය, තනි වගකීමේ මූලධර්මය ලෙසද හැඳින්වේ,
ඒකාකාර විචල්‍යතාවයේ මූලධර්මය - තේරුම් ගැනීමට අතිශයින්ම ලිස්සන සුළු පුද්ගලයෙක් සහ ක්‍රමලේඛක සම්මුඛ සාකච්ඡාවකදී එවැනි ස්නායු ප්‍රශ්නයක්.

මෙම මූලධර්මය සමඟ මගේ පළමු බැරෑරුම් දැන ගැනීම සිදු වූයේ පළමු වසර ආරම්භයේදී, තරුණ හා කොළ පැහැති අය කීටයන්ගෙන් සිසුන් බවට පත් කිරීම සඳහා වනාන්තරයට ගෙන ගිය විට - සැබෑ සිසුන්.

වනාන්තරයේදී, අපි පුද්ගලයින් 8-9 දෙනෙකුගෙන් යුත් කණ්ඩායම් වලට බෙදා තරඟයක් පැවැත්වූවා - කුමන කණ්ඩායම වේගයෙන් වොඩ්කා බෝතලයක් පානය කරන්නේද, කණ්ඩායමේ පළමු පුද්ගලයා වොඩ්කා වීදුරුවකට වත් කළහොත් දෙවැන්නා එය පානය කරයි, තුන්වැන්නාට කෑම වේලක් ඇත. එහි ක්රියාකාරිත්වය අවසන් කර ඇති ඒකකය සමූහයේ පෝලිමේ අවසානය දක්වා ගමන් කරයි.

පෝලිමේ ප්‍රමාණය තුනේ ගුණාකාර වූ අවස්ථාව SRP හොඳින් ක්‍රියාත්මක කිරීමකි.

අර්ථ දැක්වීම 1. තනි වගකීම.

තනි වගකීම් මූලධර්මයේ (SRP) නිල නිර්වචනයේ සඳහන් වන්නේ සෑම ආයතනයකටම තමන්ගේම වගකීමක් සහ පැවැත්මට හේතුවක් ඇති අතර එයට ඇත්තේ එක් වගකීමක් පමණක් බවයි.

"බොන්න" වස්තුව සලකා බලන්න (ටිප්ලර්).
SRP මූලධර්මය ක්‍රියාත්මක කිරීම සඳහා, අපි වගකීම් තුනකට බෙදන්නෙමු:

  • එකක් වත් කරයි (PourOperation)
  • එක් බීම (බීම ඔපරේෂන්)
  • කෙනෙකුට කෑමක් තිබේ (TakeBiteOperation)

ක්‍රියාවලියේ එක් එක් සහභාගිවන්නන් ක්‍රියාවලියේ එක් අංගයක් සඳහා වගකිව යුතුය, එනම් එක් පරමාණුක වගකීමක් ඇත - බීම, වත් කිරීම හෝ සුලු කෑම.

පානීය කුහරය, මෙම මෙහෙයුම් සඳහා මුහුණත වේ:

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

තනි වගකීම් මූලධර්මය. පෙනෙන තරම් සරල නැත

ඇයි?

මානව ක්‍රමලේඛකයා වානර මිනිසා සඳහා කේතයක් ලියන අතර, වානර මිනිසා නොසැලකිලිමත්, මෝඩ සහ සෑම විටම ඉක්මන් වේ. ඔහුට එකවර පද 3 - 7 ක් පමණ අල්ලාගෙන තේරුම් ගත හැකිය.
බේබද්දෙකු සම්බන්ධයෙන්, මෙම පද තුනක් තිබේ. හැබැයි එක කොලේකින් කෝඩ් එක ලිව්වොත් ඒකෙ තියෙන්නෙ අතේ කණ්නාඩි, රණ්ඩු, දේශපාලනය ගැන ඉවරයක් නැති තර්ක. තවද මේ සියල්ල එක් ක්රමයක ශරීරය තුළ වනු ඇත. ඔබ එවැනි කේතයක් ඔබේ භාවිතයේදී දැක ඇති බව මට විශ්වාසයි. මනෝභාවය සඳහා වඩාත්ම මානුෂීය පරීක්ෂණය නොවේ.

අනෙක් අතට, වානර මිනිසා නිර්මාණය කර ඇත්තේ ඔහුගේ හිසෙහි සැබෑ ලෝකයේ වස්තූන් අනුකරණය කිරීමට ය. ඔහුගේ පරිකල්පනය තුළ, ඔහු ඒවා එකට තල්ලු කළ හැකි අතර, ඔවුන්ගෙන් නව වස්තූන් එකලස් කර, එම ආකාරයෙන්ම ඒවා විසුරුවා හැරිය හැකිය. පැරණි මාදිලියේ මෝටර් රථයක් සිතන්න. ඔබේ පරිකල්පනය තුළ, ඔබට දොර විවෘත කළ හැකිය, දොර ටිම් එක ගලවා එහි කවුළු සෝපාන යාන්ත්‍රණයන් දැකිය හැකිය, එහි ඇතුළත ගියර් ඇත. නමුත් ඔබට එක "ලැයිස්තුගත කිරීමකින්" යන්ත්‍රයේ සියලුම සංරචක එකවර දැකිය නොහැක. අඩුම තරමින් "වඳුරු මිනිසා" ටවත් බැහැ.

එබැවින්, මානව ක්‍රමලේඛකයින් සංකීර්ණ යාන්ත්‍රණ අඩු සංකීර්ණ සහ ක්‍රියාකාරී මූලද්‍රව්‍ය සමූහයක් බවට වියෝජනය කරයි. කෙසේ වෙතත්, එය විවිධ ආකාරවලින් දිරාපත් විය හැකිය: බොහෝ පැරණි මෝටර් රථවල, වායු නාලය දොරට ඇතුළු වන අතර, නවීන මෝටර් රථවල, අගුළු ඉලෙක්ට්රොනික උපකරණවල අසමත් වීම එන්ජිම ආරම්භ කිරීම වළක්වයි, එය අලුත්වැඩියා කිරීමේදී ගැටළුවක් විය හැකිය.

දැන්, SRP යනු දිරාපත් වන ආකාරය, එනම් බෙදුම් රේඛාව අඳින්නේ කෙසේද යන්න පැහැදිලි කරන මූලධර්මයකි.

"වගකීම්" බෙදීමේ මූලධර්මය අනුව, එනම්, ඇතැම් වස්තූන්ගේ කාර්යයන් අනුව දිරාපත් වීමට අවශ්ය බව ඔහු පවසයි.

තනි වගකීම් මූලධර්මය. පෙනෙන තරම් සරල නැත

අපි නැවත බීමට යමු සහ දිරාපත්වීමේදී වඳුරු මිනිසාට ලැබෙන වාසි:

  • සෑම මට්ටමකින්ම කේතය අතිශයින්ම පැහැදිලි වී ඇත
  • කේතය ක්‍රමලේඛකයින් කිහිප දෙනෙකුට එකවර ලිවිය හැකිය (එක් එක් වෙනම අංගයක් ලියයි)
  • ස්වයංක්‍රීය පරීක්ෂාව සරල කර ඇත - මූලද්‍රව්‍යය සරල වන තරමට එය පරීක්ෂා කිරීම පහසුය
  • කේතයේ සංයුතිය දිස්වේ - ඔබට ප්රතිස්ථාපනය කළ හැකිය බීම ඔපරේෂන් බේබද්දෙක් මේසය යටට දියර වත් කරන මෙහෙයුමකට. නැතහොත් ඔබ වයින් සහ ජලය හෝ වොඩ්කා සහ බියර් මිශ්‍ර කරන මෙහෙයුමක් සමඟ වත් කිරීමේ මෙහෙයුම ප්‍රතිස්ථාපනය කරන්න. ව්‍යාපාර අවශ්‍යතා මත පදනම්ව, ඔබට ක්‍රම කේතය ස්පර්ශ නොකර සියල්ල කළ හැකිය Tippler.Act.
  • මෙම මෙහෙයුම් වලින් ඔබට කෑදරකම නැමිය හැකිය (භාවිතයෙන් පමණි 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 පවසන්නේ "මොඩියුලයකට වෙනස් වීමට ඇත්තේ එකම එක හේතුවකි". එනම්, "වගකීම වෙනස් වීමට හේතුවක්" යන්නයි.

(මුල් නිර්වචනය ඉදිරිපත් කළ කොල්ලන් වානර මිනිසාගේ ටෙලිපති හැකියාවන් ගැන විශ්වාසයෙන් සිටි බව පෙනේ)

දැන් සියල්ල නිසි තැනට වැටේ. වෙනමම, අපට වත් කිරීම, පානය කිරීම සහ සුලු කෑම ක්‍රියා පටිපාටි වෙනස් කළ හැකිය, නමුත් පානය කරන්නා තුළම අපට වෙනස් කළ හැක්කේ මෙහෙයුම් අනුපිළිවෙල සහ සංයුතිය පමණි, උදාහරණයක් ලෙස, පානය කිරීමට පෙර සුලු කෑම ගෙනයාමෙන් හෝ ටෝස්ට් කියවීම එකතු කිරීමෙන්.

"Forward and Only Forward" ප්රවේශය තුළ, වෙනස් කළ හැකි සියල්ල වෙනස් වන්නේ ක්රමය තුළ පමණි පනත. මෙය අඩු තර්කයක් ඇති විට සහ එය කලාතුරකින් වෙනස් වන විට කියවිය හැකි සහ ඵලදායී විය හැක, නමුත් බොහෝ විට එය අවසන් වන්නේ රේඛා 500 බැගින් වූ භයානක ක්‍රම වලින්, රුසියාවට NATO හා සම්බන්ධ වීමට අවශ්‍ය ප්‍රමාණයට වඩා if-ප්‍රකාශයන් සමඟිනි.

අර්ථ දැක්වීම 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, ලොග් වෙන්න කලින් и OnError තනි තනිව ද වෙනස් කළ හැකි අතර, පෙර පියවර සමඟ සැසඳීමෙන්, පන්ති තුනක් නිර්මාණය කරනු ඇත: PourLoggerBefore, PourLoggerAfter и 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) දෝෂයක් නිවැරදි කිරීම හෝ නව විශේෂාංගයක් එක් කිරීම අවම ගොනු/පංති ගණනකට බලපායි. ඉතා මැනවින් - එකක්.

පැහැදිලි කිරීම්

වගකීම (විශේෂාංගයක් හෝ දෝෂයක් සඳහා) එක් ගොනුවක්/පංතියක් තුළ ආවරණය කර ඇති බැවින්, ඔබ බැලිය යුත්තේ කොතැනද සහ කුමක් සංස්කරණය කළ යුතුද යන්න හරියටම දනී. උදාහරණයක් ලෙස: ලොග් කිරීමේ මෙහෙයුම්වල ප්‍රතිදානය වෙනස් කිරීමේ විශේෂාංගය සඳහා ලොගර් පමණක් වෙනස් කිරීම අවශ්‍ය වේ. ඉතිරි කේතය හරහා ධාවනය කිරීම අවශ්ය නොවේ.

තවත් උදාහරණයක් වන්නේ පෙර පැවති ඒවාට සමාන නව UI පාලනයක් එකතු කිරීමයි. මෙය ඔබට විවිධ ආයතන 10ක් සහ විවිධ පරිවර්තක 15ක් එක් කිරීමට බල කරන්නේ නම්, ඔබ එය ඉක්මවා යන බවක් පෙනේ.

3) සංවර්ධකයින් කිහිප දෙනෙකු ඔබගේ ව්‍යාපෘතියේ විවිධ විශේෂාංග මත වැඩ කරන්නේ නම්, ඒකාබද්ධ ගැටුමක සම්භාවිතාව, එනම් එකම ගොනුව/පංතිය එකවර සංවර්ධකයින් කිහිප දෙනෙකු විසින් වෙනස් කිරීමට ඇති සම්භාවිතාව අවම වේ.

පැහැදිලි කිරීම්

“මේස යට වොඩ්කා වත් කරන්න” නව මෙහෙයුමක් එකතු කරන විට, ඔබට ලොගර්ට බලපෑම් කිරීමට අවශ්‍ය නම්, බීම සහ වත් කිරීමේ ක්‍රියාකාරිත්වය, එවිට වගකීම් වංක ලෙස බෙදී ඇති බවක් පෙනේ. ඇත්ත වශයෙන්ම, මෙය සැමවිටම කළ නොහැකි නමුත්, අපි මෙම අගය අඩු කිරීමට උත්සාහ කළ යුතුය.

4) ව්‍යාපාර තර්කනය (සංවර්ධකයෙකු හෝ කළමනාකරුවෙකුගෙන්) පිළිබඳ පැහැදිලි කිරීමේ ප්‍රශ්නයක් අසන විට, ඔබ දැඩි ලෙස එක් පන්තියකට/ගොනුවකට ගොස් තොරතුරු ලබා ගන්නේ එතැනින් පමණි.

පැහැදිලි කිරීම්

විශේෂාංග, රීති හෝ ඇල්ගොරිතම සංයුක්තව ලියා ඇත, එක් එක් එක් ස්ථානයක, සහ කේත අවකාශය පුරා කොඩි සමඟ විසිරී නැත.

5) නම් කිරීම පැහැදිලිය.

පැහැදිලි කිරීම්

අපගේ පන්තිය හෝ ක්‍රමය එක් දෙයකට වගකිව යුතු අතර වගකීම එහි නාමයෙන් පිළිබිඹු වේ

AllManagersManagerService - බොහෝ දුරට දෙවියන්ගේ පන්තියකි
දේශීය ගෙවීම් - බොහෝ විට නැත

විධිමත්භාවය 3. Occam-පළමු සංවර්ධන ක්‍රමවේදය.

නිර්මාණයේ ආරම්භයේ දී, වඳුරු මිනිසා නොදන්නා අතර ගැටලුව විසඳා ගැනීමේ සියලු සියුම් බව දැනෙන්නේ නැති අතර වැරැද්දක් කළ හැකිය. ඔබට විවිධ ආකාරවලින් වැරදි සිදු කළ හැකිය:

  • විවිධ වගකීම් ඒකාබද්ධ කිරීමෙන් වස්තු විශාල කරන්න
  • තනි වගකීමක් විවිධ වර්ගවලට බෙදීමෙන් නැවත සකස් කිරීම
  • වගකීමේ සීමාවන් වැරදි ලෙස නිර්වචනය කරන්න

රීතිය මතක තබා ගැනීම වැදගත්ය: "විශාල වැරැද්දක් කිරීම වඩා හොඳය" හෝ "ඔබට විශ්වාස නැත්නම්, එය බෙදන්න එපා." උදාහරණයක් ලෙස, ඔබේ පන්තියේ වගකීම් දෙකක් තිබේ නම්, එය තවමත් තේරුම් ගත හැකි අතර සේවාදායක කේතයට අවම වෙනස්කම් සහිතව දෙකකට බෙදිය හැකිය. ලිපිගොනු කිහිපයක් හරහා සන්දර්භය පැතිරීම සහ සේවාදායක කේතයේ අවශ්‍ය පරායත්තතා නොමැතිකම හේතුවෙන් වීදුරු කැබලිවලින් වීදුරුවක් එකලස් කිරීම සාමාන්‍යයෙන් වඩාත් අපහසු වේ.

එය දිනයක් ලෙස හැඳින්වීමට කාලයයි

SRP හි විෂය පථය OOP සහ SOLID වලට සීමා නොවේ. එය ක්‍රම, ක්‍රියාකාරකම්, පන්ති, මොඩියුල, ක්ෂුද්‍ර සේවා සහ සේවා සඳහා අදාළ වේ. එය "figax-figax-and-prod" සහ "rocket-science" යන දෙකටම අදාළ වන අතර, සෑම තැනකම ලෝකය ටිකක් යහපත් කරයි. ඔබ ඒ ගැන සිතන්නේ නම්, මෙය සියලුම ඉංජිනේරු විද්‍යාවේ මූලික මූලධර්මය වේ. යාන්ත්‍රික ඉංජිනේරු විද්‍යාව, පාලන පද්ධති සහ ඇත්ත වශයෙන්ම සියලුම සංකීර්ණ පද්ධති සංරචක වලින් ගොඩනගා ඇති අතර “යටි ඛණ්ඩනය” නිර්මාණකරුවන්ට නම්‍යශීලී බව අහිමි කරයි, “අධික ඛණ්ඩනය” නිර්මාණකරුවන්ගේ කාර්යක්ෂමතාව අහිමි කරයි, වැරදි සීමාවන් නිසා ඔවුන්ට හේතුව සහ මනසේ සාමය අහිමි වේ.

තනි වගකීම් මූලධර්මය. පෙනෙන තරම් සරල නැත

SRP ස්වභාව ධර්මය විසින් සොයා නොගත් අතර එය නිශ්චිත විද්යාවේ කොටසක් නොවේ. එය අපගේ ජීව විද්‍යාත්මක සහ මනෝවිද්‍යාත්මක සීමාවන්ගෙන් මිදෙයි.එය වානර මිනිසාගේ මොළය භාවිතයෙන් සංකීර්ණ පද්ධති පාලනය කිරීමට සහ සංවර්ධනය කිරීමට මාර්ගයක් පමණි. පද්ධතියක් වියෝජනය කරන්නේ කෙසේදැයි ඔහු අපට කියයි. මුල් සූත්‍රගත කිරීම සඳහා සාධාරණ ටෙලිපති ප්‍රමාණයක් අවශ්‍ය විය, නමුත් මෙම ලිපිය දුම් තිරයෙන් සමහරක් ඉවත් කරනු ඇතැයි මම බලාපොරොත්තු වෙමි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න