Single responsibility áá°á¡á single responsibility áá±á«áºáá²á· áááá¬áá
áá°áá®áá±á¬ááºážááœá²ááœá²ááŸá¯ááááá¬á (áá±á«áº) - áááá¯ááááºáá¬á¡ááºáá¬áá»á°ážáá
áºáá¯ááœááºáá¬ážáááºáááºá¡ááœááºáá»á±á¬áá±á¬áá±á¬ááºá»á¬ážááŸáá·áºááá¯áá²á·ááá¯á·áá±á¬á
áááºáá»ááºá
áá¬áá±ážááœááºážáá
áºáá¯ááŒá
áºáááºá
áááºáááºááœááºááœááºáá²á· á áááºážá áááºážá áá¯á áᯠáá±á¬ááºáá±ážááœá±ááᯠáá¬ážáá±á¬ááºážáá²á áá»á±á¬ááºážáá¬ážá¡á á áºááœá± ááŒá áºá¡á±á¬áẠáá±á¬áá²áá±á«áºááœá¬ážáá²á·á¡áá« áá®áá°ááᯠáá»áœááºááá²á· ááááá¯á¶áž á¡áá±ážá¡ááẠáááá»áœááºážááŸá¯á áááááŸá áºá¡á ááŸá¬ ááŒá áºáá²á·áá¬áá«á
áá±á¬áá²ááŸá¬ áá° á-á áá±á¬ááºááᯠá¡á¯ááºá á¯ááœá± ááœá²ááŒá®áž ááŒáá¯ááºááœá²áá áºáᯠáá¯ááºáááº- áááºá¡á¯ááºá á¯á áá±á¬á·ááºáᬠáá¯áááºážááᯠá¡ááŒááºáá¯á¶áž áá±á¬ááºááá²á á¡á¯ááºá á¯áá²á ááááá°á áá±á¬á·ááºáᬠáá áºááœááºáá² áá±á¬ááºážááá¯ááºá áá¯áááá áá±á¬ááºááá¯ááºá ááááá áá¯á¶á·áá áºáá¯ááŸááááºá áááºážááá¯ááºáááºážáá±á¬ááºáᬠááŒá®ážáá¯á¶ážááœá¬ážáá±á¬ áá°áá áºááẠá¡ááœá²á·á áááºážá á®ááŒááºážá á¡áá¯á¶ážááá¯á· ááœá±á·áá»á¬ážáááºá
áááºážá á®ááá·áº á¡ááœááºá¡á á¬ážááẠáá¯á¶ážáá»áá¯ážá á¡ááá¯ážááááºážááŒá áºááá·áº ááá á¹á ááŸá¬ SRP á áá±á¬ááºážááœááºáá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááŒá áºáááºá
á¡áááá¹áá¬ááºááœáá·áºááá¯áá»áẠ1. áá áºáá¯áááºáž áá¬áááºáá°ááŸá¯á
áá áºáá¯áááºážáá±á¬áá¬áááºááŸáááŸá¯áá°ááá¯ááºááœáá·áº (SRP) áááá¬ážáááºá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááœáẠá¡ááœá²á·á¡á ááºážáá áºáá¯á á®ááœáẠáááºážáááá¯ááºááá¯ááºáá¬áááºááŸáá·áº áááºááŸáááŸá¯á¡ááœáẠá¡ááŒá±á¬ááºážááŒáá»ááºááŸáááŒá®áž áááºážááœááºáá¬áááºáá áºáá¯áááºážáá¬ááŸáááŒá±á¬ááºáž áá±á¬áºááŒáá¬ážáááºá
âá¡áááºáá±á¬ááºáá°â (Drinker) ááᯠáááºááŒááºáá«áá
áœááºááá¬).
SRP áááá¬áááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠáá¬áááºáá»á¬ážááᯠáá¯á¶ážáá»áá¯ážááœá²áá¬ážáááºá
- áá áºáá¯á¶áž (PourOperation)
- áá áºááœáẠ(DrinkUpOperation)
- áá áºáá±á¬ááºá ááá±á ᬠ(TakeBite áááºáááºááŸá¯)
áá¯ááºáááºážá ááºááœáẠáá«áááºáá°ááá¯ááºážááẠáá¯ááºáááºážá ááºá á¡á áááºá¡ááá¯ááºážáá áºáá¯á¡ááœáẠáá¬áááºááŸááááºá ááá¯ááá¯áááºááŸá¬ á¡ááºáááºáá¬áááºáá áºáá¯ááŸáááẠ- áá±á¬ááºáááºá áá±á¬ááºážááŒááºáž ááá¯á·ááá¯áẠááá±á á¬á¡ááœááºááŒá áºáááºá
áá±á¬ááºááœááºážááẠá€áá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážá¡ááœáẠáá»ááºááŸá¬á á¬ááŒá áºáááºá
Ñlass Tippler {
//...
void Act(){
_pourOperation.Do() // МалОÑÑ
_drinkUpOperation.Do() // вÑпОÑÑ
_takeBiteOperation.Do() // закÑÑОÑÑ
}
}
á¡áááºááŒá±á¬áá·áºáááºáž
áá°áá¬ážáááá¯ááááºáá¬ááẠáá»á±á¬ááºáá¶á¡ááœáẠáá¯ááºááá¯áá±ážáá±ážáááºá áá»á±á¬ááºáá¶ááẠááá¯áá
áá¯ááºáá²á ááá¯ááºáá²ááŒá®áž á¡ááŒá²á¡áá»ááºááá¯áá±áááºá áá
áºááŒáááºáááºážááœáẠáá±á«áá¬á á-á áá¯á¶ážááá·áºááᯠááá¯ááºá
áœá²á áá¬ážáááºááá¯ááºáááºá
á¡áááºáá±á¬ááºáá°á¡ááœáẠá€áá±á«áá¬ááá¯á¶ážáá»áá¯ážááŸááááºá áá«áá±áá²á· á
á¬ááœááºáá
áºááœááºáá²á· áá¯ááºáá±ážááá¯ááºááẠáááºááœá±á áá»ááºááŸááºááœá±á áááºááœá²ááœá±á ááá¯ááºáá¶áá±ážáá²á· áááºáááºáá²á· á¡áá¯á¶ážáááŸá ááŒááºážáá¯á¶ááŸá¯ááœá± áá«áá±áááá·áºáááºá á€á¡áá¬á¡á¬ážáá¯á¶ážááẠáá
áºáá¯áááºážáá±á¬áááºážáááºážá ááá¹áá¬ááá¯ááºááœáẠááŒá
áºáááá·áºáááºá áááºážáá²á·á¡áá±á·á¡áá»áá·áºááŸá¬ áá®ááá¯áá¯ááºááœá±ááᯠááœá±á·áá°ážáᬠáá±áá»á¬áá«áááºá á
áááºááá¬á¡ááœáẠáá°áá¬ážáááºáá±á¬ á
ááºážáááºááŸá¯ááá¯ááºáá«á
á¡ááŒá¬ážáá áºáááºááœááºá áá»á±á¬ááºáá¶ááẠáá°ááŠážáá±á«ááºážááŸá áááá·áºááá¹áá¬ááŸá á¡áá¬ááá¹áá¯áá»á¬ážááᯠá¡áá¯áá°ááẠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá áá°á á áááºáá°ážáá²ááœááºá áá°ááẠáááºážááá¯á·ááᯠá¡áá°ááᜠááœááºážáá¯ááºááá¯ááºááŒá®áž áááºážááá¯á·á០á¡áá¬ááá¹áá¯á¡áá áºáá»á¬ážááᯠá á¯á ááºážáᬠáá°áá®áá±á¬áááºážáááºážááŒáá·áº ááŒá¯ááºááá¯ááºáááºá áá±á¬áºáááºáá±á¬ááºážáá¬ážáá áºá á®ážááᯠááŒááºáá±á¬ááºááŒáá·áºáá«á áááºážáá²á·á áááºáá°ážáá²ááŸá¬ áá¶áá«ážááá¯ááœáá·áºááá¯ááºáááºá áá¶áá«ážááœááºááᯠáááºá¡á°ááŒá¯ááºááŒá®áž á¡ááœááºážááá¯ááºážááŸá¬ áá®áá¬ááœá±ááŸáááá·áº ááŒáááºážáá±á«ááºáá¬ááºááŸá±áá¬ážááá¹ááá¬ážááœá±ááᯠááœá±á·ááá¯ááºáááºá ááá¯á·áá±á¬áº "á á¬áááºáž" áá áºáá¯ááœááºá á ááºáá¡á áááºá¡ááá¯ááºážá¡á¬ážáá¯á¶ážááᯠáá áºáá»áááºáááºážááœáẠáááºáááŒááºááá¯ááºáá«á á¡áááºážáá¯á¶ážáá±á¬á· "áá»á±á¬ááºáá±á¬ááº" á ááá¯ááºááá¯ááºáá°ážá
ááá¯á·ááŒá±á¬áá·áºá áá°áá¬ážáááá¯ááááºáá¬áá»á¬ážááẠááŸá¯ááºááœá±ážáá±á¬ ááá¹ááá¬ážáá»á¬ážááᯠááŸá¯ááºááœá±ážááŒá®áž á¡áá¯ááºááá¯ááºáá±á¬ ááŒááºá ááºáá»á¬ážá¡ááŒá ẠááŒáá¯ááœá²á á±áááºá ááá¯á·áá±á¬áºá áááºážááᯠááá°áá®áá±á¬áááºážáááºážáá»á¬ážááŒáá·áº ááŒáá¯ááœá²áá»ááºá á®ážá á±áááº- áá¬ážáá±á¬ááºážáá»á¬ážá áœá¬ááœáẠáá±ááŒáœááºááẠáá¶áá«ážáá±á«ááºááá¯á·áá±á¬ááºááœá¬ážááŒá®áž áá±ááºáá®áá¬ážáá»á¬ážááœáẠáá±á¬á·áááºáá¬ážáá±á¬ á¡á®áááºáááœááºážáá áºáá á¹á ááºážáá»á¬áž áá»áá¯á·ááœááºážááŸá¯ááẠá¡ááºáá»ááºá áááºááŒááºážá០áá¬ážáá®ážááá¯ááºááŒá®ážá ááŒá¯ááŒááºáá±á ááºá¡ááœááºáž ááŒá¿áá¬ááŒá áºá á±ááá¯ááºáááºá
á¡áá¯áá±á¬á· SRP ááẠá ááºážáá»á¥áºážááᯠáááºáá²á·ááá¯á· ááœá²ááááºááᯠááŸááºážááŒááá·áº áááá¬ááá áºáá¯ááŒá áºáááºá.
á¡áá»áá¯á·áá±á¬ á¡áá¬ááá¹áá¯áá»á¬ážá áá¬áááºá¡á ááœá²áá±ááŒááºáž áááá¬áá¡á ááŒáá¯ááœá²ááẠááá¯á¡ááºáááºáᯠáááºážá ááá¯áááºá
áá»á±á¬ááºááœá± ááœá±ážááŒá±á·áá»ááºá á®ážáá»áááºááŸá¬ áááŸááá²á· á¡áá»áá¯ážáá»á±ážáá°ážááœá±áá²á· á¡áááºáá±á¬ááºááŒáá¡á±á¬ááºá
- áá¯ááºááẠá¡ááá·áºááá¯ááºážááœáẠá¡ááœááºááŸááºážáááºážáá¬áááºá
- áá¯ááºááᯠáááá¯ááááºáá¬áá»á¬ážá áœá¬á áá áºááŒáá¯ááºááẠáá±ážáá¬ážááá¯ááºááẠ(áá áºáá¯á á®ááẠáá®ážááŒá¬ážááŒááºá ááºáá áºáᯠáá±ážáá¬ážáááº)
- á¡ááá¯á¡áá»á±á¬ááºá ááºážáááºááŒááºážááẠááá¯ážááŸááºážááẠ- ááŒááºá ááºááᯠááá¯ááá¯ááá¯ážááŸááºážáá±á á ááºážáááºááẠááá¯ááá¯ááœááºáá°áá±ááŒá áºáááºá
- áá¯ááºáááœá²á·á ááºážááŸá¯áá¯á¶áá±á«áºááẠ- áááºá¡á á¬ážááá¯ážááá¯ááºáááºá DrinkUpOperation á¡áááºáá±á¬ááºáá°ááẠá á¬ážááœá²á¡á±á¬ááºá á¡áááºáá±á¬ááºážááá·áº ááœá²á áááºááŸá¯áá áºáá¯á ááá¯á·ááá¯áẠááá¯ááºááŸáá·áºáá± ááá¯á·ááá¯áẠáá±á¬á·ááºáá¬ááŸáá·áº áá®áá¬ááá¯á·ááᯠáá±á¬á ááºáá¬ážááá·áº ááœá²á áááºááŸá¯ááŒáá·áº áá±á¬ááºážááŒááºážáá¯ááºáááºážááᯠá¡á á¬ážááá¯ážáá«á áá¯ááºáááºážááá¯á¡ááºáá»ááºáá»á¬ážáá±á«áº áá°áááºá áááºážáááºážáá¯ááºááᯠááááá² á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºááá¯ááºáááºá Tippler.Act.
- á€áá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážá០ááẠglutton ááá¯áá±á«ááºááá¯ááºááẠ(á¡áá¯á¶ážááŒá¯áá¯á¶áᬠTakeBit áááºáááºááŸá¯), á¡áááºááá¬áž (áá¬áá¯á¶ážáááºá DrinkUpOperation áá¯áááºážá០ááá¯ááºááá¯ááº) ááŸáá·áº á¡ááŒá¬ážáá±á¬ áá¯ááºáááºážááá¯á¡ááºáá»ááºáá»á¬ážá áœá¬ááᯠááŒáá·áºáááºážáá«á
(á¡áá¯ážá áá«á 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 á áá±á¬ááºáááºá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááŒá áºáá±á¬ Single Changeability Principle ááᯠááŸá¬ááœá±áá«á
SCP á âModule áá áºáá¯ááœáẠááŒá±á¬ááºážáá²ááẠá¡ááŒá±á¬ááºážááŒáá»ááºáá áºáá¯áᬠááŸááááºáâ . ááá¯ááá¯áááºááŸá¬ âáá¬áááºáá°ááŸá¯ááẠá¡ááŒá±á¬ááºážá¡áá²á¡ááœáẠá¡ááŒá±á¬ááºážááŒáá»ááºáá áºáá¯ááŒá áºáááºáâ
(áá°áááºážá¡áááá¹áá«ááºááœáá·áºááá¯áá°áá»á¬ážááẠáá»á±á¬ááºáá¶áá°áá¬ážá telepathic á áœááºážáááºááᯠáá¯á¶ááŒááºááŒáá¯á¶ááááº)
á¡áá¯áá±á¬á· á¡áá¬á¡á¬ážáá¯á¶ážá áá±áá¬áá»ááœá¬ážáááºá áá®ážááŒá¬ážá á®á áá±á¬ááºážááŒááºážá áá±á¬ááºáá¯á¶ážááŒááºážááŸáá·áº ááá±á á¬áá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážááᯠááŒá±á¬ááºážáá²ááá¯ááºáá±á¬áºáááºáž áá±á¬ááºáá°ááá¯ááºááá¯ááºááœáẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá á á®á á¥áºááŸá¯ááŸáá·áº áá«áááºááŸá¯ááá¯áᬠááŒá±á¬ááºážáá²ááá¯ááºáááºá á¥ááá¬á ááá±á¬ááºáá® ááá±á á¬ááᯠááœáŸá±á·ááŒááºáž ááá¯á·ááá¯áẠáá¯áá·áºáá¯ááºáááºááŒááºážááá¯á·ááᯠááá·áºááŒááºážááŒáá·áºáᬠááŒá±á¬ááºážáá²ááá¯ááºáááºá
"ááŸá±á·ááá¯á·ááŸáá·áºáᬠááŸá±á·ááá¯á·" áá»ááºážáááºááŸá¯ááœááºá ááŒá±á¬ááºážáá²ááá¯ááºááá·áºá¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºážáááºážááŒáá·áºáᬠááŒá±á¬ááºážáá²ááá¯ááºáááºá á¡ááºá¥ááá±. áá¯áá¹áááááºážáá±á¬ áá¯áá¹áááááºážáá»á¬áž áááºážáá«ážáá±á¬á¡áá«ááœáẠáááºážááẠáááºááŸá¯áááœááºáá°ááŒá®áž áááá±á¬ááºááŸá¯ ááŸáááá¯ááºááŒá®áž áááºážááẠááŒá±á¬ááºážáá²áá²áá±á¬áºáááºáž áááŒá¬ááááá¯áááᯠáááºážááẠNATO á¡ááœá²á·áááºáá¯ááŸá¬ážá¡ááœáẠááá¯á¡ááºáááºááẠááá¯áá±á¬ if-statement áá»á¬ážááŸáá·áºá¡áá° ááá¯ááºáž 500 áá áºáá¯á á®á ááŒá±á¬ááºáááºááœááºáááºážáááºážáá»á¬ážááŒáá·áº á¡áá¯á¶ážáááºáá±á·ááŸááááºá
á¡áááá¹áá¬ááºááœáá·áºááá¯áá»áẠáá
á¡áááºáá±á¬ááºáá°áá»á¬ážááẠá¡ááŒá¬ážáá°áá áºáŠážáááá¯ááºáááºážááœáẠá¡áááºááŒá±á¬áá·áº ááá¯ážáá¬áááŒá±á¬ááºážá ááá¯á·ááá¯áẠáááºážááá¯á·á ááá¯ááá¯ááºážááºáá¯ááºážááŸááá¬ááá¯á· áááŒá¬áá áá¬ážááááºááŒáá±á á¡áá±ážá ááẠááŸááºáááºážááá·áºááẠá¡áá»áááºáá±á¬ááºáá«ááŒá®á
áá±á¬ááºážááŒááºážáá¯ááºáááºážá ááºááŒáá·áº ááŸááºáááºážááá°ááŒáá«á áá¯á·á
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áá»áœááºá¯ááºááá¯á·ááẠáá¬áááºááŸáá·áº áá¯ááºááá¯ážááŸá¯ ááŸá¯áá±á¬áá·áºá០ááá¬ááŸáá áœá¬ áá¯ááºáá±á¬ááºáá²á·áááºá ááá¯á·áá±á¬áº ááᯠáá»áœááºá¯ááºááá¯á·ááẠááœá²ááŒá¬ážááŒááºážááááá¬áááŸáá·áº áá±á¬ááœá±ážáá±áá«áááºá áááºáááºááŸá¯ááá¯ááºááá¯ááºá ááŒá±á¬ááºážáá²ááá¯ááºááá·áºá¡ááŒááºá ááŸááºáááºážááá¯ááºááá¯ááºáááºáž ááŒá±á¬ááºážáá²ááá¯ááºáááºá áá±á¬ááºážááŒááºážáá¯ááºáááºážá¡ááœáẠááẠáá®ážááŒá¬ážááœá²áá¯ááºááŒá®áž á¡áá°áž logger áá áºáá¯ááᯠáááºáá®ážááá«áááº-
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, LogBefore О OnError áá áºáŠážáá»ááºážá á®ááá¯áááºáž ááŒá±á¬ááºážáá²ááá¯ááºááŒá®ážá ááááºá¡ááá·áºáá»á¬ážááŸáá·áº ááŸáá¯ááºážááŸááºááŒááºážááŒáá·áºá á¡áááºážáá¯á¶ážáá»áá¯ážááᯠáááºáá®ážááá¯ááºáááº- PourLoggerBefore, PourLoggerAfter О PourErrorLogger.
á¡áááºáá±á¬ááºáá°á¡ááœáẠáááºáááºááŸá¯ áá¯á¶ážáá¯ááŸáááŒá±á¬ááºáž ááááááŒá®áž áá áºáá¯ááºááŒááºážáááºáááºáž ááá¯ážáᯠáááŸááá«áááºá ááááºá¡áá±ááŒáá·áº á¡áááºááá¯ááºážáá áºáá¯áá¯á¶ážááœáẠá¡áááºáž áá (!!!) áá«áááºáá«áááºá
ááá¯ááºáá«ááá¯áá¬? áááºáááº! ááŒáá¯ááœá²áá»ááºá á®ážáá±áá±á¬ áááºáá áºáá¯á¶ážááŒáá·áº áá»á±á¬ááºáá°áá¬ážááẠâáá±á¬ááºážâ ááᯠáá±ááá·áºáá°ážá áááºááœááºá áá±á¬ááºážááá·áº á¡á±á¬áºááá±áá¬á¡ááŒá áºá áá±áá±ážáá±áá±áž áááºáá±á¬ááºááŸá¯á áá±á¬áºáá®áá»á°ážáá»á¬áž ááá¯ááºááááŒááºážá áá¯ááºááá¯ááºážááá¯ááºáᬠá á¶ááŒáá¯á¶á á¶ááŒá áºááŒá®ážá áá±á¬ááºáá¯á¶ážááááºááœáẠáá°ááẠááŸá®ááá¯áá¬áá»á¬ážááᯠáá±á¬ááœá±ážááŒááºážáááŸááá² áááºáá¯ááºááẠááŒáá¯ážá á¬ážáááºááŒá áºáááºá ááá¹áá¬áá¯á¶ážááá¯ááºáᬠááááºážááŸááºáá»á¬ážá áá«á·ááá¯áá¯á¶áá«á áá°áááºááá·áºáááºááá¯ááºáá«á
á€á¡áá»áááºááœáẠSRP ááẠáááºážáá±á¬ááºááá¯ááºáá¶áá±á¬áºá០ááá¹áá¬áá®áá¯á¶ááŒááºáá»á¬ážááŒá áºááŒá®áž áá±á«ááºááœá²áá á¬ážááẠááœááºááœá¬ážááŒáááº...
... Srp áááááá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááᯠáááºáá±á¬á¡áá«á០ááá±á·áá¬áá²á
âáá áºáá¯áááºážáá±á¬ áá¬áááºáá»á±ááŸá¯áá°áá±á¬ááºá áá®ááá¯áá±á¬áºááŒáá¬ážáááºá ááŒá±á¬ááºážáá²ááŸá¯ááŸáá·áº áááºáá°áá±á¬á¡áá¬áá»á¬ážááᯠáá áºáá±áá¬áááºážááœáẠááááºážáááºážáá¬ážááá·áºáááºáâ . ááá¯á·ááá¯áẠ"áááºááá¯ááŒá±á¬ááºážáá²ááŸá¯ááœá±ááᯠáá áºáá±áá¬áááºážááŸá¬ á á¯á ááºážáá¬ážááá·áºáá²á"
ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠáááºáááºááŸá¯áá áºáá¯á áá áºáá¯ááºááŒááºážááᯠááŒá±á¬ááºážáá²áá«áá áááºážááᯠáá áºáá±áá¬áááºážááœáẠááŒá±á¬ááºážáá²ááááºááŒá áºáááºá
á€áááºááŸá¬ á¡ááœááºá¡áá±ážááŒá®ážáá±á¬á¡áá»ááºááŒá áºááẠ- á¡áááºáá±á¬áºááŒáá« SRP á ááŸááºážáááºážáá»ááºá¡á¬ážáá¯á¶ážááẠáááºážááá¯á·ááᯠáá»á±ááŸá¯ááºážáá±á áẠá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠáá»á±ááŸá¯ááºážááẠááá¯á¡ááºáááºáᯠááá¯áá±á¬ááŒá±á¬áá·áºá ááá¯ááá¯áááºááŸá¬á áááºážááá¯á·ááẠá¡áá¬ááá¹áá¯á á¡ááœááºá¡á á¬ážá¡áá±á«áº âá¡áááºááá·áºáááºáá»ááºâ ááᯠáá»ááŸááºáá²á·ááŒá®áž ááá¯á¡áá«á "á¡áááá·áºáá¯á¶ážááá·áºáááºáá»ááº" á¡ááŒá±á¬ááºážááŒá±á¬áá±ááŒá®á áá áºáááºážááŒá±á¬ááááºáá±á¬á·, SRP ááẠ"ááŒáááºáá±á áẠááŒáááºááŒááºáž" ááá¯á¡ááºáá¯á¶áá¬áá áááºážááᯠá¡ááœááºá¡áá»áœá¶ áááŒá¯áá¯ááºáá« - "ááŸááºááœááºáá±áá±á¬ á¡áá¬áá»á¬ážááᯠáááŸáááºá ááºáá«ááŸáá·áº". áá«áᬠOccam áá²á· áááºáá¯ááºážáá¬ážáá²á· áá»á±á¬ááºáá¶áá°áá¬ážááá¯á·áá²á· ááŒá®ážáá¬ážáá²á· ááá¯ááºááœá²ááŒá áºáá«áááºá
á¡áᯠáá±á¬ááºáá²á·áá°á ááá¯áá±á¬ááºážáá¬áááºá 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 áá¯ááŸááááºá
- ááœááºááŒááºážáá¯ááºáááºáž
- áá±á¬ááºááŒááºážáá¯ááºáááºáž
- Jamming áááºáááºááŸá¯
- áá áºáá¯ááºááá¬áž
- á¡áááºáá±á¬ááºáá° áá»ááºááŸá¬á á¬
áááºážááá¯á·áá áºáŠážá á®ááẠáá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá áºáá¯á¡ááœáẠáááºážááŒááºá áœá¬áá¬áááºááŸáááŒá®áž á¡ááŒá±á¬ááºážá¡áá²á¡ááœáẠá¡ááŒá±á¬ááºážáááºážáá áºáá¯ááŸááááºá ááŒá±á¬ááºážáá²ááŒááºážááá¯ááºáᬠá ááºážáá»ááºážá¡á¬ážáá¯á¶ážááẠá¡áá®ážá¡áá¬ážááœáẠááŸááá±áááºá
áááºááœá±á·ááá¥ááá¬
b2b client ááᯠá¡ááá¯á¡áá»á±á¬áẠá á¬áááºážááœááºážáááºá¡ááœáẠáááºáá±á¬ááºááŸá¯áá áºáᯠáá±ážáá²á·áá°ážáááºá á¡áá¬ážáá° á¡ááŒá±á¬ááºážá¡áᬠááá¯ááºáž ááá á¡ááœáẠáá¯áá¬ážáááẠáááºážáááºážáá áºáᯠáá±á«áºáá¬áááº-
- 1C ááá¯á·ááœá¬ážá á¡áá±á¬áá·áºáá áºáá¯áááºáá®ážáá«á
- á€á¡áá±á¬áá·áºááŒáá·áºá ááœá±áá±ážáá»á±ááŸá¯ module ááá¯á·ááœá¬ážá áááºážááᯠááá¯áá±áá¬ááœáẠáááºáá®ážáá«á
- áááºááá¬áá¬ááœáẠááá¯ááá¯á·áá±á¬á¡áá±á¬áá·áºáá áºáá¯ááŸááá±á¬ á¡áá±á¬áá·áºáá áºáá¯ááᯠááááºáá®ážáá¬ážááŒá±á¬ááºáž á á áºáá±ážáá«á
- á¡áá±á¬áá·áºá¡áá áºáá áºáá¯áááºáá®ážáá«á
- ááœá±áá±ážáá»á±ááŸá¯ module ááœáẠááŸááºáá¯á¶áááºááŒááºážááááºáá»á¬ážááŸáá·áº 1c áá¶áá«ááºááᯠááŸááºáá¯á¶áááºááŒááºážááááºáááºáá±á¬ááºááŸá¯ááá¯á· ááá·áºáá«á
- á¡áá±á¬áá·áºá¡áá»ááºá¡áááºááᯠá€ááá¬ážááœáẠááá·áºáá«á
- ááœáá¯áá·áºáááºáá±á¬ááºááŸá¯ááœáẠá€áááá¯ááºážááá·áºá¡ááœáẠá¡ááŸááºáá¶áá«ááºáá áºáᯠáááºáá®ážáá«á á€áááºáá±á¬ááºááŸá¯ááá¯á· áááºá 1c á¡áá±á¬áá·áºáá¶áá«ááºááᯠáá±ážááá¯á·áá«á
ááŒá®ážáá±á¬á· áá®á á¬áááºážááŸá¬ ááá¯ážááœá¬ážáá²á· áá»áááºáááºááŸá¯áá²á·á¡áá° áá±á¬ááºááẠáá¯ááºáááºáž 10 áá¯áá±á¬áẠááŸááá²á·áá«áááºá áá°ááá¯ááºážáá®ážáá«áž á¡áá±á¬áá·áºááᯠááá¯á¡ááºáá«áááºá áá±á«áºááá¯ááŸá¯áá áºáááºááœáẠá¡ááŸáẠID ááŸáá·áº áá¯á¶ážá áœá²áá°á¡ááẠááá¯á¡ááºáá«áááºá
ááŒááºáááºááŒá¯ááŒááºááŒá®áž áá áºáá¬áá®á¡ááŒá¬ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶áá¯ááºááŸáá·áº á¡áá±á¬áá·áºáá áºáá¯ááŸáá·áº á¡áá¯ááºáá¯ááºááŒááºážá ááœá²ááŒá¬ážáá»ááºá¡áá»áá¯á·ááᯠáá®ážááŒá¬ážáááºážáááºážáá»á¬áž/á¡áááºážáá»á¬ážá¡ááŒá Ạááœá²ááŒá¬ážááá¯ááºáá²á·áááºá áá¯áá¬ážááááºáááºážáááºážááẠááá¯ááá¯ááœááºáá°á á±áááºá ááá¯á·áá±á¬áº áá¯ááºá á¬ááŒá±á¬ááºáž 100 ááẠáá±á¬ááœá±ážááá±áá»ááºáá±á¬á·áá«á
áááºá¡áááºážáááºááŒá¬ááŒá®ážááŸáᬠဠ"áá±á«á·áá«ážáá±á¬" áááºážáááºážá á¡ááŸá áºáá¬áááẠáá¯ááºáááºážááá¯ááºáᬠá¡ááºáááá¯áá®áááºáá áºáá¯ááŒá áºááŒá±á¬ááºáž ááŸááºážááŸááºážáááºážáááºáž áááá¬ááááºá áááºážááá¬ááá¯ááºáᬠáááºááŸááºáá»ááºáá»á¬ážá áá°ááá±á¬áºááŒáá»ááºááẠá¡ááœááºááŸá¯ááºááœá±ážáá«áááºá áááºážááẠSRP ááᯠââáá»áá¯ážáá±á¬ááºáá¬áá±á¬ááºááá·áº á€áááºážáááºážááᯠá¡ááá¯ááºážááá¯ááºážááœá²ááẠááŒáá¯ážáááºážááŸá¯ááŒá áºááŒá®áž á¡ááŒááºá¡ááŸááºá¡á¬ážááŒáá·áº ááá¯ááºáá«á
ááá¬ážáááºáá«áá
áá«ááá¯á·á¡áááºááᯠáá áºáá±á¬ááºáááºážáá¬ážáá²á·ááá¯á· á¡áá»áááºáááºááŒá®á áááºážáá²á·áá»ááºáááºááœá±ááᯠááŒá±á¬ááºááœá±á·á á±áááº- áá áºáá±á·áá»ááẠáá«ááá¯á· áá®ááá¯ááŒááºáá¬ááŸá¬ áá±áá»á¬áááºá ááᯠá€áá±á¬ááºážáá«ážá០á¡ááááá¬ááᯠááá¬ážáááºáá±á¬áºááŒááá¯ááºááŒáá«á áá¯á·á
ááá¬ážáááºá áá Ạ1. SRP áá¡áááá¹áá«ááº
- á¡á áááºá¡ááá¯ááºážáá áºáá¯á á®á¡ááœáẠáá¬áááºááŸáá á±áááºá¡ááœáẠá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠááœá²ááŒá¬ážáá«á
- áá¬áááºáá°ááŸá¯ááá¯áᬠ"ááŒá±á¬ááºážáá²ááá¯á· á¡ááŒá±á¬ááºážááá¬áž" ááá¯á· á¡áááá¹áá«ááºááá«áááºá ááá¯ááá¯áááºááŸá¬á ááŒááºá ááºáá áºáá¯á á®ááœáẠá á®ážááœá¬ážáá±ážáá¯áá¹áááá±áá¡á á¡ááŒá±á¬ááºážá¡áá²á¡ááœáẠá¡ááŒá±á¬ááºážááŒáá»ááºáá áºáá¯áá¬ááŸááááºá
- á á®ážááœá¬ážáá±ážáá¯áá¹áááá±áááá¯ááºáᬠá¡áá¬ážá¡áá¬ááŸááá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá áá±áá á¶ááŸá¯ááºážááŒá áºááááºá áááŒáá¯ááºáááºáááºáž ááŒá±á¬ááºážáá²áá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážááẠá¡áá®ážá¡áá¬ážááœáẠááŸááá±ááá«áááºá
Formalism 2. ááá¯á¡ááºáá±á¬ ááááááá¯ááºááᯠá ááºážáááºááŸá¯ á á¶ááŸá¯ááºážáá»á¬ážá
SRP ááᯠââááŒáá·áºáááºážááẠáá¯á¶áá±á¬ááºáá±á¬ á á¶ááŸá¯ááºážáá»á¬ážááᯠáá»áœááºá¯ááºáááœá±á·áá²á·ááá«á áá«áá±ááá·áº ááá¯á¡ááºáá²á· á¡ááŒá±á¡áá±ááœá± ááŸááááºá
1) áá®á¡áááºáž/áááºážáááºáž/module/serviceááá¬áá¯ááºáá²ááá¯á· ááá·áºááá¯ááºáááºáá±ážáá«á ááá¯ážááŸááºážáá±á¬ á¡áááá¹áá«ááºááŒáá·áº ááŒá±ááá«áááºá ( áá»á±ážáá°ážáááºáá«áááº
ááŸááºážáááºážáá»ááº
ááá¯á·áá±á¬áº áá áºáá«áá áºáá¶ááœáẠááá¯ážááŸááºážáá±á¬ á¡áááá¹áá«ááºááᯠááŸá¬ááœá±ááẠá¡ááœááºáááºáá²áááºá
2) áá»áá¯á·ááœááºážáá»ááºáá áºáá¯ááᯠááŒááºáááºááŒááºáž ááá¯á·ááá¯áẠá¡ááºá¹áá«áááºá¡áá áºáá áºáá¯ááá·áºááœááºážááŒááºážááẠááá¯ááº/á¡áááºážá¡á á¬áž á¡áááºážáá¯á¶ážá¡áá±á¡ááœááºá¡áá±á«áº áááºáá±á¬ááºááŸá¯ááŸááááºá á¡áá±á¬ááºážáá¯á¶ážááá±á¬á· - áá áºáá¯á
ááŸááºážáááºážáá»ááº
áá¬ááẠ(á¡ááºá¹áá«áááºáá áºáᯠááá¯á·ááá¯áẠáá»áœááºááœááºážáá»ááºáá áºáá¯á¡ááœááº) ááᯠááá¯ááº/á¡áááºážá¡á á¬ážáá áºáá¯ááœáẠááá·áºááœááºážáá¬ážáá±á¬ááŒá±á¬áá·áºá áááºááŒáá·áºááŸá¯áááá·áºáá±áá¬ááŸáá·áº áááºááá·áºá¡áá¬ááᯠáááºážááŒááºááááºáááºážá á¥ááá¬- áá áºáá¯ááºááŒááºážáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá output ááá¯ááŒá±á¬ááºážáá²ááŒááºážáá¡ááºá¹áá«áááºááẠáá áºáá¯ááºááá¬ážááá¯áᬠááŒá±á¬ááºážáá²áááºááá¯á¡ááºáá«áááºá áá»ááºáá²á· code ááœá±ááᯠááŒááºááŒá®áž run ááá¯á· áááá¯áá«áá°ážá
á¡ááŒá¬ážá¥ááá¬áá áºáá¯ááẠááááºá¡áá¬áá»á¬ážááŸáá·áºáááºáá°áá±á¬ UI ááááºážáá»á¯ááºááŸá¯á¡áá áºááᯠáá±á«ááºážááá·áºááŒááºážááŒá áºáááºá áááºážááẠááá·áºá¡á¬áž ááá°áá®áá±á¬ á¡áᬠ10 áá¯ááŸáá·áº ááá°áá®áá±á¬ converters 15 áá¯ááᯠáá±á«ááºážááá·áºááẠááœááºážá¡á¬ážáá±ážáá«á áááºááẠáááºážááᯠá¡ááœááºá¡áá»áœá¶áá¯ááºáá±á¬ááºáá±áá¯á¶ááááºá
3) ááá·áºááá±á¬áá»ááºá ááá°áá®áá±á¬á¡ááºá¹áá«áááºáá»á¬ážááᯠáá±á¬á·ááºáá²áá±ážáá¬ážáá°á¡áá»á¬ážá¡ááŒá¬ážá áá¯ááºáá±á¬ááºáá±áá«á áá±á«ááºážá ááºáááááá¹áááŒá áºááá¯ááºááŒá±á ááá¯ááá¯áááºááŸá¬ áá°áá®áá±á¬ááá¯ááº/á¡áááºážá¡á á¬ážááᯠáá±á¬á·ááºáá²áá±ážáá¬ážáá°á¡áá»á¬ážá¡ááŒá¬ážá áá áºáá»áááºáááºážááœáẠááŒá±á¬ááºážáá²á á±ááá·áº ááŒá áºááá¯ááºááŒá±ááŸá¬ á¡áááºážáááºáá»áŸáá¬ááŒá áºáááºá
ááŸááºážáááºážáá»ááº
âá á¬ážááœá²á¡á±á¬ááºááŸá¬ áá±á¬á·ááºáá¬áá±á¬ááºážâ áááºáááºááŸá¯á¡áá áºááᯠáá±á«ááºážááá·áºáá²á·á¡áá« áá áºáá¯ááºááá¬ážá áá±á¬ááºáá¯á¶ážááŸá¯áá²á· áá±á¬ááºážááŒááºážáá¯ááºáááºážááᯠááááá¯ááºá á±áááºááá¯ááẠáá¬áááºááá¹ááá¬ážááœá±ááᯠáá±á¬ááºáá±á¬ááºáá«á¡á±á¬áẠááœá²áá¬ážáá¯á¶ááá«áááºá áá¯ááºáá«áááºá áá«á á¡ááŒá²áááºážáááŒá áºááá¯ááºáá±ááá·áº áá®ááááºážááááºážááᯠáá»áŸá±á¬á·áá»ááá¯á· ááŒáá¯ážá á¬ážááá·áºáá«áááºá
4) áá¯ááºáááºážááá¯ááºáᬠáá¯áá¹áááá±áááá¯ááºáᬠááŸááºážáááºážáá±á¬áá±ážááœááºáž (áá±á¬á·ááºáá²áá±ážáá¬ážáá° ááá¯á·ááá¯áẠáááºáá±áá»á¬áá áºáŠážáá¶ááŸ) áá±ážááŒááºážáá±á¬á¡áá« áááºááẠá¡áááºáž/ááá¯ááºáá áºáá¯ááá¯á· áááºážááŒááºá áœá¬ááœá¬ážáᬠááá¯áá±áá¬ááŸáá¬áá»áŸáẠá¡áá»ááºá¡áááºáá»á¬ážááᯠáááºáá¶ááá°áá«á
ááŸááºážáááºážáá»ááº
á¡ááºá¹áá«áááºáá»á¬ážá á ááºážáá»á¥áºážáá»á¬áž ááá¯á·ááá¯áẠá¡ááºáááá¯áá®áááºáá»á¬ážááᯠáá áºáá±áá¬áááºážááœáẠáá»á áºáá»á áºáá áºáá áºáá±ážáá¬ážááŒá®áž áá¯ááºáá±áá¬áá áºáá»áŸá±á¬ááºááœáẠá¡áá¶áá»á¬ážááŒáá·áº ááœá²ááŒá¬ážááŒááºážáááŸááá«á
5) áá¬áááºá ááŸááºážáá«áááºá
ááŸááºážáááºážáá»ááº
áá»áœááºá¯ááºááá¯á·ááá°áááºážá á¬áž ááá¯á·ááá¯áẠáááºážáááºážááẠá¡áá¬áá áºáá¯á¡ááœáẠáá¬áááºááŸáááŒá®áž áá¬áááºááẠáááºážáá¡áááºááŒáá·áº áááºáááºáá±áááºá
AllManagersManagerService - ááŒá
áºááá¯ááºááŒá±á¡ááŸááá¯á¶áž God class áá
áºáá¯
LocalPayment - ááŒá
áºááá¯ááºáááºá
Formalism 3. Occam-ááá ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž áááºážá áá áºá
áá®ááá¯ááºážá¡á ááœáẠáá»á±á¬ááºáá°áá¬ážááẠááŒá¿áá¬á ááááá¬ááºá¡á¬ážáá¯á¶ážááᯠááááá² ááŒá±ááŸááºážááŒá®áž á¡ááŸá¬ážáá¯ááºááááá¯ááºáááºá áááºážáááºážá¡áá»áá¯ážáá»áá¯ážááŒáá·áº á¡ááŸá¬ážáá»á¬ážááᯠáááºáá¯ááºááá¯ááºáááºá
- ááá°áá®áá±á¬áá¬áááºáá»á¬ážááᯠáá±á«ááºážá ááºážááŒááºážááŒáá·áº á¡áá¬ááá¹áá¯áá»á¬ážááᯠá¡ááœááºááŒá®ážá¡á±á¬ááºáá¯ááºáá«á
- áá áºáá¯áááºážáá±á¬áá¬áááºááᯠá¡áá»áá¯ážá¡á á¬ážáá»á¬ážá áœá¬ááœá²á áá¯á¶áá±á¬áºááŒááºážá
- áá¬áááºááá¹ááá¬ážáá»á¬ážááᯠááŸá¬ážááœááºážá áœá¬ áááºááŸááºááŒááºážá
á ááºážáá»ááºážááᯠááŸááºáá¬ážáá¬ážááẠá¡áá±ážááŒá®ážáááº- "á¡ááŸá¬ážááŒá®ážáá áºáá¯áá¯ááºááá¯ááºáᬠááá¯áá±á¬ááºážáááº" ááá¯á·ááá¯áẠ"ááá±áá»á¬ááẠáááœá²áá«áá²á·"á á¥ááá¬á¡á¬ážááŒáá·áºá ááá·áºá¡áááºážááœáẠáá¬áááºááŸá áºáá¯áá«áá»áŸáẠáááºážááᯠáá¬ážáááºááá¯ááºáá²ááŒá áºááŒá®áž áá¯á¶ážá áœá²áá°áá¯ááºááᯠá¡áááºážáááºáá¬ááŒá±á¬ááºážáá²ááŸá¯ááŒáá·áº ááŸá áºááá¯ááºážááœá²ááá¯ááºáááºá ááá¯ááºá¡áá»á¬ážá¡ááŒá¬ážááœáẠáááºá ááºá¡ááŒá±á¬ááºážá¡áᬠáá»á¶á·ááŸá¶á·áá±ááŒá®áž client áá¯ááºááœáẠááá¯á¡ááºáá±á¬ ááŸá®ááá¯ááŸá¯áá»á¬ážáááŸáááŒááºážááŒá±á¬áá·áº áááºá¡ááá¯ááºážá¡á áá»á¬ážá០áááºááœááºááᯠáááºáááºááŒááºážááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ááá¯ááá¯áááºáá²áá«áááºá
áá áºáááºáá±á«áºááá¯á· á¡áá»áááºáááºááŒá®á
SRP á áááºáááºááẠOOP ááŸáá·áº SOLID ááœáẠá¡ááá·áºá¡áááºáááŸááá«á áááºážááẠáááºážáááºážáá»á¬ážá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá á¡áááºážáá»á¬ážá áá±á¬áºáá»á°ážáá»á¬ážá ááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áááºááá¯ááºáá«áááºá áááºážááẠ"figax-figax-and-prod" ááŸáá·áº "rocket-science" development ááŸá áºáá¯áá¯á¶ážá¡ááœáẠá¡áá»á¯á¶ážáááºááŒá®áž ááá¹áá¬ááᯠáá±áá¬ááá¯ááºážááœáẠá¡áááºážáááºááá¯áá±á¬ááºážá á±áááºá á¡á²áá«ááᯠááœá±ážááŒáá·áºááẠáá«á á¡ááºáá»ááºáá®áá¬ááá¯ááºážáá²á· á¡ááŒá±áá¶áááá¬ááá®ážáá«ážáá«áá²á á ááºááá¯ááºážááá¯ááºáᬠá¡ááºáá»ááºáá®áá¬á ááááºážáá»á¯ááºááŸá¯á áá áºáá»á¬ážááŸáá·áº ááŸá¯ááºááœá±ážáá±á¬á áá áºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠá¡á áááºá¡ááá¯ááºážáá»á¬ážá០áááºáá±á¬ááºáá¬ážááŒááºážááŒá áºááŒá®ážá "á¡ááœá²á¡ááŒá²áá»á¬áž" ááẠáá®ááá¯ááºáá¬áá»á¬ážá áá»á±á¬á·ááŒá±á¬ááºážááŸá¯ááᯠáá¯á¶ážááŸá¯á¶ážá á±ááŒá®ážá "á¡ááœá²ááœá²á¡ááŒá²ááŒá²áá»á¬áž" ááẠáá®ááá¯ááºáá¬áá»á¬ážá á áœááºážáá±á¬ááºáááºááᯠáá¯á¶ážááŸá¯á¶ážá á±ááŒá®áž ááŸá¬ážááœááºážáá±á¬áááºááááááºáá»á¬ážá áááºážááá¯á·á¡á¬áž áááºááŒááºáá¯á¶ááá¬ážááŸáá·áº á áááºááŒáááºáááºááŸá¯ááá¯á·ááᯠáá¯á¶ážááŸá¯á¶ážá á±áááºá
SRP ááẠááá¬áá¡á¬ážááŒáá·áº áá®ááœááºáá¬ážááŒááºážááá¯ááºáá² áááá»áá±á¬ áááá¹áá¶ááá¬á ááá«áááºáá«á áááºážááẠáá»áœááºá¯ááºááá¯á·á áá®ááá±áááŸáá·áº á áááºááá¯ááºážááá¯ááºáᬠááá·áºáááºáá»ááºáá»á¬ážá០ááœááºááœááºááœá¬ážáá«áááºá áááºážááẠáá»á±á¬ááºáá¶áá°áá¬ážáŠážááŸá±á¬ááºááᯠá¡áá¯á¶ážááŒá¯á ááŸá¯ááºááœá±ážáá±á¬á áá áºáá»á¬ážááᯠááááºážáá»á¯ááºáááºááŸáá·áº ááœá¶á·ááŒáá¯ážááá¯ážáááºááẠáááºážáááºážáá áºáá¯áá»áŸáá¬ááŒá áºáááºá á áá áºááᯠááŒáá¯ááœá²á¡á±á¬áẠáá¯ááºáááºážááᯠáá°á ááŒá±á¬ááŒáááºá áá°áááºážáá±á¬áºááŒá°áá¬ááẠtelepathy ááá¬ááá»á¬ážá áœá¬ááá¯á¡ááºáá±á¬áºáááºáž á€áá±á¬ááºážáá«ážááẠáá±ážááááºááœá±á·áá»ááºááŸá¬ááŒááºá¡áá»áá¯á·ááᯠááŸááºážáááºážá á±áááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
source: www.habr.com