ืืืื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื ืคึผืจืื ืฆืืคึผ, ืืืื ืืืงืื ื ืืื ืืขืจ ืคึผืจืื ืฆืืคึผ ืคืื ืืืื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื,
ืึทืงืึท ืืขืจ ืคึผืจืื ืฆืืคึผ ืคืื ืืื ืืืจ ืืืขืจืืึทืืืืืื - ืึท ืืึธืจ ืืืืืฉืืง ืืึธืืขืจ ืฆื ืคึฟืึทืจืฉืืืื ืืื ืึทืืึท ืึท ื ืขืจืืืขื ืงืฉืื ืืื ืึท ืคึผืจืึธืืจืึทืืืกื ืืื ืืขืจืืืื.
ืืืึทื ืขืจืฉืืขืจ ืขืจื ืกื ืืึทืงืึทื ืืขืจ ืืื ืืขื ืคึผืจืื ืฆืืคึผ ืืื ืืขืืืขื ืืื ืื ืึธื ืืืื ืคืื ืื ืขืจืฉืืขืจ ืืึธืจ, ืืืขื ืื ืืื ื ืืื ืืจืื ืืขื ืขื ืืขื ืืืขื ืืื ืื ืืืึทืื ืฆื ืืึทืื ืกืืืืขื ืื ืคืื ืืึทืจืืื - ืคืึทืงืืืฉ ืกืืืืขื ืื.
ืื ื ืฐืื ื ืืฒื ืข ื ืื ืจ ืืฒื ืืขืืฒื ื ืืขืฐืืจ ื ืื ื ืืจืืค ืข ืคื ื ืืขื ื 8 โ 9 ืคืขืจืืื , ืื ื ืื ืจ ืืื ื ืืขืื ื ื ืคืืจืืขืกืืื ื โ ืฐืขืื ืข ืืจืืคืข ืก ืคืืขื ื ื ื ืฉื ืขืืกื ืข ืืจืื ืงืข ื ื ืคืืืฉ ืข ืฐืืืงืข , ืืชื ืื , ื ื ืืข ืจ ืขืจืฉืืข ืจ ืคื ื ืืข ืจ ืืจืืค ืข ืืฒ ื ื ืฐืืืงืข , ืืข ืจ ืฆืฐืฒืืข ืจ ืืจืื ืงื , ืืื ืืขืจ ืืจืืืขืจ ืืึธื ืึท ืคึฟืึทืจืืฒึทืกื. ืืขืจ ืึทืคึผืึทืจืึทื ืืืึธืก ืืื ืืขืขื ืืืงื ืืืื ืึธืคึผืขืจืึทืฆืืข ืืืืืขืื ืฆื ืื ืกืืฃ ืคืื ืื ืจืื ืคืื ืื ืืจืืคึผืข.
ืืขืจ ืคืึทื ืืืขื ืื ืจืื ืืจืืืก ืืื ืืขืืืขื ืึท ืงืืืคื ืคืื ืืจืื ืืื ืืขืืืขื ืึท ืืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื SRP.
ืืขืคึฟืื ืืฆืืข 1. ืืืื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื.
ืืขืจ ืืึทืึทืืืขืจ ืืขืคึฟืื ืืฆืืข ืคืื โโืื ืืืื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื ืคึผืจืื ืฆืืคึผ (SRP) ืืืื ืึทื ืืขืืขืจ ืขื ืืืื ืืื ืืืื ืืืืืขื ืข ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื ืืื ืกืืื ืคึฟืึทืจ ืขืงืืืกืืขื ืฅ, ืืื ืขืก ืืื ืืืืื ืืืื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื.
ืืึทืืจืึทืืื ืื ืืืืคืขืฅ "ืืจืื ืงืขืจ" (ืืืคึผืืขืจ).
ืฆื ืื ืกืืจืืืขื ื ืื SRP ืคึผืจืื ืฆืืคึผ, ืืืจ ืืืขืื ืืืืื ืื ืจืืกืคึผืึทื ืกืึทืืืืึทืืื ืืื ืืจืืึท:
- ืืืื ืขืจ ืืืกื (PourOperation)
- ืืืื ืขืจ ืืจืื ืงื (DrinkUp Operation)
- ืืืื ืขืจ ืืื ื ืคืืจืืื ื (TakeBiteOperation)
ืืขืืขืจ ืคืื ืื ืคึผืึทืจืืืกืึทืคึผืึทื ืฅ ืืื ืืขื ืคึผืจืึธืฆืขืก ืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืืืื ืงืึธืืคึผืึธื ืขื ื ืคืื ืืขื ืคึผืจืึธืฆืขืก, ืืืึธืก ืืื, ืืื ืืืื ืึทืืึธืืืฉืข ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื - ืฆื ืืจืื ืงืขื, ืืืกื ืึธืืขืจ ืคึฟืึทืจืืืึทืกื.
ืื ืืจืื ืงื ืืึธื, ืืื ืงืขืจ, ืืื ืึท ืคืึทืกืึทื ืคึฟืึทืจ ืื ืึทืคึผืขืจืืืฉืึทื ื:
ัlass Tippler {
//...
void Act(){
_pourOperation.Do() // ะฝะฐะปะธัั
_drinkUpOperation.Do() // ะฒัะฟะธัั
_takeBiteOperation.Do() // ะทะฐะบััะธัั
}
}
ืคืืจืืืืก?
ืืขืจ ืืขื ืืฉ ืคึผืจืึธืืจืึทืืืกื ืฉืจืืืื ืงืึธื ืคึฟืึทืจ ืืขื ื ืึธืืืึทืื-ืืขื ืืฉ, ืืื ืืขืจ ื ืึธืืืึทืื-ืืขื ืืฉ ืืื ืื ืึทืืขื ืืืื, ื ืึทืจืืฉ ืืื ืฉืืขื ืืืง ืืื ืึท ืืึทืื. ืขืจ ืงืขื ืขื ืืึทืืื ืืื ืคึฟืึทืจืฉืืืื ืืืขืื 3-7 ืืขืจืืื ืขื ืืื ืืืื ืฆืืื.
ืืื ืืขื ืคืึทื ืคืื ืึท ืฉืืืืจ, ืขืก ืืขื ืขื ืืจืืึท ืคืื ืื ืืขืจืืื ืขื. ืึธืืขืจ, ืืืื ืืืจ ืฉืจืืึทืื ืืขื ืงืึธื ืืื ืืืื ืืืึทื, ืขืก ืืืขื ืึทื ืืืึทืืื ืืขื ื, ืืจืืื, ืคืืืฅ ืืื ืกืึธืฃ ืึทืจืืืืขื ืื ืืืขืื ืคึผืึธืืืืืง. ืืื ืืึธืก ืึทืืฅ ืืืขื ืืืื ืืื ืืขื ืืืฃ ืคืื ืืืื ืืืคึฟื. ืืื ืืื ืืืืขืจ ืึทื ืืืจ ืืึธื ืืขืืขื ืึทืืึท ืงืึธื ืืื ืืืื ืคืืจ. ื ืื ืื ืืขืจืกื ืืขื ืืฉืืขื ืคึผืจืึธืืข ืคึฟืึทืจ ืื ืคึผืกืืืืง.
ืืืืฃ ืื ืื ืืขืจืข ืืึทื ื, ืืขืจ ื ืึธืืืึทืื ืืขื ืืฉ ืืื ืืืืืื ื ืฆื ืกืืืืืืจื ืคืึทืงืืืฉ ืึทืืืืฉืขืงืฅ ืืื ืืืื ืงืึธืคึผ. ืื ื ืืฒ ื ืคืื ืืืืืข , ืงื ื ืข ืจ ื ืฒ ืฆืืืืืขื ืฉืืืคื , ืฆืืืืืขื ืฉืืขื ื ืคื ื ื ืฒ ื ืฒ ืข ืืคืฆืื , ืื ื ื ืฒ ืืืืค ื ืืขืืืืง ื ืืืื ึพ ืฆืขืฉื ืื ื . ืืืึทืืืฉืึทื ืึทื ืึทืื ืืึธืืขื ืืึทืฉืื. ืืื ืืืื ืคืึทื ืืึทืืืข, ืืืจ ืงืขื ืขื ืขืคืขื ืขื ืื ืืืจ, ืื ืกืงืจืขืื ืื ืืืจ ืืจืื ืืื ืืขื ืืึธืจื ืื ืคึฟืขื ืฆืืขืจ ืืืืื ืืขืงืึทื ืืืึทืื, ืืื ืืืึธืก ืขืก ืืืขื ืืืื ืืืจื. ืึธืืขืจ ืืืจ ืงืขื ืขื ื ืืฉื ืืขื ืึทืืข ืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืคืื ืื ืืึทืฉืื ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืืื ืืืื "ืืืกืืื ื". ืืื ืืื ืืกืืขืจ ืืขืจ "ืืึทืืคึผืข ืืขื ืืฉ" ืงืขื ื ืืฉื.
ืืขืจืืืขืจ, ืืขื ืืฉ ืคึผืจืึธืืืจืึทืืขืจื ืฆืขืืืืื ืงืึธืืคึผืืขืงืก ืืขืงืึทื ืืืึทืื ืืื ืึท ืกืืื ืคืื ืืืืื ืืงืขืจ ืงืึธืืคึผืืืฆืืจื ืืื ืืจืืขืื ืขืืขืืขื ืื. ืึธืืขืจ, ืขืก ืงืขื ืขื ืืืื ืืืงืึทืืคึผืึธืืื ืืื ืคืึทืจืฉืืืขื ืข ืืืขืื: ืืื ืคืืืข ืึทืื ืงืึทืจืก, ืื ืืืคื ืืึทืงื ืืืื ืืื ืื ืืืจ, ืืื ืืื ืืึธืืขืจื ืงืึทืจืก, ืึท ืืืจืืคืึทื ืืื ืื ืฉืืึธืก ืขืืขืงืืจืึธื ืืง ืคึผืจืืืืขื ืฅ ืื ืืึธืืึธืจ ืคืื ืกืืึทืจืืื ื, ืืืึธืก ืงืขื ืืืื ืึท ืคึผืจืึธืืืขื ืืขืฉืึทืก ืจืืคึผืขืจื.
ืืืฆื, SRP ืืื ืึท ืคึผืจืื ืฆืืคึผ ืืืึธืก ืืขืจืงืืขืจื ืืื ืฆื ืฆืขืืืืื , ืืึธืก ืืื, ืืื ืฆื ืฆืืขื ืื ืืืืืืืืื ื ืฉืืจื.
ืขืจ ืืืื ืึทื ืขืก ืืื ื ืืืืืง ืฆื ืฆืขืืืืื ืืืื ืืขื ืคึผืจืื ืฆืืคึผ ืคืื ืึธืคึผืืืื ืคืื "ืคืึทืจืึทื ืืืืึธืจืืืขืืงืืื", ืืึธืก ืืื ืืืื ืื ืืึทืกืงืก ืคืื ืืืืขืจ ืึทืืืืฉืขืงืก.
ืืึธืืืจ ืฆืืจืืงืงืืืขื ืฆื ืืจืื ืงื ืืื ืื ืึทืืืืึทื ืืืืืฉืื ืึทื ืืขืจ ืืึทืืคึผืข ืืขื ืืฉ ืืืงืืื ืืขืฉืึทืก ืืืงืึทืืคึผืึธืืืืฉืึทื:
- ืืขืจ ืงืึธื ืืื ืืขืืืืจื ืืึธืจ ืงืืึธืจ ืืืืฃ ืืขืืขืจ ืืืจืื
- ืืขืจ ืงืึธื ืงืขื ืขื ืืืื ืืขืฉืจืืื ืืืจื ืขืืืขืืข ืคึผืจืึธืืืจืึทืืขืจื ืืื ืึทืืึธื (ืืขืืขืจ ืฉืจืืืื ืึท ืืึทืืื ืืขืจ ืขืืขืืขื ื)
- ืึธืืึทืืืืืื ืืขืกืืื ื ืืื ืกืืืคึผืืึทืคืืื - ืื ืกืืืคึผืืขืจ ืื ืขืืขืืขื ื, ืื ืืจืื ืืขืจ ืขืก ืืื ืฆื ืคึผืจืืืืจื
- ืื ืงืึทืืคึผืึทืืืฉืึทื ืคืื ืื ืงืึธื ืืื - ืืืจ ืงืขื ืขื ืคืึทืจืืืึทืื DrinkUp Operation ืฆื ืื ืืคืขืจืืฆืืข ืืื ืืืขืืื ื ืฉืืืืจ ืืืกื ื ืคืืืกืืงืืื ืืื ืืขืจื ืืืฉ. ืึธืืขืจ ืคืึทืจืืืึทืื ืื ืืืกื ืึธืคึผืขืจืึทืฆืืข ืืื ืึท ืึธืคึผืขืจืึทืฆืืข ืืื ืืืึธืก ืืืจ ืืืฉื ืืืืึทื ืืื ืืืึทืกืขืจ ืึธืืขืจ ืืึทืฉืงืข ืืื ืืืจ. ืืขืคึผืขื ืืื ื ืืืืฃ ืืขืฉืขืคื ืจืขืงืืืืจืขืืขื ืฅ, ืืืจ ืงืขื ืขื ืืึธื ืึทืืฅ ืึธื ืจืืจื ืืืง ืืขื ืืืคึฟื ืงืึธื ืืืคึผืืขืจ.ืืงื.
- ืคึฟืื ืื ืึทืคึผืขืจืืืฉืึทื ื ืืืจ ืงืขื ืขื ืคืึทืจืืืืื ืื ืคืจืขืกืขืจ (ืืืืื ื ืืฆื TakeBitOperation), ืึทืืงืึธืืึธืืืงืขืจ (ื ืืฆื ืืืืื DrinkUp Operation ืืืืื ืคืื ืื ืคืืึทืฉ) ืืื ืืจืขืคื ืคืืืข ืื ืืขืจืข ืืขืฉืขืคื ืจืขืงืืืืจืขืืขื ืฅ.
(ืึธื, ืขืก ืืืื ื ืึทื ืืึธืก ืืื ืฉืืื ืึทื 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, LogBefore ะธ ืืืืฃ ืืขืืช ืงืขื ืขื ืืืื ืืืื ืืฉืืื ืืืฉื ืื ืืืืืืืืฉืืึทืื, ืืื, ืืืจื ืึทื ืึทืืึทืืืฉื ืืื ืื ืคืจืืขืจืืืงืข ืกืืขืคึผืก, ืืืขื ืืึทืื ืืจืื ืงืืืกื: PourLoggerBefore, PourLoggerAfter ะธ PourErrorLogger.
ืืื ืืขืืขื ืงืขื ืึทื ืขืก ืืขื ืขื ืืจืืึท ืึทืคึผืขืจืืืฉืึทื ื ืคึฟืึทืจ ืึท ืืจืื ืงืขืจ, ืืืจ ืืึทืงืืืขื ื ืืึทื ืืึธืืื ื ืงืืืกื. ืืื ืึท ืจืขืืืืืึทื, ืืขืจ ืืื ืฆืขืจ ืืจืื ืงื ืงืจืืึทื ืืืฉืืืื ืคืื 14 (!!!) ืงืืืกื.
ืืืคึผืขืจืืึธืืึท? ืงืืื! ื ืืึทืืคึผืข ืืขื ืืฉ ืืื ืึท ืืืงืึทืืคึผืึธืืืืฉืึทื ืืจืึทื ืืื ืืืขื ืฉืคึผืึทืืื ืื "ืืึธืืจืขืจ" ืืื ืึท ืืขืงืึทื ืืขืจ, ืึท ืืืื, ืืืกื ืึธืคึผืขืจืืืืขืจื, ืึท ืืืึทืกืขืจ ืฆืืฉืืขืื ืืื ืกื, ืึท ืืฉืืืืช ืืึธืืขื ืคืื ืื ืฆืื ืืืคืฉืืืืก ืคืื ืืึทืืึทืงืืืื, ืืื ืคึฟืึทืจ ืื ืืืืึทืืขืจ ืคืขืจืื ืขืจ ืืืขื ืคึผืจืืืืจื ืฆื ืึทื ืืึทื ืืืึทื ืื ืืืคึผืขื ืืึทื ืกืื ืึธื ืืืืืืืข ืืืขืจืืึทืืึทืื. ืืื ืืืืืื ืืืจ, ืขืจ ืืืขื ื ืืฉื ืืึทืืื.
ืขืก ืืื ืืื ืืขื ืคืื ื ืึทื ืคืืืข ืงืืืขื ืฆื ืื ืืกืงื ื ืึทื 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 ืฉืืจืืช ืคืื ืขื ืืขื ืืื ืืึทืื:
- ืืืื ืฆื 1C ืืื ืฉืึทืคึฟื ืึท ืืฉืืื
- ืืื ืืขื ืืฉืืื, ืืืื ืฆื ืื ืฆืึธืืื ื ืืึธืืืืข ืืื ืฉืึทืคึฟื ืขืก ืืึธืจื
- ืืฉืขืง ืึทื ืึท ืืฉืืื ืืื ืึทืืึท ืึท ืืฉืืื ืืื ื ืืฉื ืืืฉืืคื ืืืืฃ ืื ืืืืคึผื ืกืขืจืืืขืจ
- ืฉืึทืคึฟื ืึท ื ืืึทืข ืืฉืืื
- ืืืื ืื ืจืขืืืกืืจืึทืฆืืข ืจืขืืืืืึทืื ืืื ืื ืฆืึธืืื ื ืืึธืืืืข ืืื ืื 1c ื ืืืขืจ ืฆื ืื ืจืขืืืกืืจืึทืฆืืข ืจืขืืืืืึทืื ืืื ืกื
- ืืืื ืืฉืืื ืืื ืคึฟืึธืจืืึทืฆืืข ืฆื ืืขื ืืืฉ
- ืฉืึทืคึฟื ืึท ืคืื ื ื ืืืขืจ ืคึฟืึทืจ ืืขื ืงืืืขื ื ืืื ืื ืคืื ื ืืื ืกื. ืคืึธืจื ืืืื 1c ืืฉืืื ื ืืืขืจ ืฆื ืืขื ืืื ืกื.
ืืื ืขืก ืืขื ืขื ืืขืืืขื ืืืขืื 10 ืืขืจ ืืขืฉืขืคื ืึทืคึผืขืจืืืฉืึทื ื ืืืืฃ ืืขืจ ืจืฉืืื ืืื ืฉืจืขืงืืขื ืงืึทื ืขืงืืืืืืื. ืึผืืขื ืึทืืขืืขื ืืืจืฃ ืื ืืฉืืื ืืืืคืขืฅ. ืื ืคืื ื ืฉืืึทื ืืื ืงืืืขื ื ื ืึธืืขื ืืขื ืขื ืืืจืฃ ืืื ืืึทืื ืคืื ืื ืงืึทืืืก.
ื ืึธื ืึท ืฉืขื ืคืื ืจืขืคืึทืงืืึธืจืื ื, ืืืจ ืืขื ืขื ืืืืืืช ืฆื ืฆืขืืืืื ืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืงืึธื ืืื ืขืืืขืืข ืคืื โโืื ื ืืึทื ืกืื ืคืื ืืจืืขืื ืืื ืึท ืืฉืืื ืืื ืืึทืืื ืืขืจ ืืขืืืึธืืก / ืงืืืกื. ืืขืจ ืืึธื ืืืคึฟื ืืขืืืื ืขืก ืืจืื ืืขืจ, ืึธืืขืจ ืขืก ืืขื ืขื ืืขืืืขื 100 ืฉืืจืืช ืคืื ืงืึธื ืืื ืงืก ืืืึธืก ื ืึธืจ ืืึธื ื ืืฉื ืืืขืื ืฆื ืืืื ืึทื ืืึทื ืืืึทืื.
ืืืืื ื ืึธื ืึท ืืืกื ืืขื ืขืก ืืขืืืืจื ืงืืึธืจ ืึทื ืื ืขืกืึทื ืก ืคืื ืืขื "ืืืืืืืืื" ืืืคึฟื ืืื ืึท ืืขืฉืขืคื ืึทืืืขืจืืืึทื. ืืื ืึทื ืืขืจ ืึธืจืืืื ืขื ืืึทืฉืจืืึทืืื ื ืคืื ืื ืืขืื ืืฉ ืกืคึผืขืกืึทืคืึทืงืืืฉืึทื ื ืืื ืืึทื ืฅ ืงืึธืืคึผืืืฆืืจื. ืืื ืขืก ืืื ืืขืจ ืคึผืจืืืื ืฆื ืืจืขืื ืืขื ืืืคึฟื ืืื ืืจืขืงืืขื ืืืึธืก ืืืขื ืึธื ืจืืจื ืื SRP, ืืื ื ืืฉื ืืืืฆืข ืืืขืจืกืึท.
ืคืึธืจืืึทืืืืึทื.
ืขืก ืืื ืฆืืื ืฆื ืืึธืื ืืื ืืืขืจ ืฉืืืืจ ืึทืืืื. ืืจืืงื ืืืื ืืจืขืจื - ืืืจ ืืืขืื ืืืฉืืืื ืฆืืจืืงืงืืืขื ืฆื ืืื ืึทืืึธื. ืืืฆื ืืึธืื ืืื ืื ืคืึธืจืืึทืืื ืื ืืืืกื ืคืื ืืขื ืึทืจืืืงื.
ืคืึธืจืืึทืืืืึทื 1. ืืขืคึฟืื ืืฆืืข ืคืื โโืกืจืคึผ
- ืืึทืืื ืืขืจ ืื ืขืืขืืขื ืื ืึทืืื ืึทื ืืขืืขืจ ืคืื ืืื ืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืืืื ืืึทื.
- ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื ืฉืืืื ืคึฟืึทืจ "ืกืืื ืฆื ืืืืฉื." ืึทื ืืื, ืืขืืขืจ ืขืืขืืขื ื ืืื ืืืืื ืืืื ืกืืื ืคึฟืึทืจ ืืืืฉื, ืืื ืืขืจืืื ืขื ืคืื ืืขืฉืขืคื ืืึธืืืง.
- ืคึผืึธืืขื ืฆืืขื ืขื ืืขืจืื ืืขื ืฆื ืืขืฉืขืคื ืืึธืืืง. ืืืื ืืืื ืืึธืืงืึทืืืืื. ืขืืขืืขื ืื ืืืึธืก ืืืืฉื ืกืื ืืฉืจืึธื ืึธืืกืื ืืืื ืืืื ื ืึธืขื ื.
ืคืึธืจืืึทืืืืึทื 2. ื ืืืืืง ืืื-ืคึผืจืืืืจื ืงืจืืืืืจืืึท.
ืืื ืืื ื ืืฉื ืืขืืขื ืืขื ืื ืงืจืืืืืจืืึท ืคึฟืึทืจ ืคืืืคืืืื ื ืื SRP. ืืืขืจ ืขืก ืืขื ืขื ื ืืืืืง ืืืืื ืืื ืืขื:
1) ืคืจืขืื ืืื ืืืึธืก ืืขื ืงืืึทืก / ืืืคึฟื / ืืึธืืืืข / ืืื ืกื ืืื. ืืืจ ืืืื ืขื ืืคึฟืขืจื ืขืก ืืื ืึท ืคึผืฉืื ืืขืคึฟืื ืืฆืืข. ( ืืืื ืง
ืืขืจืงืืขืจืื ืืขื
ืึธืืขืจ, ืืื ืขืก ืืื ืืืืขืจ ืฉืืืขืจ ืฆื ืืขืคึฟืื ืขื ืึท ืคึผืฉืื ืืขืคึฟืื ืืฆืืข
2) ืคืืงืกืืจ ืึท ืืฉืืง ืึธืืขืจ ืึทืืื ื ืึท ื ืืึทืข ืฉืืจืื ืึทืคืขืงืฅ ืึท ืืื ืืืื ื ืืืขืจ ืคืื ืืขืงืขืก / ืงืืืกื. ืืืขืึทืืื - ืืืื ืขืจ.
ืืขืจืงืืขืจืื ืืขื
ืืื ื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื (ืคึฟืึทืจ ืึท ืฉืืจืื ืึธืืขืจ ืืฉืืง) ืืื ืขื ืงืึทืคึผืกืึทืืืืืื ืืื ืืืื ืืขืงืข / ืงืืึทืก, ืืืจ ืืืืกื ืคึผืื ืงื ืืื ืฆื ืงืืงื ืืื ืืืึธืก ืฆื ืจืขืืึทืืืจื. ืคึฟืึทืจ ืืืึทืฉืคึผืื: ืื ืฉืืจืื ืคืื ืืฉืึทื ืืื ื ืื ืจืขืืืืืึทื ืคืื ืืึธืืื ื ืึทืคึผืขืจืืืฉืึทื ื ืืืขื ืืึทืจืคื ืืฉืึทื ืืื ื ืืืืื ืื ืืึทืืขืจ. ืขืก ืืื ื ืื ืืึทืจืคึฟื ืฆื ืืืืคื ืืืจื ืื ืจืขืฉื ืคืื ืื ืงืึธื.
ืื ืื ืืขืจ ืืืืฉืคึผืื ืืื ืึทืืื ื ืึท ื ืืึทืข ืื ืงืึธื ืืจืึธื, ืขื ืืขื ืฆื ืื ืคืจืืขืจืืืงืข ืึธื ืขืก. ืืืื ืืึธืก ืคืึธืจืกืขืก ืืืจ ืฆื ืืืืื 10 ืคืึทืจืฉืืืขื ืข ืขื ืืืืื ืืื 15 ืคืึทืจืฉืืืขื ืข ืงืึทื ืืืขืจืืขืจื, ืขืก ืงืืงื ืืื ืืืจ ืึธืืืขืจืืึธ ืขืก.
3) ืืืื ืขืืืขืืข ืืขืืืขืืึธืคึผืขืจืก ืึทืจืืขืื ืืืืฃ ืคืึทืจืฉืืืขื ืข ืคึฟืขืึดืงืืืื ืคืื ืืืื ืคึผืจืืืขืงื, ืื ืืืงืขืืืืึธืึธื ืคืื ืึท ืฆืื ืืืคืืืกื ืงืึธื ืคืืืงื, ืืึธืก ืืื, ืื ืืืงืขืืืืึธืึธื ืึทื ืืขืจ ืืขืืืืงืขืจ ืืขืงืข / ืงืืึทืก ืืืขื ืืืื ืคืืจืขื ืืขืจื ืืืจื ืขืืืขืืข ืืขืืืขืืึธืคึผืขืจืก ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืืื ืืื ืืืึทื.
ืืขืจืงืืขืจืื ืืขื
ืืืื, ืืืขื ืึทืืื ื ืึท ื ืืึทืข ืึธืคึผืขืจืึทืฆืืข "ืืืกื ืืึทืฉืงืข ืืื ืืขืจ ืื ืืืฉ", ืืืจ ืืึทืจืคึฟื ืฆื ืืืืจืงื ืื ืืึทืืขืจ, ืื ืึธืคึผืขืจืึทืฆืืข ืคืื โโืืจืื ืงื ืืื ืืืกื, ืขืก ืงืืงื ืืื ืื ืจืืกืคึผืึทื ืกืึทืืืืึทืืื ืืขื ืขื ืงืจืื ืฆืขืืืืื. ืคืื ืงืืจืก, ืืึธืก ืืื ื ืื ืฉืืขื ืืืง ืืขืืืขื, ืึธืืขืจ ืืืจ ืืึธื ืคึผืจืืืืจื ืฆื ืจืขืืืฆืืจื ืืขื ืฆืืคืขืจ.
4) ืืืขื ืืขื ืคืจืขืื ื ืงืืืจืขืจืข ืคืจืืืข ืืืืขืจ ืืืื ืขืก ืืืืืง (ืคืื ื ืืขืืืขืืืคืขืจ ืืืขืจ ืคืืจืืืืืืขืจ), ืืืื ืืขื ืฉืืจืขื ื ืืจืืื ืืื ืืืื ืงืืืก/ืืขืงืข ืืื ืืืงืืื ื ืืจ ืคืื ืืืจื ืืื ืคืืจืืืฆืืข.
ืืขืจืงืืขืจืื ืืขื
ืคึฟืขืึดืงืืืื, ืึผืืืื ืึธืืขืจ ืึทืืืขืจืืืึทืื ืืขื ืขื ืงืึธืืคึผืึทืงืืื ืืขืฉืจืืื, ืืขืืขืจ ืืื ืืืื ืึธืจื, ืืื ื ืืฉื ืฆืขืืืึธืจืคื ืืื ืคืืึทืืก ืืืืขืจ ืื ืงืึธื ืคึผืืึทืฅ.
5) ืื ื ืึธืืขื ืืื ืงืืึธืจ.
ืืขืจืงืืขืจืื ืืขื
ืืื ืืืขืจ ืงืืึทืก ืึธืืขืจ ืืืคึฟื ืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืืืื ืืึทื, ืืื ืื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื ืืื ืฉืคืืืื ืืื ืืืึทื ื ืึธืืขื
AllManagersManagerService - ืจืืึฟ ืืกืชึผืื ืึท ืืึธื ืงืืึทืก
LocalPayment - ืืืกืืึธืืข ื ืืฉื
ืคืึธืจืืึทืืืืึทื 3. ืึธืงืงืึทื-ืขืจืฉืืขืจ ืึทื ืืืืืงืืื ื ืืขืืึทืืึทืืึทืืืฉื.
ืืื ืื ืึธื ืืืื ืคืื ืื ืคึผืืึทื, ืืขืจ ืืึทืืคึผืข ืืขื ืืฉ ืืื ื ืืฉื ืืืืกื ืืื ืืึธื ื ืื ืคืืื ืึทืืข ืื ืกืึทืืึทืืืื ืคืื ืื ืคึผืจืึธืืืขื ืืื ืกืึทืืืื ืืื ืงืขื ืขื ืืึทืื ืึท ืืจืืึทื. ืืืจ ืงืขื ืขื ืืึทืื ืืืกืืืืงืก ืืื ืคืึทืจืฉืืืขื ืข ืืืขืื:
- ืืึทืื ืึทืืืืฉืขืงืฅ ืฆื ืืจืืืก ืืืจื ืฆืื ืืืคืืืกื ืคืึทืจืฉืืืขื ืข ืจืืกืคึผืึทื ืกืึทืืืืึทืืื
- ืจืขืคืจืึทืืื ื ืืืจื ืืืืืืืืื ื ืึท ืืืื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื ืืื ืคืืืข ืคืึทืจืฉืืืขื ืข ืืืืคึผืก
- ืื ืงืขืจืขืงืืื ืืขืคืื ืืจื ืื ืืึทืื ืืจืื ืคืื ืคึฟืึทืจืึทื ืืืืึธืจืืืขืืงืืื
ืขืก ืืื ืืืืืืืง ืฆื ืืขืืขื ืงืขื ืื ืืขืจืฉื: "ืขืก ืืื ืืขืกืขืจ ืฆื ืืึทืื ืึท ืืจืืืก ืืจืืึทื," ืึธืืขืจ "ืืืื ืืืจ ืืขื ื ื ืืฉื ืืืืขืจ, ืืึธื ื ืื ืฉืคึผืึทืืื ืขืก." ืืืื, ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืื ืงืืึทืก ืึผืืื ืฆืืืื ืจืืกืคึผืึทื ืกืึทืืืืึทืืื, ืขืก ืืื ื ืึธื ืคืึทืจืฉืืืืืง ืืื ืงืขื ืขื ืืืื ืฉืคึผืึทืืื ืืื ืฆืืืื ืืื ืืื ืืืึทื ืขื ืืขืจืื ืืขื ืฆื ืื ืงืืืขื ื ืงืึธื. ืึทืกืขืืืึทื ืึท ืืืื ืคืื ืฉืึทืจืื ืคืื ืืืื ืืื ืืืืฉืึทืืืึทืื ืืขืจ ืฉืืืขืจ ืจืขืื ืฆื ืืขืจ ืงืึธื ืืขืงืกื ืืืึธืก ืืื ืคืึทืจืฉืคึผืจืืืื ืืืืขืจ ืขืืืขืืข ืืขืงืขืก ืืื ืื ืคืขืื ืคืื ื ืืืืืง ืืืคึผืขื ืืึทื ืกืื ืืื ืื ืงืืืขื ื ืงืึธื.
ืขืก ืืื ืฆืืื ืฆื ืจืืคื ืขืก ืึท ืืึธื
ืืขืจ ืคืึทืจื ืขื ืคืื SRP ืืื ื ืืฉื ืืืืืืขื ืฆื OOP ืืื SOLID. ืขืก ืึทืคึผืืืื ืฆื ืืขืืืึธืืก, ืคืึทื ืืงืฉืึทื ื, ืงืืืกื, ืืึทืืืฉืืื, ืืืงืจืึธ ืืึทืืื ืื ืืก ืืื ืืึทืืื ืื ืืก. ืขืก ืึทืคึผืืืื ืฆื ืืืืืข "ืคืืืึทืงืก-ืคืืืึทืงืก-ืืื-ืคึผืจืึธื" ืืื "ืจืึทืงืขื-ืืืืกื ืฉืึทืคึฟื" ืึทื ืืืืืงืืื ื, ืืืื ืื ืืืขืื ืึท ืืืกื ืืขืกืขืจ ืืืืขืืื. ืืืื ืืืจ ืืจืึทืืื ืืืขืื ืืื, ืืึธืก ืืื ืึผืืขื ืื ืคืื ืืึทืืขื ืืึทื ืคึผืจืื ืฆืืคึผ ืคืื ืึทืืข ืื ืืฉืขื ืืขืจืืข. ืืขืืฉืึทื ืืงืึทื ืืื ืืฉืขื ืืจืืข, ืงืึธื ืืจืึธื ืกืืกืืขืืขื, ืืื ืืึทืงืข ืึทืืข ืงืึธืืคึผืืขืงืก ืกืืกืืขืืขื ืืขื ืขื ืืขืืืื ืคืื ืงืึทืืคึผืึธืื ืึทื ืฅ, ืืื "ืึทื ืืขืจืคืจืึทืืืึทื ืืืืฉืึทื" ืืืคึผืจืืืืื ืืืืืื ืขืจื ืคืื ืืืืืืงืืื, "ืึธืืืขืจืคืจืึทืืืึทื ืืืืฉืึทื" ืืืคึผืจืืืืื ืืืืืื ืขืจื ืคืื ืขืคืขืงืืืืืงืืึทื, ืืื ืคืึทืืฉ ืืึทืื ืืจืื ืฆืื ืขืืขื ืืื ืคืื ืกืืื ืืื ืฉืืื ืคืื ืืืึทืกื.
SRP ืืื ื ืืฉื ืื ืืืขื ืืึทื ืืืจื ื ืึทืืืจ ืืื ืืื ื ืืฉื ืืืื ืคืื ืคึผืื ืืืขื ืืืืกื ืฉืึทืคึฟื. ืขืก ืืจืืืงืก ืืืืก ืคืื ืืื ืืืขืจ ืืืืึทืืึทืืืฉืืงืึทื ืืื ืคืกืืืืืืืืฉื ืืืืืืืืฉืึทื ื, ืขืก ืืื ื ืึธืจ ืึท ืืืขื ืฆื ืงืึธื ืืจืึธืืืจื ืืื ืึทื ืืืืืงืืขื ืงืึธืืคึผืืขืงืก ืกืืกืืขืืขื ื ืืฆื ืืขื ืืคึผ-ืืขื ืืฉ ืืึทืจื. ืขืจ ืืขืจืฆืืืื ืืื ืื ืืื ืฆื ืฆืขืืึธืื ืึท ืกืืกืืขื. ืืขืจ ืึธืจืืืื ืขื ืคืึธืจืืืืืืืฉืึทื ืคืืจืืื ืื ืึท ืฉืืื ืกืืืข ืคืื โโืืขืืขืคึผืึทืื, ืึธืืขืจ ืืื ืืึธืคึฟื ืืขื ืึทืจืืืงื ืงืืืจื ืขืืืขืืข ืคืื โโืื ืกืืึธืืงืกืงืจืขืขื.
ืืงืืจ: www.habr.com