åäžè²¬ä»»ã®ååãåäžè²¬ä»»ã®ååãšãåŒã°ããŸãã
å¥ååäžå€åæ§ã®åç - ç解ããã®ãéåžžã«é£ãããããã°ã©ããŒã®é¢æ¥ã§ã¯éåžžã«ç·åŒµãã質åã§ãã
ç§ããã®åçãåããŠçå£ã«ç¥ã£ãã®ã¯ãXNUMX幎çã®åãã幌è«ããçåŸãã€ãŸãæ¬ç©ã®çåŸãäœãããã«è¥ããŠç·è²ã®åã森ã«é£ããŠè¡ããããšãã§ããã
森ã®äžã§ãç§ãã¡ã¯8ïœ9人ã®ã°ã«ãŒãã«åãããŠãã°ã«ãŒãã®æåã®äººãã°ã©ã¹ã«ãŠã©ãã«ã泚ããXNUMXçªç®ã®äººãããã飲ããšããæ¡ä»¶ã§ãã©ã®ã°ã«ãŒãããŠã©ãã«ã®ããã«ãäžçªæ©ã飲ãã競äºããŸããããããŠXNUMX人ç®ã¯ããã€ãé£ã¹ãŸãã æäœãå®äºãããŠãããã¯ã°ã«ãŒãã®ãã¥ãŒã®æåŸã«ç§»åããŸãã
ãã¥ãŒ ãµã€ãºã XNUMX ã®åæ°ã§ããã±ãŒã¹ã¯ãSRP ã®é©åãªå®è£ ã§ããã
å®çŸ© 1. åäžã®è²¬ä»»ã
åäžè²¬ä»»åå (SRP) ã®å ¬åŒã®å®çŸ©ã§ã¯ãåãšã³ãã£ãã£ã¯ç¬èªã®è²¬ä»»ãšååšçç±ãæã¡ã責任㯠XNUMX ã€ã ãã§ãããšè¿°ã¹ãããŠããŸãã
ãªããžã§ã¯ããé
飲ã¿ã(ããããã©ãŒ).
SRP ååãå®è£
ããããã«ãç§ãã¡ã¯è²¬ä»»ã XNUMX ã€ã«åå²ããŸãã
- XNUMX ã€ã泚ããŸã (泚ãæäœ)
- äžæ¯é£²ã¿ãŸãïŒããªã³ã¯ã¢ãããªãã¬ãŒã·ã§ã³)
- äžäººã¯è»œé£ãæã£ãŠããŸãïŒãã€ã¯ãã€ããªãã¬ãŒã·ã§ã³)
ããã»ã¹ã®ååå è ã¯ãããã»ã¹ã® XNUMX ã€ã®ã³ã³ããŒãã³ãã«å¯ŸããŠè²¬ä»»ãè² ããŸããã€ãŸãã飲ãã泚ãã軜é£ãšãã XNUMX ã€ã®ååçãªè²¬ä»»ãè² ããŸãã
氎飲ã¿å Žã¯ã次ã®ãããªæäœã®ãã¡ãµãŒãã§ãã
Ñlass Tippler {
//...
void Act(){
_pourOperation.Do() // МалОÑÑ
_drinkUpOperation.Do() // вÑпОÑÑ
_takeBiteOperation.Do() // закÑÑОÑÑ
}
}
ãªãã§ããïŒ
人éã®ããã°ã©ããŒã¯ç¿äººã®ããã«ã³ãŒããæžããŸãããç¿äººã¯äžæ³šæã§æãã§ããã€ãæ¥ãã§ããŸãã 圌ã¯äžåºŠã«çŽ 3 ïœ 7 ã€ã®çšèªãä¿æããŠç解ããããšãã§ããŸãã
é
ã£ã±ããã®å Žåã«ã¯ããããã®çšèªã XNUMX ã€ãããŸãã ããããã³ãŒãã XNUMX æã®ã·ãŒãã§äœæãããšãæãã¡ã¬ããå§å©ãæ¿æ²»ã«é¢ããçµããã®ãªãè°è«ãå«ãŸããããšã«ãªããŸãã ããããã¹ãŠã XNUMX ã€ã®ã¡ãœããã®æ¬äœã«å«ãŸããŸãã ããªããå®åã§ãã®ãããªã³ãŒããèŠãããšããããšæããŸãã 粟ç¥ã«ãšã£ãŠæã人éçãªãã¹ããšã¯èšããŸããã
äžæ¹ãç¿äººã¯é ã®äžã§çŸå®äžçã®ç©äœãã·ãã¥ã¬ãŒãããããã«èšèšãããŠããŸãã 圌ã®æ³ååã®äžã§ãããããæŒãåãããããããããæ°ãããªããžã§ã¯ããçµã¿ç«ãŠãããåãæ¹æ³ã§å解ãããããããšãã§ããŸãã å€ãã¢ãã«ã®è»ãæ³åããŠãã ããã æ³ååã®äžã§ããã¢ãéãããã¢ããªã ãç·©ãããšãçªã®æéæ©æ§ãããããã®äžã«æ¯è»ãå ¥ã£ãŠããã®ãèŠããŸãã ãã ãããã·ã³ã®ãã¹ãŠã®ã³ã³ããŒãã³ãã XNUMX ã€ã®ããªã¹ããã§åæã«ç¢ºèªããããšã¯ã§ããŸããã å°ãªããšããç¿äººãã«ã¯ç¡çã ã
ãããã£ãŠã人éã®ããã°ã©ãã¯ãè€éãªã¡ã«ããºã ãããã»ã©è€éã§ã¯ãªãæ©èœããèŠçŽ ã®ã»ããã«å解ããŸãã ãã ããå解æ¹æ³ã¯ããŸããŸã§ããå€ãã®å€ãè»ã§ã¯ããšã¢ãã¯ãããã¢ã«å ¥ã蟌ã¿ãçŸä»£ã®è»ã§ã¯ãããã¯é»åæ©åšã®æ éã«ãããšã³ãžã³ãå§åã§ããªããªããä¿®çäžã«åé¡ãçºçããå¯èœæ§ããããŸãã
ä»ã SRPã¯ã©ã®ããã«å解ããããã€ãŸãã©ãã«å¢çç·ãåŒããã説æããååã§ã.
圌ã¯ãã責任ãã®åå²ã®ååã«åŸã£ãŠãã€ãŸãç¹å®ã®ãªããžã§ã¯ãã®ã¿ã¹ã¯ã«åŸã£ãŠå解ããå¿ èŠããããšè¿°ã¹ãŠããŸãã
飲é ãšå解äžã«ç¿äººãåããå©ç¹ã«æ»ããŸãããã
- ã³ãŒãã¯ããããã¬ãã«ã§éåžžã«æ確ã«ãªããŸãã
- ã³ãŒãã¯è€æ°ã®ããã°ã©ããŒãåæã«äœæã§ããŸã (åããã°ã©ããŒãåå¥ã®èŠçŽ ãæžã蟌ã¿ãŸã)ã
- èªåãã¹ãã¯ç°¡çŽ åãããŸã - èŠçŽ ãåçŽã§ããã°ããã»ã©ããã¹ããç°¡åã«ãªããŸãã
- ã³ãŒãã®æ§ææ§ã衚瀺ãããŸã - 眮ãæããããšãã§ããŸã ããªã³ã¯ã¢ãããªãã¬ãŒã·ã§ã³ é ã£ã±ãããããŒãã«ã®äžã«æ¶²äœã泚ããšããè¡çºã ãŸãã¯ã泚ãæäœããã¯ã€ã³ãšæ°ŽããŸãã¯ãŠã©ãã«ãšããŒã«ãæ··ããæäœã«çœ®ãæããŸãã ããžãã¹èŠä»¶ã«å¿ããŠãã¡ãœãã ã³ãŒãã«è§Šããããšãªããã¹ãŠãå®è¡ã§ããŸã ãã£ããã©ãŒã»ã¢ã¯ã.
- ãããã®æäœã«ãããã°ã«ãã³ãæããããããšãã§ããŸãïŒã®ã¿ã䜿çšããŸãïŒ TakeBitãªãã¬ãŒã·ã§ã³ïŒãã¢ã«ã³ãŒã«ïŒã®ã¿äœ¿çšïŒ ããªã³ã¯ã¢ãããªãã¬ãŒã·ã§ã³ ããã«ããçŽæ¥ïŒããã®ä»å€ãã®ããžãã¹èŠä»¶ãæºãããŸãã
(ãããããã¯ãã§ã« OCP ã®ååã®ããã§ããã®æçš¿ã®è²¬ä»»ã«éåããŸãã)
ãããŠãã¡ãããçæããããŸã:
- ããã«å€ãã®ã¿ã€ããäœæããå¿ èŠããããŸãã
- é ã£æãã¯ãéåžžãããæ°æéé ããŠåããŠãé ã飲ã¿ãŸãã
å®çŸ© 2. çµ±äžãããå€åæ§ã
èš±ããŠãã ããã玳士諞åïŒ é£²é ã¯ã©ã¹ã«ã責任㯠XNUMX ã€ãããŸããããã¯é£²ãããšã§ãã ãããŠäžè¬ã«ãã責任ããšããèšèã¯éåžžã«ææ§ãªæŠå¿µã§ãã 人é¡ã®éåœã«ã¯èª°ãã責任ãè² ãã極å°ã§ã²ã£ããè¿ã£ããã³ã®ã³ãè²ãŠã責任ã誰ãã«ããã
ããªã³ã«ãŒã® XNUMX ã€ã®å®è£ ãèããŠã¿ãŸãããã äžã§èª¬æããæåã®ã¯ã©ã¹ã«ã¯ã泚ããããªã³ã¯ãã¹ããã¯ã® XNUMX ã€ã®ã¯ã©ã¹ãå«ãŸããŠããŸãã
XNUMX ã€ç®ã¯ããForward and Only Forwardãæ¹æ³è«ã§èšè¿°ãããŠãããã¡ãœããå ã®ãã¹ãŠã®ããžãã¯ãå«ãŸããŠããŸãã è¡çº:
//Ðе ÑÑаÑÑÑе вÑÐµÐŒÑ ÐœÐ° ОзÑÑеМОе ÑÑПгП клаÑÑа. ÐÑÑÑе ÑÑеÑÑÑе пеÑеМÑкÑ
Ñ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ã¯æ¬¡ã®ãââãã«è¿°ã¹ãŠããŸããã¢ãžã¥ãŒã«ãå€æŽããçç±ã¯ãã XNUMX ã€ã ãã§ããã ããã¯ãã責任ã¯å€åã®çç±ã§ããããšããããšã§ãã
ïŒå ã ã®å®çŸ©ãèãã人ãã¡ã¯ç¿äººã®ãã¬ãã·ãŒèœåã«èªä¿¡ããã£ãããã§ãïŒ
ããã§ããã¹ãŠãããŸããããŸããã 泚ãã飲ããããã€ã®æé ãåå¥ã«å€æŽã§ããŸãããããªã³ã«ãŒèªäœã§ã¯ãããšãã°é£²ãåã«ããã€ã移åãããã也æ¯ã®èªã¿ãè¿œå ããããããªã©ãæäœã®é åºãšæ§æãå€æŽããããšããã§ããŸããã
ãForward and Only Forwardãã¢ãããŒãã§ã¯ãå€æŽã§ãããã®ã¯ãã¹ãŠã¡ãœããå ã§ã®ã¿å€æŽãããŸãã è¡çºã ããã¯ãããžãã¯ãã»ãšãã©ãªãããã£ãã«å€æŽãããªãå Žåã«ã¯èªã¿ãããå¹æçã§ãããå€ãã®å Žåããã·ã¢ã NATO ã«å çããããã«å¿ èŠãªæ°ãããå€ãã® if ã¹ããŒãã¡ã³ããå«ãããããã 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}");
}
}
ãããã«ãã»ã«åããããšã§ã 泚ãæäœãç§ãã¡ã¯è²¬ä»»ãšã«ãã»ã«åã®èŠ³ç¹ããè³¢æã«è¡åããŸããããä»ã§ã¯å€åæ§ã®ååãšæ··åãããŠããŸãã æäœèªäœãå€æŽå¯èœã§ããããšã«å ããŠããã®ã³ã°èªäœãå€æŽå¯èœã«ãªããŸãã 泚湯æäœçšã«ç¹å¥ãªãã¬ãŒãåé¢ããŠäœæããå¿ èŠããããŸãã
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)
}
}
}
泚ææ·±ãèªãã§ããæ¹ãªããæ°ã¥ãã§ããããã ãã°ã¢ãã¿ãŒ, åã®ã㰠О ãšã©ãŒæ åå¥ã«å€æŽããããšãã§ããåã®æé ãšåæ§ã«ã次㮠XNUMX ã€ã®ã¯ã©ã¹ãäœæãããŸãã 泚ããã¬ãŒå, 泚ããã¬ãŒåŸ О PourErrorLogger.
ãããŠã飲é è ã«ã¯ 14 ã€ã®æäœãããããšãæãåºããŠãXNUMX ã€ã®ãã®ã³ã° ã¯ã©ã¹ãååŸããŸãã çµæã飲ã¿äŒãµãŒã¯ã«å šäœã¯XNUMXã¯ã©ã¹ïŒ!!!ïŒãšãªããŸããã
åæ²ç·ïŒ ãããã«ãªãïŒ å解æ抎匟ãæã£ãç¿äººã¯ãã泚ã人ãããã«ã³ã¿ãã°ã©ã¹ã泚ããªãã¬ãŒã¿ã絊氎ãµãŒãã¹ãååè¡çªã®ç©çã¢ãã«ã«åå²ãã次ã®ååæã«æž¡ã£ãŠäŸåé¢ä¿ã解ãã»ããããšããŸããã°ããŒãã«å€æ°ã ãããŠä¿¡ããŠãã ããã圌ã¯æ¢ãŸããªãã§ãããã
ãã®æç¹ã§ãå€ãã®äººã¯ SRP ã¯ãã³ã¯ã®çåœã®ããšã話ã§ãããšããçµè«ã«éããããŒãã«ãããããã«å»ã£ãŠãããŸã...
...Srp ã® XNUMX çªç®ã®å®çŸ©ã®ååšã«ã€ããŠåŠç¿ããããšãªãã次ã®ããã«ãªããŸãã
ãåäžè²¬ä»»ååã§ã¯æ¬¡ã®ããã«è¿°ã¹ãããŠããŸãã å€æŽã«é¡äŒŒãããã®ã¯ XNUMX ãæã«ä¿ç®¡ããå¿ èŠããããŸããã ãŸã㯠"äžç·ã«å€æŽããããã®ã¯ XNUMX ãæã«ä¿ç®¡ããå¿ èŠããããŸãã
ã€ãŸããæäœã®ãã°ãå€æŽããå Žåã¯ãXNUMX ãæã§å€æŽããå¿ èŠããããŸãã
ããã¯éåžžã«éèŠãªç¹ã§ããäžèšã® SRP ã®ãã¹ãŠã®èª¬æã§ã¯ãåã朰ããšãã«åã朰ãå¿ èŠããããã€ãŸãããªããžã§ã¯ãã®ãµã€ãºã«ãäžéãã課ãå¿ èŠããããšè¿°ã¹ãããŠããããããã§ã«ãäžéãã«ã€ããŠè©±ããŠããŸãã èšãæãããšã SRPã§ã¯ã朰ããªãã朰ããã ãã§ãªããç¡çãããªããé£åãããã®ã朰ããªããããšãæ±ããããŸããã ãªãã«ã ã®ã«ããœãªãšç¿äººã®å€§æ±ºæŠã ïŒ
ããã§ã飲é è ã¯æ°åãè¯ããªãã¯ãã§ãã IPourLogger ãã¬ãŒã XNUMX ã€ã®ã¯ã©ã¹ã«åå²ããå¿ èŠããªãããšã«å ããŠããã¹ãŠã®ãã¬ãŒã XNUMX ã€ã®ã¿ã€ãã«çµåããããšãã§ããŸãã
class OperationLogger{
public OperationLogger(string operationName){/*..*/}
public void LogBefore(object[] args){/*...*/}
public void LogAfter(object[] args){/*..*/}
public void LogError(object[] args, exception e){/*..*/}
}
XNUMX çªç®ã®ã¿ã€ãã®æäœãè¿œå ãããšããã®ãã°ã®æºåã¯ãã§ã«å®äºããŠããŸãã ãŸããæäœã®ã³ãŒãèªäœã¯ã¯ãªãŒã³ã§ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®ãã€ãºããããŸããã
ãã®çµæã飲é åé¡ã解決ããããã® 5 ã€ã®ã¯ã©ã¹ãçšæãããŸããã
- 泚湯äœæ¥
- 飲é é転
- ãžã£ãã³ã°æäœ
- ãã¬ãŒ
- é 飲ã¿ã®ãã¡ãµãŒã
ããããã XNUMX ã€ã®æ©èœãå³å¯ã«æ åœããŠãããå€æŽã®çç±ã¯ XNUMX ã€ãããŸãã å€æŽã«äŒŒãã«ãŒã«ã¯ãã¹ãŠè¿ãã«ãããŸãã
å®éã®äŸ
ç§ãã¡ã¯ãã€ãŠãB2B ã¯ã©ã€ã¢ã³ããèªåçã«ç»é²ãããµãŒãã¹ãäœæããŸããã ãããŠãåæ§ã®å 容㮠200 è¡ã«å¯Ÿã㊠GOD ã¡ãœãããç»å ŽããŸããã
- 1Cã«ç§»åããŠã¢ã«ãŠã³ããäœæããŸã
- ãã®ã¢ã«ãŠã³ãã䜿çšããŠãæ¯æãã¢ãžã¥ãŒã«ã«ç§»åããããã§äœæããŸã
- ã¡ã€ã³ãµãŒããŒã«ãã®ãããªã¢ã«ãŠã³ããäœæãããŠããªãããšã確èªããŠãã ãã
- æ°ããã¢ã«ãŠã³ããäœæãã
- æ¯æãã¢ãžã¥ãŒã«ã®ç»é²çµæãš 1c çªå·ãç»é²çµæãµãŒãã¹ã«è¿œå ããŸã
- ãã®ããŒãã«ã«ã¢ã«ãŠã³ãæ å ±ãè¿œå ããŸã
- ãã€ã³ã ãµãŒãã¹ã§ãã®ã¯ã©ã€ã¢ã³ãã®ãã€ã³ãçªå·ãäœæããŸãã 1c ã¢ã«ãŠã³ãçªå·ããã®ãµãŒãã¹ã«æž¡ããŸãã
ãããŠããã®ãªã¹ãã«ã¯ãæ¥ç¶ãã²ã©ãç¶æ ã«ããäºæ¥æãããã« 10 件ã»ã©ãããŸããã ã»ãŒå šå¡ãã¢ã«ãŠã³ã ãªããžã§ã¯ããå¿ èŠãšããŠããŸããã ã³ãŒã«ã®ååã§ãã€ã³ã ID ãšã¯ã©ã€ã¢ã³ãåãå¿ èŠã§ããã
100 æéã®ãªãã¡ã¯ã¿ãªã³ã°ã®åŸãã€ã³ãã©ã¹ãã©ã¯ã㣠ã³ãŒããšã¢ã«ãŠã³ãæäœã®åŸ®åŠãªéšåãåå¥ã®ã¡ãœãã/ã¯ã©ã¹ã«åé¢ããããšãã§ããŸããã God ã¡ãœããã®ãããã§äœæ¥ã¯ç°¡åã«ãªããŸãããã解ãã»ãããããªãã³ãŒãã XNUMX è¡æ®ã£ãŠããŸããã
ãã®ã軜éãææ³ã®æ¬è³ªãããžãã¹ ã¢ã«ãŽãªãºã ã§ããããšãæããã«ãªã£ãã®ã¯ãæ°æ¥åŸã§ããã ãããŠãæè¡ä»æ§ã®å ã®èª¬æã¯éåžžã«è€éã§ããã ãããŠããã®ã¡ãœããã现ããåå²ããããšããè©Šã¿ã SRP ã«éåããããšã«ãªãããã®éã¯ãããŸããã
圢åŒäž»çŸ©ã
é ã£ã±ãããæŸã£ãŠããæãæ¥ãã æ¶ãæããŠãã ãã - ãã€ãå¿ ãæ»ã£ãŠããŸãã ããã§ã¯ããã®èšäºã®ç¥èã圢åŒçã«æŽçããŠã¿ãŸãããã
圢åŒäž»çŸ© 1. SRP ã®å®çŸ©
- ããããã®èŠçŽ ã XNUMX ã€ã®ããšãæ åœããããã«èŠçŽ ãåé¢ããŸãã
- 責任ãšã¯ãå€åããçç±ããæå³ããŸãã ã€ãŸããããžãã¹ ããžãã¯ã®èŠ³ç¹ãããåèŠçŽ ã®å€æŽçç±ã¯ XNUMX ã€ã ãã§ãã
- ããžãã¹ ããžãã¯ãå€æŽãããå¯èœæ§ããããŸãã ããŒã«ã©ã€ãºããå¿ èŠããããŸãã åæçã«å€åããèŠçŽ ã¯è¿ãã«ããå¿ èŠããããŸãã
圢åŒäž»çŸ© 2. å¿ èŠãªèªå·±ãã¹ãåºæºã
SRPãæºããããã®ååãªåºæºãããããŸããã ãã ããå¿ èŠãªæ¡ä»¶ããããŸãã
1) ãã®ã¯ã©ã¹/ã¡ãœãã/ã¢ãžã¥ãŒã«/ãµãŒãã¹ãäœãããã®ããèªåããŠãã ããã ç°¡åãªå®çŸ©ã§çããªããã°ãªããŸããã ïŒ ããããšã
説æ
ãã ããåçŽãªå®çŸ©ãèŠã€ããã®ãéåžžã«é£ããå ŽåããããŸãã
2) ãã°ã®ä¿®æ£ãŸãã¯æ°ããæ©èœã®è¿œå ã¯ããã¡ã€ã«/ã¯ã©ã¹ã®æå°æ°ã«åœ±é¿ããŸãã çæ³çã«ã¯ - XNUMX ã€ã
説æ
(æ©èœãŸãã¯ãã°ã«å¯Ÿãã) 責任㯠XNUMX ã€ã®ãã¡ã€ã«/ã¯ã©ã¹ã«ã«ãã»ã«åãããŠãããããã©ãã調ã¹ãŠäœãç·šéããã°ããããæ£ç¢ºã«ããããŸãã ããšãã°ããã®ã³ã°æäœã®åºåãå€æŽããæ©èœã§ã¯ããã¬ãŒã®ã¿ãå€æŽããå¿ èŠããããŸãã æ®ãã®ã³ãŒããå®è¡ããå¿ èŠã¯ãããŸããã
å¥ã®äŸã¯ã以åã®ãã®ãšåæ§ã®æ°ãã UI ã³ã³ãããŒã«ãè¿œå ããããšã§ãã ããã«ããã10 ã®ç°ãªããšã³ãã£ãã£ãš 15 ã®ç°ãªãã³ã³ããŒã¿ãè¿œå ããå¿ èŠãããå Žåã¯ãããããã®ããã«èŠããŸãã
3) è€æ°ã®éçºè ãããââãžã§ã¯ãã®ç°ãªãæ©èœã«åãçµãã§ããå ŽåãããŒãžç«¶åã®å¯èœæ§ãã€ãŸãåããã¡ã€ã«/ã¯ã©ã¹ãè€æ°ã®éçºè ã«ãã£ãŠåæã«å€æŽãããå¯èœæ§ã¯æå°éã«ãªããŸãã
説æ
ãããŒãã«ã®äžã«ãŠã©ãã«ã泚ãããšããæ°ããæäœãè¿œå ãããšãã«ã飲ãæäœãšæ³šãæäœã§ãããã¬ãŒã«åœ±é¿ãäžããå¿ èŠãããå Žåã責任ãæªãã§åå²ãããŠããããã«èŠããŸãã ãã¡ããããããåžžã«å¯èœã§ãããšã¯éããŸãããããã®æ°åãæžããããã«åªããå¿ èŠããããŸãã
4) ããžãã¹ ããžãã¯ã«ã€ã㊠(éçºè ãŸãã¯ãããŒãžã£ãŒãã) æ確ãªè³ªåããããå Žåãå³å¯ã« XNUMX ã€ã®ã¯ã©ã¹/ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããããããã®ã¿æ å ±ãåãåããŸãã
説æ
æ©èœãã«ãŒã«ãã¢ã«ãŽãªãºã ã¯ãããã XNUMX ãæã«ã³ã³ãã¯ãã«èšè¿°ãããã³ãŒã空éå šäœã«ãã©ã°ãæ£ãã°ãããšã¯ãããŸããã
5) ããŒãã³ã°ãããããããã
説æ
ç§ãã¡ã®ã¯ã©ã¹ãŸãã¯ã¡ãœãã㯠XNUMX ã€ã®ããšã«å¯ŸããŠè²¬ä»»ãè² ãããã®è²¬ä»»ã¯ãã®ååã«åæ ãããŠããŸãã
AllManagersManagerService - ããããç¥ã¯ã©ã¹
LocalPayment - ããããããã§ã¯ãããŸãã
圢åŒäž»çŸ© 3. ãªãã«ã ãã¡ãŒã¹ãã®éçºæ¹æ³è«ã
èšèšã®éå§æã«ã¯ããµã«ãã³ã¯è§£æ±ºãããŠããåé¡ã®ãã¹ãŠã®åŸ®åŠãªç¹ãç解ããŠããããæããŠããªããããééããç¯ãå¯èœæ§ããããŸãã ããŸããŸãªæ¹æ³ã§ééããç¯ãå¯èœæ§ããããŸãã
- ããŸããŸãªè²¬ä»»ãçµ±åããŠãªããžã§ã¯ãã倧ãããªãããã
- XNUMX ã€ã®è²¬ä»»ãããŸããŸãªçš®é¡ã«åå²ããŠåæ§æãã
- 責任ã®ç¯å²ã誀ã£ãŠå®çŸ©ãã
ã倧ããªééããããã»ããè¯ããã確信ãæãŠãªãå Žåã¯åå²ããªãããšããã«ãŒã«ãèŠããŠããããšãéèŠã§ãã ããšãã°ãã¯ã©ã¹ã« XNUMX ã€ã®è²¬ä»»ãå«ãŸããŠããå Žåã§ããããã¯ç解å¯èœã§ãããã¯ã©ã€ã¢ã³ã ã³ãŒããžã®æå°éã®å€æŽã§ XNUMX ã€ã«åå²ã§ããŸãã ã¬ã©ã¹ã®ç Žçããã¬ã©ã¹ãçµã¿ç«ãŠãã®ã¯ãã³ã³ããã¹ããè€æ°ã®ãã¡ã€ã«ã«åæ£ããŠãããââãã¯ã©ã€ã¢ã³ã ã³ãŒãã«å¿ èŠãªäŸåé¢ä¿ããªãã£ãããããããéåžžã¯ããå°é£ã«ãªããŸãã
ããçµããã«ããæãæ¥ã
SRP ã®ç¯å²ã¯ OOP ãš SOLID ã«éå®ãããŸããã ããã¯ãã¡ãœãããé¢æ°ãã¯ã©ã¹ãã¢ãžã¥ãŒã«ããã€ã¯ããµãŒãã¹ãããã³ãµãŒãã¹ã«é©çšãããŸãã ããã¯ãfigax-figax-and-prodãéçºãšããã±ãããµã€ãšã³ã¹ãéçºã®äž¡æ¹ã«é©çšãããããããå Žæã§äžçãå°ãã§ãè¯ãããŸãã èããŠã¿ãã°ãããã¯ãã¹ãŠã®ãšã³ãžãã¢ãªã³ã°ã®ã»ãŒåºæ¬ååã§ãã æ©æ¢°å·¥åŠãå¶åŸ¡ã·ã¹ãã ããããŠå®éãã¹ãŠã®è€éãªã·ã¹ãã ã¯ã³ã³ããŒãã³ãããæ§ç¯ãããŠããããæçåäžè¶³ãã¯èšèšè ã®æè»æ§ã奪ãããæçåéå°ãã¯èšèšè ã®å¹çã奪ããå¢çç·ãééã£ãŠãããšçæ§ãšå®å¿æã奪ããŸãã
SRP ã¯èªç¶ã«çºæããããã®ã§ã¯ãªãã粟å¯ç§åŠã®äžéšã§ããããŸããã ããã¯ç§ãã¡ã®çç©åŠçããã³å¿ççéçãæã¡ç Žããç¿äººã®è³ã䜿ã£ãŠè€éãªã·ã¹ãã ãå¶åŸ¡ãéçºããæ¹æ³ã«ãããŸããã 圌ã¯ã·ã¹ãã ãå解ããæ¹æ³ãæããŠãããŸãã å ã®å®åŒåã«ã¯ããªãã®éã®ãã¬ãã·ãŒãå¿ èŠã§ãããããã®èšäºã§ç å¹ã®äžéšã解æ¶ãããããšãé¡ã£ãŠããŸãã
åºæïŒ habr.com