
3åéããã°ã©ãã³ã°è¬åº§ 第3å: ã¯ã©ã¹ã®ã責任ãã£ãŠïŒïœåäžè²¬ä»»ã®ååïœ
ç»å Žäººç©ïŒ
ãã£ããå çïŒéç§°:å çïŒïŒ ãªããžã§ã¯ãæåãã¹ã¿ãŒãæ®æ®µã¯åªãããããŸã«ãŠãŒã¢ã¢ã亀ããªãã解説ã
ããã婿ïŒéç§°:ãããåïŒïŒ ããã°ã©ãã³ã°ãå§ããã°ããã®è¥æãçŽ æŽãªçåãæããããã®ãåŸæã
ãããåïŒ å çããã®éèšã£ãŠãã責任ã®åæ ãã£ãŠããããæ°ã«ãªããŸãïŒã¯ã©ã¹ã«äœã§ãããã§ãè©°ã蟌ããããããªããã£ãŠã©ãããããšãªãã§ããïŒ
å çïŒ ããããããåïŒãããšããã«æ°ãã€ãããããŸãã«ãããã仿¥ã®ããŒããã¯ã©ã¹ã®ã責任ããšåäžè²¬ä»»ã®ååãã ãããªããžã§ã¯ãæåèšèšã§ããšãŠã倧åãªèãæ¹ãªãã ã
ãããåïŒ ã責任ãã§ããïŒã¯ã©ã¹ã責任ãæã€ãªããŠããªãã ã人éã¿ããã§ããïŒ
å çïŒ ãã®éãïŒããã°ã©ãã³ã°ã®äžçã§ããã¯ã©ã¹ã«ã¯ãããããã©ããªä»äºãããã¹ããããšããã責任ãããããã ãååã®Carã¯ã©ã¹ãäŸã«èããŠã¿ãããã
ã¯ã©ã¹ã®ã責任ããšã¯ïŒ
å çïŒ ãããåãååã®Carã¯ã©ã¹ã¯ãã©ããªã責任ããæã£ãŠãããšæãïŒã€ãŸããã©ããªä»äºãããããšãæåŸ ãããŠããããªïŒ
ãããåïŒ ããŒãšããè²ãããã¡ãŒã«ãŒãã®ããŒã¿ãæã£ãŠããå éããããšããæ¢ãŸãããšããè»ã®åºæ¬çãªåããããããšãã§ããïŒ
å çïŒ ãã®éãïŒCarã¯ã©ã¹ã®äž»ãªè²¬ä»»ã¯ããè»ã®åºæ¬çãªç¶æ ïŒããŒã¿ïŒã管çããåºæ¬çãªåãïŒè¡åïŒãå®è¡ããããšãã ãšèšãããã
å çïŒ ãããããããã®Carã¯ã©ã¹ã«ãã鳿¥œãåçããæ©èœãããããã²ãŒã·ã§ã³ãè¡ãæ©èœããããã«ã¯ãã¬ãœãªã³ã®æ®éã管çããæ©èœããŸã§ãå šéšè©°ã蟌ãã§ããŸã£ããã©ããªããšæãïŒ
ãããåïŒ ããŒãâŠâŠæ©èœãå¢ããŠäŸ¿å©ã«ãªãããããªãã§ããïŒ
å çïŒ ãããã«äžèŠããèŠãããããããªããã§ããããã鳿¥œåçæ©èœãã«ãã°ãèŠã€ãã£ããã©ããªãïŒ
ãããåïŒ ãïŒCarã¯ã©ã¹ãä¿®æ£ããªãããããªããªããŸããã
å çïŒ ããã ããããã ããããªãã
ã³ãŒãããããé·ããªã£ãŠãã©ãã«äœãæžããŠãããåããã«ãããªãããŸãã§ãããããå®¶é»ã®åæ±èª¬ææžã1åã«ãŸãšãŸã£ãæ¬ã¿ããã«ãã
ãè»ãèµ°ãããéšåããšã鳿¥œãåçããéšåãã¿ããã«ãå šãé¢ä¿ãªãã¯ãã®æ©èœã®ä¿®æ£ã§ããåãCarã¯ã©ã¹ãéããŠè§Šãããšã«ãªããééã£ãŠä»ã®éšåãå£ããŠããŸããªã¹ã¯ãé«ãŸããã ã
ãããæ¬¡ã«ãé»è»ãã®ã¯ã©ã¹ãäœããšãã«ã鳿¥œãåçããæ©èœããå¿ èŠã«ãªã£ããã©ãããïŒCarã¯ã©ã¹ã®é³æ¥œåçæ©èœã ããåå©çšããã®ãé£ãããªãã ããïŒ
ãããåïŒ ãããŒãæ³åããã ãã§æ··ä¹±ãããã§ãâŠâŠãé¢ä¿ãªãéšåãè§Šã£ãŠå£ãã¡ããã®ã¯æããªã
åäžè²¬ä»»ã®ååïŒSingle Responsibility Principle / SRPïŒ
å çïŒ ãã®éããã ããããããªããžã§ã¯ãæåã«ã¯ãåäžè²¬ä»»ã®ååïŒSingle Responsibility Principle - SRPïŒããšããããšãŠã倧åãªèãæ¹ããããã ã
ãããåïŒ ãããã€ããã«ãã®ããããïŒ
å çïŒ ãããç°¡åã«èšããšããäžã€ã®ã¯ã©ã¹ã¯ã倿Žãããçç±ãäžã€ã ãæã€ã¹ãã ããšããååã®ããšã ãã€ãŸãããã®ã¯ã©ã¹ãæ åœãããä»äºãããé¢å¿äºãã¯äžã€ã«çµãã¹ãããšããããšã ãã
ãããåïŒ ã¯ã©ã¹ã®è²¬ä»»ã¯äžã€ã ãâŠâŠãããããã鳿¥œãåçããæ©èœãã¯ãå¥ã®ã¯ã©ã¹ã«ããã£ãŠããšã§ããïŒ
å çïŒ ãã®éãïŒ
å çïŒ ã¡ãªã¿ã«ãäœã§ãããã§ãäžã€ã®ã¯ã©ã¹ã«è©°ã蟌ãã§ããŸãã¯ã©ã¹ã®ããšããããã°ã©ãã³ã°ã®äžçã§ã¯ãGod ObjectïŒç¥ãªããžã§ã¯ãïŒããšåŒã¶ããšããããã ã
ãããåïŒ ç¥ãªããžã§ã¯ãïŒãããååã§ããïŒ
å çïŒ ãç¥æ§ã®ããã«äœã§ãã§ããããšããç®èã蟌ããååãªãã ãã§ãå®éã¯ã管çã倧å€ã§åé¡ã®å€ãã¢ã³ããã¿ãŒã³ïŒæªãèšèšãã¿ãŒã³ïŒãšããŠç¥ãããŠãããã ãã
å çïŒ æªãäŸãšè¯ãäŸãã³ãŒãã§èŠãŠã¿ãããã
Java
// æªãäŸïŒè²¬ä»»ãæ··åšããŠããCarã¯ã©ã¹
public class Car {
// è»ã®åºæ¬æ
å ±
String color;
String maker;
int speed;
// 鳿¥œãã¬ã€ã€ãŒæ©èœ
String currentSong;
boolean isPlaying;
// ããã²ãŒã·ã§ã³æ©èœ
String destination;
String currentLocation;
// çæç®¡çæ©èœ
int fuelLevel;
// è»ã®åäœ
public void accelerate(int speed) { /* å éåŠç */ }
public void brake() { /* 忢åŠç */ }
// 鳿¥œæ©èœ
public void playMusic(String song) { /* 鳿¥œåçåŠç */ }
public void stopMusic() { /* 鳿¥œåæ¢åŠç */ }
// ããæ©èœ
public void setDestination(String dest) { /* ç®çå°èšå®åŠç */ }
public void calculateRoute() { /* ã«ãŒãèšç®åŠç */ }
// çææ©èœ
public void refuel(int amount) { /* 絊油åŠç */ }
public boolean isFuelLow() { /* çææ®éãã§ã㯠*/ }
}
ãããåïŒ ãããŒã確ãã«ããã¯é·ããŠãäœã®ã¯ã©ã¹ãªã®ãåãããªããªãããã§ããïŒ
å çïŒ ããã ããïŒãããåäžè²¬ä»»ã®ååã«åŸã£ãŠåãããšããããªããã ã
Java
// è¯ãäŸïŒè²¬ä»»ãåé¢ããã¯ã©ã¹èšèš
public class Car {
String color;
String maker;
int speed;
public void accelerate(int speed) { /* å éåŠç */ }
public void brake() { /* 忢åŠç */ }
}
public class MusicPlayer {
String currentSong;
boolean isPlaying;
public void playMusic(String song) { /* 鳿¥œåçåŠç */ }
public void stopMusic() { /* 鳿¥œåæ¢åŠç */ }
}
public class NavigationSystem {
String destination;
String currentLocation;
public void setDestination(String dest) { /* ç®çå°èšå®åŠç */ }
public void calculateRoute() { /* ã«ãŒãèšç®åŠç */ }
}
public class FuelTank {
int fuelLevel;
public void refuel(int amount) { /* 絊油åŠç */ }
public boolean isFuelLow() { /* çææ®éãã§ã㯠*/ }
}
å çïŒ ãããŠããããã®åé¢ããã¯ã©ã¹ã¯ãããªé¢šã«çµã¿åãããŠäœ¿ãããšãã§ãããã ã
Java
// åé¢åŸã®ã¯ã©ã¹ã®äœ¿çšäŸ
public class CarSystem {
public static void main(String[] args) {
// ãããããç¬ç«ããã¯ã©ã¹
Car car = new Car("èµ€", "ããšã¿");
MusicPlayer player = new MusicPlayer();
NavigationSystem nav = new NavigationSystem();
FuelTank tank = new FuelTank();
// ãããããç¬ç«ããŠåäœ
car.accelerate(50); // è»ã®è²¬ä»»
player.playMusic("ãæ°ã«å
¥ãã®æ²"); // 鳿¥œã®è²¬ä»»
nav.setDestination("æ±äº¬é§
"); // ããã®è²¬ä»»
tank.refuel(30); // çæã®è²¬ä»»
}
}
ã責任ã®åæ ãã®ã¡ãªãããšå€æåºæº
å çïŒ ãããã£ãŠè²¬ä»»ãåæ ããããšã§ãããããã®ã¯ã©ã¹ãã·ã³ãã«ã«ãªããäœãããŠããã¯ã©ã¹ãªã®ããæç¢ºã«ãªãããã®çè§£ã§ããŒãã§ã¯ãã ïŒåäžè²¬ä»»ã®ååãå®ãããšã§ãããããã®ã¡ãªãããçãŸãããã ã
ä¿å®æ§ã®åäž: åé¡ãçºçããæã«ãã©ã®ã¯ã©ã¹ãåå ããç¹å®ãããããªããä¿®æ£ã楜ã«ãªãã
æ¡åŒµæ§ã®åäž: æ°ããæ©èœã远å ãããå Žåããæ¢åã®ã¯ã©ã¹ã倧ãã倿Žããããšãªããæ°ãã責任ãæã€ã¯ã©ã¹ã远å ããã°ããã
åå©çšæ§ã®åäž: ããããã®è²¬ä»»ãæç¢ºã ãããã鳿¥œãåçããæ©èœãã ããå¥ã®ããã°ã©ã ïŒäŸãã°ããå®¶ã®äžã®é³æ¥œãã¬ã€ã€ãŒãã¯ã©ã¹ïŒã§åå©çšãããããªãã
å¯èªæ§ã®åäž: åã¯ã©ã¹ãã·ã³ãã«ã§ãäœãããã¯ã©ã¹ãªã®ããåããããããªããããä»ã®äººãã³ãŒããèªãã ããèªåèªèº«ãåŸã§èŠè¿ããããããšãã«çè§£ããããã
ãããåïŒ ãããïŒåäžè²¬ä»»ã£ãŠããã æ©èœãåããã ããããªããŠãããã°ã©ã å šäœãããè¯ãããããã®èãæ¹ãªãã§ããïŒ
å çïŒ ãã®éãïŒå€§ããªåé¡ããå°ããåããŠããããã®å°éå®¶ïŒã¯ã©ã¹ïŒã«ä»»ããããšã§ãå šäœãšããŠããŸãããããã«ãªããã ãããã¯ããã°ã©ãã³ã°ã ãã§ãªããçŸå®ã®äžçã§ãå ±éããèãæ¹ã ããã
å çïŒ èº«è¿ãªäŸã§èããŠã¿ãããã¹ããŒããã©ã³ã®ã¢ããªã¯ã©ãããªïŒãã«ã¡ã©ã¢ããªãã«ãé»åæ©èœããã鳿¥œãã¬ã€ã€ãŒæ©èœããå šéšå ¥ãããã©ããªããšæãïŒ
ãããåïŒ ããŒãã確ãã«ããããã§ããïŒã«ã¡ã©ã¢ããªãªã®ã«ããªãã§é»åãïŒã£ãŠæãã§ãã
å çïŒ ãã®éãïŒããããå¥ã®ã¢ããªã«ããŠãå¿ èŠãªæã ã䜿ãã®ãèªç¶ã ãããããã°ã©ã ã®ã¯ã©ã¹ãåãèãæ¹ãªãã ã
å çïŒ ãããããããåãã©ããã£ãŠããã®æ©èœã¯åãã¯ã©ã¹ã«å ¥ããŠããããå¥ã®ã¯ã©ã¹ã«ããã¹ãããã倿ããã°ãããšæãïŒ
ãããåïŒ ããŒãâŠâŠé¢ä¿ããããã©ãããã§ããïŒ
å çïŒ ããèŠç¹ã ãïŒç°¡åãªå€æåºæºãæãããã
倿Žçç±ã®ç¢ºèªïŒãè»ã®é床ãå€ãã仿§å€æŽããšã鳿¥œã®åçæ¹åŒãå€ãã仿§å€æŽãã¯ãå šãéãçç±ã§çºçããããïŒããããã®ã¯ã©ã¹ã¯ããã®ã倿Žãããçç±ããäžã€ã ãæã€ã¹ããªãã ã
é¢å¿äºã®åé¢ïŒãè»ãåããããšããšã鳿¥œãåçããããšãã¯ãæ¬è³ªçã«ç°ãªãé¢å¿äºã ããïŒç°ãªããé¢å¿äºãã¯ãç°ãªãã¯ã©ã¹ã«æ åœãããã¹ããªãã ã
ç¬ç«æ§ã®ç¢ºèªïŒé³æ¥œãã¬ã€ã€ãŒãå£ããŠãè»ã¯èµ°ããããè»ãæ éããŠã鳿¥œã¯åçã§ããã¹ãã ããïŒãäºããç¬ç«ããŠæ©èœã§ãããããšããèŠç¹ãéèŠã ãã
ãããã£ã芳ç¹ã§èãããšã責任ãåããã¹ããã©ãããèŠããŠãããã ã
仿¥ã®ãŸãšãïŒ
ã¯ã©ã¹ã®ã責任ãïŒãã®ã¯ã©ã¹ããã©ããªä»äºãããã¹ããããšãã圹å²ã®ããšã
åäžè²¬ä»»ã®ååïŒSRPïŒïŒãäžã€ã®ã¯ã©ã¹ã¯ã倿Žãããçç±ãäžã€ã ãæã€ã¹ãã ããšãããªããžã§ã¯ãæåã®éèŠãªååã
God ObjectïŒç¥ãªããžã§ã¯ãïŒïŒäœã§ãããã§ãäžã€ã®ã¯ã©ã¹ã«è©°ã蟌ãã§ããŸã£ãã管çã倧å€ã§åé¡ã®å€ãã¢ã³ããã¿ãŒã³ã
ã¡ãªããïŒ
ä¿å®æ§ã®åäžïŒä¿®æ£ç®æãåãããããããããã°ã楜ã«ãªãã
æ¡åŒµæ§ã®åäžïŒæ°æ©èœã®è¿œå ã容æã«ãªãã
åå©çšæ§ã®åäžïŒã¯ã©ã¹ã®éšååãé²ã¿ãä»ã®å Žæã§ã䜿ãããããªãã
å¯èªæ§ã®åäžïŒã³ãŒããåããããããªãã
å€æåºæºïŒã倿Žãããçç±ãç°ãªããããé¢å¿äºãåé¢ã§ãããããç¬ç«ããŠæ©èœã§ãããããªã©ãèãããšã責任ãåããã¹ããã©ããã倿ã§ããã
ãããåïŒ å çã仿¥ã¯ãã¯ã©ã¹ã®è²¬ä»»ããšãåäžè²¬ä»»ã®ååãã«ã€ããŠããããããåãããŸããïŒäœã§ãããã§ãäžã€ã®ã¯ã©ã¹ã«è©°ã蟌ããšãåŸã§å€§å€ãªããšã«ãªããã§ããïŒã¡ãããšåœ¹å²åæ ãããããšã倧äºãªãã ïŒ
å çïŒ ãã®èª¿åã ããããåïŒãã®ãåäžè²¬ä»»ã®ååãã¯ããªããžã§ã¯ãæåèšèšã®åºæ¬äžã®åºæ¬ã§ãããéåžžã«åŒ·åãªæéãšãªãèãæ¹ã ããæ¬¡åã¯ããããã£ãŠè²¬ä»»ãåããã¯ã©ã¹å士ããã©ããã£ãŠå®å šã«ããåããããã«ã€ããŠåŠãã§ãããããå éšã®ç§å¯ã¯é ããŠãå¿ èŠãªéšåã ããå€ã«èŠããããšãããã«ãã»ã«åãã®èãæ¹ã ãã
ãããåïŒ ã«ãã»ã«åïŒãŸãé¢çœããã§ãïŒæ¥œãã¿ã§ãïŒããããšãããããŸããïŒ