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