ãã¶ã€ã³ã®è¯ãæªãã®æŠå¿µã¯çžå¯Ÿçã§ãã åæã«ãã»ãšãã©ã®å Žåããã®æå¹æ§ãä¿å®æ§ãããã³ãã¹ãå®¹ææ§ãä¿èšŒããããã€ãã®ç¢ºç«ãããããã°ã©ãã³ã°æšæºããããŸãã ããšãã°ããªããžã§ã¯ãæåèšèªã§ã¯ãããã¯ã«ãã»ã«åãç¶æ¿ãããªã¢ãŒãã£ãºã ã®äœ¿çšã§ãã å Žåã«ãã£ãŠã¯ã¢ããªã±ãŒã·ã§ã³ã®èšèšã«ãã©ã¹ã®å¹æãããããäžé£ã®èšèšãã¿ãŒã³ããããŸãïŒå Žåã«ãã£ãŠã¯ãç¶æ³ã«å¿ããŠãã¹ãŠããã€ãã¹ã«ãªããŸãïŒã äžæ¹ãå察ã®èŠç¯ãããããããé å®ãããšãåé¡ã®ããèšèšãšåŒã°ããããšããããŸãã ãã®ãããªèšèšã«ã¯éåžžãæ¬¡ã®æ©èœããããŸãïŒåæã«1ã€ãŸãã¯è€æ°ïŒã
- åæ§ïŒåçŽãªå€æŽã¯å€ãã®å Žæã«åœ±é¿ãããããã³ãŒãã倿Žããããšã¯å°é£ã§ãïŒ;
- 鿢ïŒã³ãŒããä»ã®ããã°ã©ã ã§äœ¿çšã§ããã¢ãžã¥ãŒã«ã«åå²ããããšã¯å°é£ã§ãïŒ;
- ç²åºŠïŒã³ãŒãã®éçºããã³/ãŸãã¯ãã¹ãã¯ããªãé£ããïŒ;
- äžèŠãªè€éãïŒã³ãŒãã«ã¯æªäœ¿çšã®æ©èœããããŸãïŒ;
- äžèŠãªåçŸæ§ïŒã³ããŒ/貌ãä»ãïŒ;
- å¯èªæ§ãäœãïŒã³ãŒãã®æ©èœãçè§£ããã®ãé£ãããç¶æããã®ãé£ããïŒ;
- è匱æ§ïŒå°ããªå€æŽã§ãæ©èœãç°¡åã«ç Žãããšãã§ããŸãïŒ;
åé¡ã®ããèšèšãé¿ãããããã®äœ¿çšã®çµæãäºæž¬ãããããããã«ã圌ãã¯çè§£ããŠåºå¥ã§ããå¿
èŠããããŸãã ãããã®çç¶ã¯ããããŒãããŒãã£ã³ã®èæžãã¢ãžã£ã€ã«ã®ååããã¿ãŒã³ãCïŒã®å®è·µãã§èª¬æãããŠããŸãã ãã ãããã®ãããã¯ã«é¢ããä»ã®ããã€ãã®ã¬ãã¥ãŒèšäºïŒã¡ãªã¿ã«ããã»ã©å€ãã¯ãããŸããïŒã®ããã«ãããªãç°¡åãªèª¬æãæäŸãããŠãããååãšããŠã³ãŒãäŸã¯ãããŸããã
ãããã®å
åã®ããããã«å€ããå°ãªããçŠç¹ãåœãŠãããšã«ããããã®æ¬ ç¹ãä¿®æ£ããŠã¿ãŸãããã
åæ§
ãã§ã«äžã§ç€ºããããã«ãããŒãã³ãŒãã¯ãããšã现éšã§ãã£ãŠã倿Žããã®ãé£ããå ŽåããããŸãã ã³ãŒããé »ç¹ã«å€æŽãããªãå ŽåããŸãã¯ãŸã£ãã倿Žãããªãå Žåãããã¯åé¡ã«ãªããŸããã ãããã£ãŠãã³ãŒãã¯ãŸã£ããåªããŠããŸãã ãããã圌ã宿çã«å€æŽãå¿
èŠãšãããããè¡ãããšãå°é£ã«ãªããšã圌ã¯åé¡ãæ±ããŸãã ãããæ©èœããå Žåã§ãã
åæ§ã®äžè¬çãªã±ãŒã¹ã®1ã€ã¯ãæœè±¡åïŒã€ã³ã¿ãŒãã§ã€ã¹ãåºæ¬ã¯ã©ã¹ãªã©ïŒã䜿çšãã代ããã«ãã¯ã©ã¹ã¿ã€ããæç€ºçã«ç€ºãããšã§ãã 以äžã¯ãµã³ãã«ã³ãŒãã§ãã
class A { B _b; public A() { _b = new B(); } public void Foo() {
ããã§ãã¯ã©ã¹Aã¯ã¯ã©ã¹Bã«å³å¯ã«äŸåããŠããŸããã€ãŸããå°æ¥Bã®ä»£ããã«å¥ã®ã¯ã©ã¹ã䜿çšããããšã«ããå Žåãã¯ã©ã¹Aã倿Žããå¿
èŠãããããããã¹ããç¹°ãè¿ããŸãã ããã«ãä»ã®å€ãã®ã¯ã©ã¹ãBã«å³å¯ã«äŸåããŠããå Žåãç¶æ³ã¯äœåºŠãè€éã«ãªãå¯èœæ§ããããŸãã
ãã®ç¶æ³ããæãåºãæ¹æ³ã¯ãæœè±¡åãã€ãŸãIComponentã€ã³ã¿ãŒãã§ã€ã¹ãå°å
¥ããã¯ã©ã¹Aã®ã³ã³ã¹ãã©ã¯ã¿ãŒïŒãŸãã¯äœããã®æ¹æ³ïŒãä»ããŠãã®ãããªäŸåé¢ä¿ãå°å
¥ããããšã§ãããã®å Žåãã¯ã©ã¹Aã¯ç¹å®ã®ã¯ã©ã¹Bã«äŸåããªããªããŸãããIComponentã€ã³ã¿ãŒãã§ã€ã¹ã®ã¿ã«äŸåããŸãã ã¯ã©ã¹Bã¯ãIComponentã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããå¿
èŠããããŸãã
interface IComponent { void DoSomething(); } class A { IComponent _component; public A(IComponent component) { _component = component; } void Foo() {
ããå
·äœçãªäŸãæããŸãããã æ
å ±ããã°ã«èšé²ããã¯ã©ã¹ã®ç¹å®ã®ã»ããïŒProductManagerãšConsumerïŒããããšããŸãã 圌ãã®ä»äºã¯ãããã€ãã®è£œåãããŒã¿ããŒã¹ã«ä¿åããããã«å¿ããŠæ³šæããããšã§ãã äž¡æ¹ã®ã¯ã©ã¹ã¯é¢é£ããã€ãã³ããèšé²ããŸãã ãŸãããã¡ã€ã«ãžã®ãã®ã³ã°ãè¡ãããŸããã ãã®ãããFileLoggerã¯ã©ã¹ã䜿çšãããŸããã ããã«ãã¯ã©ã¹ã¯ç°ãªãã¢ãžã¥ãŒã«ïŒã¢ã»ã³ããªïŒã«é
眮ãããŠããŸããã
æåã¯ãã¡ã€ã«ã ãã§ååã§ãããæ
å ±ãåéããŠä¿åããããã«ããŒã¿ããŒã¹ãã¯ã©ãŠããµãŒãã¹ãªã©ã®ä»ã®ã¹ãã¬ãŒãžã«ãã°ãèšé²ããå¿
èŠãããå ŽåãFileLoggerã䜿çšããŠããžãã¹ããžãã¯ã¢ãžã¥ãŒã«ïŒã¢ãžã¥ãŒã«2ïŒã®ãã¹ãŠã®ã¯ã©ã¹ã倿Žããå¿
èŠããããŸãã æçµçã«ãããã«ã¯æ³šæãå¿
èŠã§ãã ãã®åé¡ã解決ããã«ã¯ã以äžã«ç€ºãããã«ããã¬ãŒãæäœããããã®æœè±¡çãªã€ã³ã¿ãŒãã§ãŒã¹ãå°å
¥ã§ããŸãã
ãã®å Žåããã¬ãŒã®ã¿ã€ãã倿Žããå Žåãã¯ã©ã€ã¢ã³ãã³ãŒãïŒã¡ã€ã³ïŒã倿Žããã ãã§ååã§ããããã«ããããã¬ãŒãåæåãããProductManagerãšConsumerã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«é
眮ãããŸãã ãããã£ãŠããã¬ãŒã®ã¿ã€ãã«é¢ãã倿Žããããžãã¹ããžãã¯ã¯ã©ã¹ãéããŸãããããã¯å®è¡ããå¿
èŠããããŸããã
䜿çšãããŠããã¯ã©ã¹ãžã®çŽæ¥åç
§ã«å ããŠãã³ãŒãã倿Žããéã«åé¡ãåŒãèµ·ããä»ã®ãªãã·ã§ã³ã«ãã£ãŠåæ§ãæç€ºã§ããŸãã ãã®ãããªãã®ã¯ç¡éã«ãããããããŸããããå¥ã®äŸãæããŠã¿ãŠãã ããã ã³ã³ãœãŒã«ã«å¹ŸäœåŠå³åœ¢ã®é åã衚瀺ããã³ãŒããããã€ãçšæããŠã¿ãŸãããã
static void Main() { var rectangle = new Rectangle() { W = 3, H = 5 }; var circle = new Circle() { R = 7 }; var shapes = new Shape[] { rectangle, circle }; ShapeHelper.ReportShapesSize(shapes); } class ShapeHelper { private static double GetShapeArea(Shape shape) { if (shape is Rectangle) { return ((Rectangle)shape).W * ((Rectangle)shape).H; } if (shape is Circle) { return 2 * Math.PI * ((Circle)shape).R * ((Circle)shape).R; } throw new InvalidOperationException("Not supported shape"); } public static void ReportShapesSize(Shape[] shapes) { foreach(Shape shape in shapes) { if (shape is Rectangle) { double area = GetShapeArea(shape); Console.WriteLine($"Rectangle's area is {area}"); } if (shape is Circle) { double area = GetShapeArea(shape); Console.WriteLine($"Circle's area is {area}"); } } } } public class Shape { } public class Rectangle : Shape { public double W { get; set; } public double H { get; set; } } public class Circle : Shape { public double R { get; set; } }
ãã®ã³ãŒãã¯ãæ°ããå³åœ¢ã远å ãããšãã«ãShapeHelperã¯ã©ã¹ã®ã¡ãœããã倿Žããå¿
èŠãããããšã瀺ããŠããŸãã 1ã€ã®ãªãã·ã§ã³ã¯ã以äžã«ç€ºãããã«ãã¬ã³ããªã³ã°ã¢ã«ãŽãªãºã ã幟äœåŠçå³åœ¢ïŒé·æ¹åœ¢ãšåïŒã®ã¯ã©ã¹èªäœã«è»¢éããããšã§ãã ããã«ãããåã¯ã©ã¹ã®é¢é£ããžãã¯ãåé¢ããããããã³ã³ãœãŒã«ã«æ
å ±ãåºåããåã«ShapeHelperã¯ã©ã¹ã®è²¬ä»»ãçµã蟌ãŸããŸãã
static void Main() { var rectangle = new Rectangle() { W = 3, H = 5 }; var circle = new Circle() { R = 7 }; var shapes = new Shape[]() { rectangle, circle }; ShapeHelper.ReportShapesSize(shapes); } class ShapeHelper { public static void ReportShapesSize(Shape[] shapes) { foreach(Shape shape in shapes) { shape.Report(); } } } public abstract class Shape { public abstract void Report(); } public class Rectangle : Shape { public double W { get; set; } public double H { get; set; } public override void Report() { double area = W * H; Console.WriteLine($"Rectangle's area is {area}"); } } public class Circle : Shape { public double R { get; set; } public override void Report() { double area = 2 * Math.PI * R * R; Console.WriteLine($"Circle's area is {area}"); } }
ãã®çµæãç¶æ¿ãšããªã¢ãŒãã£ãºã ã䜿çšããŠæ°ããã¿ã€ãã®ã·ã§ã€ãã远å ããããã«ãå®éã«ShapeHelperã¯ã©ã¹ãéããŸããã
éãã
鿢ã¯ãã³ãŒããåå©çšå¯èœãªã¢ãžã¥ãŒã«ã«åå²ããè€éãã§çŸããŸãã ãã®çµæããããžã§ã¯ãã¯é²åããèœåã倱ããçµæãšããŠç«¶äºåã倱ãå¯èœæ§ããããŸãã
äŸãšããŠããã¹ãŠã®ã³ãŒããã¢ããªã±ãŒã·ã§ã³ïŒexeïŒã®å®è¡å¯èœãã¡ã€ã«ã«å®è£
ãããããžãã¹ããžãã¯ãåå¥ã®ã¢ãžã¥ãŒã«ãŸãã¯ã¯ã©ã¹ã«è»¢éããªãããã«èšèšããããã¹ã¯ãããããã°ã©ã ãèããŸãã ãã®åŸããã°ããããŠãããã°ã©ã éçºè
ã®åã«æ¬¡ã®ããžãã¹èŠä»¶ãçããŸããã
- ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã倿ŽããŠWebã¢ããªã±ãŒã·ã§ã³ã«ããŸãã
- ãµãŒãããŒãã£ã®ã¯ã©ã€ã¢ã³ããç¬èªã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããããã«ãããã°ã©ã æ©èœãWebãµãŒãã¹ã®ã»ãããšããŠå
¬éããŸãã
ãã®å Žåããã¹ãŠã®ããã°ã©ã ã³ãŒããå®è¡å¯èœã¢ãžã¥ãŒã«ã«é
ç·ãããŠããããããããã®èŠä»¶ãæºããããšã¯å°é£ã§ãã
次ã®å³ã¯ããã®æ©èœã®åœ±é¿ãåããªãèšèšãšã¯å¯Ÿç
§çã«ãåºå®èšèšã®äŸã瀺ããŠããŸãã ãããã¯ç Žç·ã§åºåãããŠããŸãã å³ãããããããã«ãåå©çšå¯èœãªã¢ãžã¥ãŒã«ïŒããžãã¯ïŒéã®ã³ãŒãã®é
åžãããã³WebãµãŒãã¹ã¬ãã«ã§ã®æ©èœã®å
¬éã«ãããããŸããŸãªã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ïŒã¢ããªïŒã§äœ¿çšã§ããããã«ãªããééããªãå©ç¹ã§ãã

éããã¯ã¢ããªã·ãã¯ãã¶ã€ã³ãšãåŒã°ããŸãã ãããç³ã®ãããã¯ã®ããã«å°ãããŠäŸ¿å©ãªã³ãŒãã«åå²ããããšã¯å°é£ã§ãã ãã®åé¡ãåé¿ããæ¹æ³ã¯ïŒ èšè𿮵éã§ã¯ãä»ã®ã·ã¹ãã ã§ããããã®æ©èœã䜿çšããå¯èœæ§ã«ã€ããŠèããããšããå§ãããŸãã åå©çšãããå¯èœæ§ã®ããã³ãŒãã¯ãããã«åå¥ã®ã¢ãžã¥ãŒã«ãšã¯ã©ã¹ã«é
眮ããã®ãæé©ã§ãã
ç²åºŠ
ç²åºŠã¯2ã€ã®ã¿ã€ãã«åé¡ã§ããŸãã
- ç²åºŠã®çºé;
- ç°å¢ã®ç²åºŠã
éçºã®ç²æ§ã¯ãéžæããã¢ããªã±ãŒã·ã§ã³èšèšã«åŸãã®ãæ¯èŒçé£ããããšã§ç€ºãããŸãã ããã¯ãããã°ã©ããŒãæºããå¿
èŠã®ããèŠä»¶ãå€ãããããã«ãã¯ããã«äŸ¿å©ãªéçºãã¹ããããšããäºå®ã«ããå¯èœæ§ããããŸãã ç°å¢ã®ç²æ§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®çµã¿ç«ãŠãå±éãããã³ãã¹ãã®ããã»ã¹ã®éå¹çæ§ã«çŸããŸãã
éçºç²åºŠã®ç°¡åãªäŸãšããŠãä»ã®ã³ã³ããŒãã³ãïŒã¢ãžã¥ãŒã«2ããã³ã¢ãžã¥ãŒã«3ïŒã§äœ¿çšããããã«å¥ã®ã¢ãžã¥ãŒã«ïŒã¢ãžã¥ãŒã«1ïŒã«ïŒèšèšã«ããïŒé
眮
ããå¿
èŠããã宿°ã䜿çšããäœæ¥ãæããããšãã§ããŸãã
äœããã®çç±ã§ã宿°ã¢ãžã¥ãŒã«ã®ã¢ã»ã³ããªããã»ã¹ã«ããªãã®æéããããå Žåãéçºè
ãã¢ãžã¥ãŒã«ã®çµäºãæåŸ
ããããšã¯å°é£ã§ãã ããã«ã宿°ã¢ãžã¥ãŒã«ã«ã¯ãããžãã¹ããžãã¯ã®æ ¹æ¬çã«ç°ãªãéšåïŒéèã¢ãžã¥ãŒã«ãšããŒã±ãã£ã³ã°ã¢ãžã¥ãŒã«ïŒã«é¢é£ããéåžžã«ç°çš®ã®ãšã³ãã£ãã£ãå«ãŸããŠãããšããäºå®ã«æ³šæãæãããšãã§ããŸãã ã€ãŸãã宿°ã®ã¢ãžã¥ãŒã«ã¯ãäºãã«ç¬ç«ããçç±ã§é »ç¹ã«å€æŽãããå¯èœæ§ãããã倿Žã®åæããã»ã¹ãšãã圢ã§è¿œå ã®åé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã
ããã¯ãã¹ãŠãéçºããã»ã¹ãé
ãããããã°ã©ãã«è² æ
ããããå¯èœæ§ããããŸãã ç²æ§ã®äœãèšèšã®ãªãã·ã§ã³ã¯ãããžãã¹ããžãã¯ã®åã¢ãžã¥ãŒã«ã«1ã€ãã€ã宿°ã®åå¥ã®ã¢ãžã¥ãŒã«ãäœæããããåå¥ã®ã¢ãžã¥ãŒã«ãéžæããââã«å®æ°ãé©åãªå Žæã«è»¢éããããšã§ãã
ç°å¢ã®ç²æ§ã®äŸãšããŠã¯ããªã¢ãŒãã¯ã©ã€ã¢ã³ãä»®æ³ãã·ã³ã§ã®ã¢ããªã±ãŒã·ã§ã³ã®éçºãšãã¹ãããããŸãã ãã®ãããªã¯ãŒã¯ãããŒã¯ãã€ã³ã¿ãŒãããæ¥ç¶ãé
ãããã«èããããªãå Žåããããéçºè
ã¯èšè¿°ãããã³ãŒãã®çµ±åãã¹ããäœç³»çã«ç¡èŠã§ããŸãããã®æ©èœã䜿çšãããšãã¯ã©ã€ã¢ã³ãåŽã§åé¡ãçºçããå¯èœæ§ããããŸãïŒãã°ïŒã
äžèŠãªé£æåºŠ
ãã®å Žåããã¶ã€ã³ã«ã¯çŸåšäœ¿çšãããŠããªãæ©èœããããŸãïŒã€ãŸããå°æ¥ã®ããã«ã§ããã䟿å©ãªå Žåã¯ã©ãã§ããããïŒã ãã®äºå®ã¯ãããã°ã©ã ã®ãµããŒããšä¿å®ãè€éã«ããéçºãšãã¹ãã®æéãå¢å ãããå¯èœæ§ããããŸãã ããšãã°ãããŒã¿ããŒã¹ããããŒã¿ãèªã¿èŸŒãå¿
èŠãããããã°ã©ã ãèããŠã¿ãŸãããã ãã®ããã«ãå¥ã®ã³ã³ããŒãã³ãã§äœ¿çšãããç¹å¥ãªDataManagerã³ã³ããŒãã³ããäœæãããŸããã
class DataManager { object[] GetData() {
éçºè
ããçŸåšäœ¿çšãããŠããªãããŒã¿ããŒã¹ã«ããŒã¿ãæžã蟌ãããã®æ°ããã¡ãœãããDataManagerã«è¿œå ããå ŽåïŒWriteDataïŒãããã¯å°æ¥çã«ã¯ã»ãšãã©äœ¿çšãããªãå¯èœæ§ããããŸãããããã¯äžå¿
èŠãªè€éãã®å
åã§ãã
äžèŠãªè€éãã®ãã1ã€ã®äŸã¯ããããããå Žåã«å¯Ÿå¿ãããã€ã³ã¿ãŒãã§ã€ã¹ã§ãã ããšãã°ãæåååã®ãªããžã§ã¯ããåãå
¥ããåäžã®Processã¡ãœãããæã€ã€ã³ã¿ãŒãã§ã€ã¹ãèããŸãã
interface IProcessor { void Process(string message); }
ã¿ã¹ã¯ãå³å¯ã«å®çŸ©ãããæ§é ãæã€ç¹å®ã®ã¿ã€ãã®ã¡ãã»ãŒãžãåŠçããå Žåãéçºè
ã«ãã®è¡ãæ¯åç¹å®ã®ã¿ã€ãã®ã¡ãã»ãŒãžã«ãã·ãªã¢ã©ã€ãºãããããããå³å¯ã«åæå®ãããã€ã³ã¿ãŒãã§ã€ã¹ãäœæããæ¹ãç°¡åã§ãã
å¥ã®ãã€ã³ãã¯ãããããŸã£ããå¿
èŠãªãå Žåã®èšèšãã¿ãŒã³ã«å¯Ÿããé床ã®ç±æã§ãã çµæãšããŠãããã¯ç²åºŠèšèšã«ã€ãªããå¯èœæ§ããããŸãã
æœåšçã«æªäœ¿çšã®ã³ãŒããæžãã®ã«æéãç¡é§ã«ããã®ã¯ãªãã§ããïŒ QAã¯å®éã«å
¬éããããµãŒãããŒãã£ã®ã¯ã©ã€ã¢ã³ãã䜿çšã§ããããã«ãªã£ãŠããããããã®ãããªã³ãŒãããã¹ãããããã«å¿
èŠã«ãªãå ŽåããããŸãã ããããªãªãŒã¹æéã䜿ãæãããŸãã å¯çšæ§ããåŸãããå©çãéçºãšãã¹ãã®ã³ã¹ããè¶
ããããšãæ¡ä»¶ã«ã®ã¿ãå°æ¥ã®æ©èœãèšå®ãã䟡å€ããããŸãã
äžèŠãªåçŸæ§
ããããéçºè
ã®å€§å€æ°ã¯ãã®æ©èœã«åºäŒã£ããããŸãã¯åºããããŸãããããã¯ãåãããžãã¯ãŸãã¯ç¹å®ã®ã³ãŒãå
šäœã®è€æ°ã®ã³ããŒããæããŸãã äž»ãªè
åšã¯ã倿Žãè¡ãéã®ãã®ãããªã³ãŒãã®è匱æ§ã§ããããå Žæã§äœããä¿®æ£ããåŸãå¥ã®å Žæã§ãããè¡ãã®ãå¿ããããšããããŸãã ãŸããã³ãŒãã«ãã®æ©èœããªãå Žåã«æ¯ã¹ãŠã倿Žãè¡ãéã«ããå€ãã®æéãå¿
èŠã§ãã
äžå¿
èŠãªåçŸæ§ã¯ãéçºè
ã®é倱ã®çµæã§ããå¯èœæ§ããããŸãããŸããã³ãŒããç¹°ãè¿ããªãããšã¯ããããè¡ããããã¯ããã«å°é£ã§å±éºãªå Žåãèšèšã®åæ§/è匱æ§ã®äž¡æ¹ã«ãªããŸãã ãã ãããããã«ããŠããåçŸæ§ãèš±å¯ããªãã§ãã ããããŸããåå©çšå¯èœãªã»ã¯ã·ã§ã³ãäžè¬çãªã¡ãœãããšã¯ã©ã¹ã«è»¢éããããšã«ãããã³ãŒããçµ¶ããæ¹åããå¿
èŠããããŸãã
èªã¿ã«ãã
ãã®çç¶ã¯ãã³ãŒãã®èªã¿åããšçè§£ãå°é£ã§ãããšããäºå®ïŒããã³ãã®çç±ïŒã«çŸããŠããŸãã å¯èªæ§ãäœãçç±ã¯ãã³ãŒãã®èšèšèŠä»¶ïŒæ§æã倿°ã®åœåãã¯ã©ã¹ãªã©ïŒã®éåãå®è£
ããžãã¯ã®æ··ä¹±ãªã©ã§ãã
以äžã¯ãããŒã«å€æ°ãæäœããã¡ãœãããå®è£
ããèªã¿ã«ããã³ãŒãã®äŸã§ãã
void Process_true_false(string trueorfalsevalue) { if (trueorfalsevalue.ToString().Length == 4) {
ããã§ã¯ãããã€ãã®åé¡ã匷調ã§ããŸãã ãŸããã¡ãœãããšå€æ°ã®ååã¯ãäžè¬ã«åãå
¥ããããŠããèŠåã®å¯Ÿè±¡ã§ã¯ãããŸããã 第äºã«ãã¡ãœããã®å®è£
ã¯æé©ã§ã¯ãããŸããã
ãããããæååã§ã¯ãªãããŒã«å€ãããã«åãå
¥ããå¿
èŠããããŸãã ãã ããæååãåãå
¥ããå Žåã§ããã¡ãœããã®å
é ã§ããŒã«å€ã«å€æããæååã®é·ããæ±ºå®ããã¡ãœããã䜿çšããªãæ¹ãé©åã§ãã 第äžã«ãé€å€ããã¹ãïŒããã¯è¯ããããŸããïŒãããžãã¹ã¹ã¿ã€ã«ãšæ£åŒã«äžèŽããŠããŸããã ãã®ãããªããã¹ããèªããšãã³ãŒãã¯çŽ äººã«ãã£ãŠæžããããšæãããããããŸããïŒããããéèŠãªãã€ã³ãã§ãããããã§ãïŒã ã¡ãœããã¯æ¬¡ã®ããã«æžãæããããšãã§ããŸãïŒæååã§ã¯ãªãããŒã«å€ãåãå ŽåïŒã
public void Process(bool value) { if (value) {
次ã«ãå¥ã®ãªãã¡ã¯ã¿ãªã³ã°ãªãã·ã§ã³ã瀺ããŸãïŒãŸã æååãåãå
¥ããå¿
èŠãããå ŽåïŒã
public void Process(string value) { bool bValue = false; if (!bool.TryParse(value, out bValue)) { throw new ArgumentException($"The {value} is not boolean"); } if (bValue) {
åé¡ãçºçãå§ããå Žåãèªã¿ã«ããã³ãŒãã«å¯ŸããŠãªãã¡ã¯ã¿ãªã³ã°ãå®è¡ããå¿
èŠããããŸãã ããšãã°ããã®ã¡ã³ããã³ã¹ãšäŒæã倿°ã®ãã°ã®åºçŸã«ã€ãªããå Žåã
ããã
ããã°ã©ã ã®è匱æ§ãšã¯ã倿Žããã£ãå Žåã®å
èš³ã®åçŽããæå³ããŸãã å
èš³ã«ã¯ãã³ã³ãã€ã«ãšã©ãŒãšã©ã³ã¿ã€ã ãšã©ãŒã®2çš®é¡ããããŸãã åè
ã¯åæ§ã®è£åŽã«ãªãå¯èœæ§ããããåŸè
ã¯ã¯ã©ã€ã¢ã³ãåŽã«æ¢ã«ããããšãå€ããããæãå±éºã§ãã ããã§ããããã¯è匱æ§ã®ææšã§ãã
ã€ã³ãžã±ãŒã¿ã¯ééããªãçžå¯Ÿçã§ãã 誰ããéåžžã«æ
éã«ã³ãŒããä¿®æ£ãã倱æã®å¯èœæ§ã¯äœãã§ãã ããã©ããã誰ã-æ¥ãã§ãäžæ³šæã§ã ããã§ããåããšã°ãŒãã¥ãŒã¿ãŒã§ã¯ãç°ãªãã³ãŒããç°ãªãæ°ã®ãšã©ãŒãçæããå¯èœæ§ããããŸãã ãããããå€èªãã«ããã»ã©è€éã«ãªããã³ã³ãã€ã«æ®µéã§ã¯ãªãããã°ã©ã ã®å®è¡æéã«äŸåããã»ã©è匱ã«ãªããŸãã
åæã«ãæ©èœã¯ãã°ãã°å€æŽãããããšãããªãã£ããšããããšãå£ããŸãã ããŸããŸãªã³ã³ããŒãã³ãã®ããžãã¯éã®æ¥ç¶æ§ãé«ããããåé¡ãçºçããå¯èœæ§ããããŸãã
ç¹å®ã®äŸãèããŠã¿ãŸãããã ããã§ãç¹å®ã®ããŒã«ïŒroleIdãã©ã¡ãŒã¿ãŒã«ãã£ãŠæ±ºå®ãããïŒã䜿çšãããŠãŒã¶ãŒèš±å¯ã®ããžãã¯ã¯ãç¹å®ã®ãªãœãŒã¹ïŒresourceUriïŒã«ã¢ã¯ã»ã¹ããããšã«ãããéçã¡ãœããã«ãã£ãŠã¢ã¯ã»ã¹ãããŸãã
static void Main() { if (Helper.Authorize(1, "/pictures")) { Console.WriteLine("Authorized"); } } class Helper { public static bool Authorize(int roleId, string resourceUri) { if (roleId == 1 || roleId == 10) { if (resourceUri == "/pictures") { return true; } } if (roleId == 1 || roleId == 2 && resourceUri == "/admin") { return true; } return false; } }
ããžãã¯ãããªããæ¯æ·±ããããšã«æ°ä»ããããããŸããã æããã«ãæ°ãã圹å²ãšãªãœãŒã¹ã远å ãããšãç°¡åã«å£ããŠããŸããŸãã ãã®çµæãäžéšã®ããŒã«ãç¹å®ã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãååŸãŸãã¯åªå€±ããå ŽåããããŸãã 以äžã«ç€ºãããã«ããªãœãŒã¹èå¥åãšãµããŒããããŠããããŒã«ã®ãªã¹ããä¿åããResourceã¯ã©ã¹ãäœæãããšãè匱æ§ã軜æžãããŸãã
static void Main() { var picturesResource = new Resource() { Uri = "/pictures" }; picturesResource.AddRole(1); if (picturesResource.IsAvailable(1)) { Console.WriteLine("Authorized"); } } class Resource { private List<int> _roles = new List<int>(); public string Uri { get; set; } public void AddRole(int roleId) { _roles.Add(roleId); } public void RemoveRole(int roleId) { _roles.Remove(roleId); } public bool IsAvailable(int roleId) { return _roles.Contains(roleId); } }
ãã®å Žåãæ°ãããªãœãŒã¹ãšããŒã«ã远å ããããã«ãæ¿èªããžãã¯ã³ãŒãã®å€æŽã¯ãŸã£ããå¿
èŠãããŸãããã€ãŸããæ¬è³ªçã«ç Žå£ãããã®ã¯ãããŸããã
å®è¡æãšã©ãŒããã£ããããã®ã«åœ¹ç«ã€ãã® æåãèªåããŠããããã¹ãã ãã¹ãããã»ã¹ãé©åã«ç·šæããã°ããã»ã©ãè匱ãªã³ãŒããã¯ã©ã€ã¢ã³ãåŽã«çŸãããšããä¿è·ã匷åãããŸãã
è匱æ§ã¯ãå€ãã®å Žåãåæ§ãèªã¿ããããäžå¿
èŠãªåçŸæ§ãªã©ããã¶ã€ã³ã®æªãã®è£è¿ãã§ãã
ãããã«
åé¡èšèšã®äž»ãªæ©èœã匷調ããŠèª¬æããããšããŸããã ãããã®ããã€ãã¯çžäºæ¥ç¶ãããŠããŸãã èšèšäžã®åé¡ãåžžã«å°é£ã«ã€ãªãããšã¯éãããçºçã®å¯èœæ§ã瀺ãã ãã§ããããšãæç¢ºã«çè§£ããå¿
èŠããããŸãã ãããã®å
åã®ãã¬ãŒã¹ãå°ãªãã»ã©ããã®ç¢ºçã¯äœããªããŸãã