ã¯ããã«
次ã®äžé£ã®èšäºã«ã¯ãããã€ãã®äž»èŠãªç®æšããããŸãã
- æçšãªãœãããŠã§ã¢ãäœæãã-ããã°ã©ã ãšæŽæ°ããã°ã©ã ã®ã€ã³ã¹ããŒã©ãŒã
- ãœãããŠã§ã¢éçºã«å¯Ÿãããªããžã§ã¯ãæåã¢ãããŒãã®å©ç¹ã瀺ããç°¡åã«æ¡åŒµå¯èœãªãœãããŠã§ã¢ã¢ãŒããã¯ãã£ãäœæããæ¹æ³ãæããŸãã
ãã®äžé£ã®èšäºã§ã¯ãããã±ãŒãžã䜿çšããŠäŒç€Ÿã®ãœãããŠã§ã¢è£œåãã€ã³ã¹ããŒã«ããã³æŽæ°ã§ãããœãããŠã§ã¢äœæã®æŽå²ãå
±æããããšæããŸãã ïŒæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã®äœ¿çšãæåŠããŠïŒç¬èªã®ã€ã³ã¹ããŒã©ãŒãäœæããå¿
èŠãããã®ã¯ãã€ã³ã¹ããŒã©ãŒã®èŠä»¶ã®ç¹ç°æ§ãåå ã§ãã äžé£ã®èšäºã®ãããã¯ãç°ãªããããéçºã®å¿
èŠæ§ã®çè«çæ ¹æ ãæãäžããŸããã
éçºäžã®ã¢ãŒããã¯ãã£ã®äž»ãªèŠä»¶ã¯æ¬¡ã®ãšããã§ãã
- ãã©ã³ã¶ã¯ã·ã§ã³ã¡ã«ããºã ã®å®è£
ãããã³ãã©ã³ã¶ã¯ã·ã§ã³ã«ã¯ãSQLãã©ã³ã¶ã¯ã·ã§ã³ã ãã§ãªãããã¡ã€ã«ãã©ã³ã¶ã¯ã·ã§ã³ã ãã§ãªããã¬ãžã¹ããªãšã³ããªãæ§æãã¡ã€ã«ã®å€æŽãªã©ãä»ã®OSãªãœãŒã¹ã®å€æŽã«é¢é£ãããã©ã³ã¶ã¯ã·ã§ã³ãå«ãŸããŸãã
- ã€ã³ã¹ããŒã©ãŒã®æäœããŒã¹ã®æ¡åŒµæ§ãã€ãŸãããã©ã³ã¶ã¯ã·ã§ã³ãµããŒãã®æç¡ã«ããããããæ°ããã¿ã€ãã®ã³ãã³ãïŒæäœïŒã®è¿œå ã
ãããã£ãŠãæåã®è¿äŒŒã®åããã±ãŒãžã«ã¯ä»¥äžãå«ãŸããŠããå¿
èŠããããŸãã
- å®è¡ãããã³ãã³ãã®ã·ãŒã±ã³ã¹ã®èª¬æã
- ããŒã¿ãã¡ã€ã«ã®ä»»æã®ã»ããã
.NETãã©ãããã©ãŒã ã«ã¯ããªããžã§ã¯ããXMLãã¡ã€ã«ã«ã·ãªã¢ã©ã€ãº/ãã·ãªã¢ã©ã€ãºããããã®äŸ¿å©ã§ã·ã³ãã«ãªã¯ã©ã¹ãå«ãŸããŠãããããã³ãã³ãã®ã·ãŒã±ã³ã¹ã®èª¬æãXMLãã¡ã€ã«ã«ä¿åããŸããããã«ãããæäœã詳ãã調ã¹ãããšãªããã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ããžãã¯ã«éäžããããšãã§ããŸããè¡ã§ã
ããã±ãŒãžèªäœã¯TARã¢ãŒã«ã€ãã®åœ¢åŒã§ãå Žåã«ãã£ãŠã¯GZIPå§çž®ã®å¯Ÿè±¡ãšãªãããšããããŸãããããã±ãŒãžã®ä¿åæ¹æ³ïŒãã®æ§é ãšå§çž®æ¹æ³ïŒãå€æŽããããšã決å®ãããšãã«ãæ¢åã®ã³ãŒããžã®æå°éã®ä»å
¥ãå¿
èŠã«ãªãããã«ãœãããŠã§ã¢ãèšèšããããšããŸãã
å°æ¥ã®ãœãããŠã§ã¢ã®ã³ãã³ãã»ãããæšå®ããŸãããã
- ãã¡ã€ã«æäœ
- SQLæäœ
- IISãµãŒããŒç®¡ç
- å€åäœã...
åè¿°ããããã«ãã³ãã³ãã®ã»ããã¯æ¡åŒµã§ããŸãã ããã«ãäž»ãªæ©èœïŒãœãããŠã§ã¢ã³ã¢ïŒãå¥ã®ã¢ã»ã³ããªã«ä¿åãããå®è¡ãããå¯èœæ§ã®ããã³ãã³ããããã©ã°ã€ã³ã®æŠå¿µã䜿çšããŠã¡ã€ã³ã¢ãžã¥ãŒã«ã«æ¥ç¶ãããå¥ã®ã¢ã»ã³ããªã«èšå®ãããããã«ããŸãã
ãœãããŠã§ã¢éçºããã»ã¹äžã«è§£æ±ºããå¿
èŠãããèå³æ·±ãã¿ã¹ã¯ã®æ°ããããã§ã«æ¯ãåŒãåã£ãŠããŸãã ãããã®è¡ãæžããŠããæç¹ã§ãã¢ããªã±ãŒã·ã§ã³ã®å®éã®ãããã¿ã€ããæ¢ã«ãããå®éã«ã¯ãŸã 宣èšããããã¹ãŠã®æ©èœãåããŠããªããããå€æŽãå ããããšã¯ç§ãæããããå°ãé£ããããšãããã«äºçŽããŸãã ããã§ãç§ã¯ãŸã ããããªãã¡ã¯ã¿ãªã³ã°ããŸãã ãã¡ã€ã«æäœçšã®ãã©ã³ã¶ã¯ã·ã§ã³ãäœæããæ©èœã¯æ¢ã«ãããŸãããåäžã®ãã©ã³ã¶ã¯ã·ã§ã³å
ã§ãã¡ã€ã«æäœãšSQLæäœãçµã¿åãããæ¹æ³ã¯ããããŸããã ãã©ã°ã€ã³ã®ãµããŒãã¯ãŸã å®è£
ãããŠããŸããã ã³ãã³ãã»ããã«æ°ããã³ãã³ããè¿œå ãããšã4ã€ã®ãã¡ã€ã«ãç·šéããå¿
èŠããããŸããå¿
èŠãªã®ã¯ãæ°ããã¯ã©ã¹ã宣èšããã ãã§ãã äžè¬çã«ãä»äºã¯èãããŠããªãçã§ãã
æåã®è¿äŒŒã§ã¯ãã·ã¹ãã ã®ã¯ã©ã¹å³ã¯æ¬¡ã®ããã«ãªããŸãã

ããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ãããã¹ãŠã®æäœïŒã³ãã³ãïŒã®èŠªã¯ã©ã¹ãšãããããç¶æ¿ãããããã€ãã®ã³ãã³ãïŒCreateFileCommandããã³DeleteFolderCommandïŒããããæçµçã«ã¯å€ããªããŸãã ãŸããäžé£ã®ã³ãã³ããå«ãPackageBuilderã¯ã©ã¹ããããŸãã PackageBuilderã¯ãããã±ãŒãžãäœæããŠãŠãŒã¶ãŒã«æäŸã§ããŸãã ããã±ãŒãžã¯ä¿åããŠå®è¡ã§ããŸãã
ãã®çµæããããã®ã¯ã©ã¹ã䜿çšããæ¬äŒŒã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
void CreatePackage() {
ãã¡ãããã¯ã©ã¹ã®æ§é ã«ã¯ãŸã å€ãã®å€å®¹ãèµ·ããæéããããŸãããã©ããããå§ããªããã°ãªããŸããã
åºæ¬çãªã³ãã³ãã·ã¹ãã
ã€ã³ã¹ããŒã©ãŒã³ãã³ãã®åºæ¬çãªã·ã¹ãã ãç解ããŠã¿ãŸãããã ããã§ã¯ããŠãŒã¶ãŒãæ©èœãç°¡åã«æ¡åŒµã§ããããã«ãããããã€ã³ã¹ããŒã©ãŒã®ãã¹ãŠã®æ©èœããªã¹ãããã€ããã¯ãããŸããã
ããã§ã¯ãæ®ãã®ããŒã ãçµåã§ããåºæ¬çãªã¯ã€ã€ãŒãã¬ãŒã ã³ãã³ãã«ã€ããŠèª¬æããŸãã ãã¹ãŠã®ã³ãã³ããç¶æ¿ãããæœè±¡ã¯ã©ã¹ã«ã¯ãåäžã®DoïŒïŒã¡ãœãããå«ãŸããŸãããã®ã¡ãœããã¯ãã³ãã³ãã«ãã£ãŠããã°ã©ã ãããã¢ã¯ã·ã§ã³ãå®éã«å®è¡ããŸãã ããšãã°ãDeleteFileã³ãã³ãã¯ããã®DoïŒïŒã¡ãœããå
ã«æ£ç¢ºã«ãã¡ã€ã«ãäœæãããããªãã¯ããããã£æååFilePathãåŒæ°ïŒåé€ããããã¡ã€ã«ã®ãã¹ïŒãšããŠäœ¿çšããŸãã ãããã©ã®ããã«èŠãããã§ãïŒ
public abstract class Command { public abstract void Do(); } public class DeleteFile: Command { public string FilePath { get; set; } public override void Do() { File.Delete(FilePath); } }
ä»ã®ãã¹ãŠã®ã³ãã³ãã¯ãŸã£ããåãæ¹æ³ã§å®è£
ãããŸããã³ãã³ãã¯æœè±¡ã¯ã©ã¹Commandãç¶æ¿ããç¶æ¿ãããã¯ã©ã¹ã®ãããªãã¯ããããã£ãåŒæ°ãšããŠäœ¿çšããŠDoïŒïŒã¡ãœããã眮ãæããŸãã
ãããã£ãŠãæåã®è¿äŒŒã§ã¯ãPackageBuilderã§ããŒã ã次ã
ã«è¿œå ããããšæ³å®ããŸãããããã®ã¢ãããŒãã®æè»æ§ã®ãªããããã«å®æããŸããã ã€ã³ã¹ããŒã©ã³ãã³ãã®ã·ãŒã±ã³ã¹ããã¿ãŒã²ãããã·ã³ã«ã€ã³ã¹ããŒã«ãããŠãããµãŒãããŒãã£ãœãããŠã§ã¢ã®ããŒãžã§ã³çªå·ã«äŸåããå¿
èŠããããšããŸãã ããšãã°ããµã€ãã®ã€ã³ã¹ããŒã«ã¢ã«ãŽãªãºã ã¯ãã¿ãŒã²ãããã·ã³ã«ã€ã³ã¹ããŒã«ãããŠããIISã®ããŒãžã§ã³ã«å€§ããäŸåããŠããŸãã ãŸãã¯ãããšãã°ãã€ã³ã¹ããŒã©ãŒã¯ã¿ãŒã²ãããã·ã³ã«å¿
èŠãªCOMãªããžã§ã¯ããååšãããã©ããã確èªããå¿
èŠã«å¿ããŠããããã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ãããã®ãã¹ãŠã®å Žåã«ãããŠãããã€ãã®ã¬ãžã¹ããªå€ããã§ãã¯ããããããèªã¿åãããå€ã«å¿ããŠããã«ã¢ã¯ã·ã§ã³ãéžæããå¿
èŠããããŸãã ãããããããŒã¹ã»ããã«æ¡ä»¶ä»ãå®è¡ã³ãã³ããå¿
èŠã«ãªããŸããããããExecuteIfãšåŒã³ãŸãããã ã€ã³ã¿ãŒãã§ã€ã¹ã®èª¬æã¯æ¬¡ã®ãšããã§ãã
public class ExecuteIf : Command { public string ArgumentName { get; set; } public Command Then { get; set; } public Command Else { get; set; } public void Do(); }
ã€ãŸããDoïŒïŒã¡ãœããã¯ãããå®è¡ã³ã³ããã¹ãããArgumentNameãšããããŒã«å€æ°ãèªã¿åããTrueã®å Žåã¯Thenã³ãã³ããå®è¡ããããã§ãªãå Žåã¯Elseã³ãã³ããå®è¡ããŸãã ããã§ãç§ãã¡ã¯æ°ããæŠå¿µã«çŽé¢ããŠããŸã-å®è¡ã®ã³ã³ããã¹ãã å®è¡ã³ã³ããã¹ããExecutionContextã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãšããŸãããã®ã€ã³ã¹ã¿ã³ã¹ã¯ãåã³ãã³ãã®DoïŒïŒã¡ãœããã®åŒã³åºãã®åŒæ°ã«ãªããŸãã ãªãŒããŒããŒããããDoïŒExecutionContextïŒã¡ãœããã§æœè±¡ã¯ã©ã¹ã€ã³ã¿ãŒãã§ã€ã¹ãèšããŸããªãããã«ãDoïŒïŒã¡ãœããã¯åžžã«ExecutionContextåŒæ°ã§åŒã³åºãããããšã«åæããŸãããå®è¡ã³ã³ããã¹ããå€æŽããªãã³ãã³ãã¯ãDoïŒïŒã¡ãœããåŒæ°ãåã«ç¡èŠããŸãã
ãããã£ãŠãã¯ã©ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
public abstract class Command { public abstract void Do(ExecutionContext context); } public class DeleteFile: Command { public string FilePath { get; set; } public override void Do(ExecutionContext context) { File.Delete(FilePath); } } public class ExecuteIf : Command { public string ArgumentName { get; set; } public Command Then { get; set; } public Command Else { get; set; } public void Do(ExecutionContext context); }
ã³ãã³ãã®åºæ¬ã»ããã®èª¬æãã泚æãããããã¯ã©ã¹ExecutionContextãèšèšããŸãã
å®è¡ã³ã³ããã¹ã
ããã±ãŒãžå
ã§å®è¡ãããåããŒã ã¯ãæçšãªäœæ¥ãå®è¡ããããšã«å ããŠãå®è¡çµæãè¿ãããšãã§ããŸãã ããšãã°ãSQLã³ãã³ãã¯ãã¹ãã¢ãããã·ãŒãžã£ã®å®è¡çµæãŸãã¯å€æŽãããè¡æ°ãè¿ãããšãã§ããã¬ãžã¹ããªããèªã¿åããšãèªã¿åã£ãå®éã®å€ãè¿ãããŸãã ããã«ãäžè¬çãªå Žåãã³ãã³ãã¯1ã€ã®ValueTypeçµæã§ã¯ãªããè€æ°ãè¿ãããšãã§ããŸããããšãã°ãDataSetãªã©ã®è€éãªçµæãè¿ãããšãã§ããŸãã ä»ã®ããŒã ã以åã®æäœã®çµæã«äŸåããŠæ£ããåäœããããã«ã¯ã以åã®ã³ãã³ãã®çµæã«ã¢ã¯ã»ã¹ããæ¹æ³ãããŒã ã«æäŸããå¿
èŠããããŸãã åæã«ãåç¹å®ã®ã³ãã³ãã¯ãå³å¯ã«åã®ã³ãã³ãã®å®è¡çµæã ãã§ãªããäžè¬ã«ã以åã«å®è¡ãããã³ãã³ããå«ããŠã以åã®ããã€ãã®ã³ãã³ãã®å®è¡çµæã«äžåºŠã«äŸåã§ããŸãã ããšãã°ãSqlQueryCommandã³ãã³ãã«ãã£ãŠä»¥åã«è¿ãããæååã®é
åå
ã®ïŒãŠãŒã¶ãŒãå
¥åããïŒè¡ã®ã€ã³ããã¯ã¹ãå®çŸ©ããFindIndexCommandã³ãã³ããäœæã§ããŸãã ã芧ã®ãšããããã®å Žåã®FindIndexCommandã³ãã³ãã®çµæã¯ãSqlQueryCommandã³ãã³ãã«ãã£ãŠè¿ãããDataSetãšãUserInputCommandã³ãã³ãã䜿çšããŠãŠãŒã¶ãŒãå
¥åããæååã®2ã€ã®åŒæ°ã«åºã¥ããŠããŸãã ç§ã¯ãŸã èšèšããããŠããªãããŒã ã®ååã§æ¥åãè¡ã£ãŠãããããŒã ã®ååãããã®ç®çãæ確ã§ããããšãæ瀺ããŠããŸãã
ãŠãŒã¶ãŒã«ãã®ãããªæè»æ§ãäžããããã«ãå®è¡ã³ã³ããã¹ãExecutionContextãå°å
¥ããäºå®ã§ãã ç¹å®ã®ããŒã®äžã«å€ãæ ŒçŽããå€ãããå Žåã¯ããããå€ãèªã¿åãããšãã§ããŸãã å®è¡ãããåã³ãã³ãã¯ãDoïŒïŒã¡ãœããã®æåã®åŒæ°ãšããŠåãåããŸãã ãããã£ãŠãåããŒã ã¯ã以åã«å®è¡ããããã¹ãŠã®ããŒã ã®çµæã«ã¢ã¯ã»ã¹ã§ããŸãã
ExecutionContextã¯ã©ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
public class ExecutionContext { private Dictionary<string, object> _results = new Dictionary<string, object>(); public void SaveResult(string key, object value) { _results[key] = value; } public object GetResult(string key) { return _results[key]; } }
ããããå°æ¥ãä»ã®ã¡ãœãããè¿œå ããããããããŸããããä»ã®ãšããã¯äžèšã®ãªã¹ãã®ãããªåçŽãªåœ¢åŒã«ãªããŸãã
æåã¯ã次ã®ãããªExecutionContextã䜿çšããŠããŸããã
public class DeleteFile: Command { public string FilePath { get; set; } private ExecutionContext _context; public DeleteFile(ExecutionContext context) { _context = context; } public DeleteFile() { } public override void Do() { } }
ã€ãŸããã€ã³ã¹ã¿ã³ã¹ãåŒæ°ãšããŠã³ãã³ãã³ã³ã¹ãã©ã¯ã¿ãŒã«éä¿¡ãããã©ã€ããŒãå€æ°ã«ä¿åããŠãããå¿
èŠã«å¿ããŠDoïŒïŒã¡ãœããã§äœ¿çšããŸãã ãã ããã³ãã³ãããã±ãŒãžã¯éåžžãæåã«ã·ãªã¢ã«åãããŠä¿åããã次ã«çµæãã¡ã€ã«ããã·ãªã¢ã©ã€ãºãããŠå®è¡ãããããšãæãåºããŸããããã®2çªç®ã®ã¹ãããã§ã¯ããã·ãªã¢ã©ã€ã¶ãŒãããã±ãŒãžãã¡ã¢ãªã«èªåçã«åŸ©å
ããŸãããéããå€æ°_contextãåæåãããŸããïŒéããŠããããïŒããã±ãŒãžã¯åæåãããŠããªãã³ã³ããã¹ãã§å®è¡ãããŸãã ã³ã³ããã¹ãã¯ããŠã³ããŒãããããã±ãŒãžã®å®è¡æ®µéã§ã®ã¿å¿
èŠã§ãããšèããã³ã³ããã¹ããDoïŒïŒã¡ãœããã®åŒæ°ãšããŠéä¿¡ããããšã«ããŸããã ããã¯ããã«å¥ã®å©ç¹ããããããŸãã-æ°ããã³ãã³ãããšã«ãã®ç¹°ãè¿ãã³ãŒããèšè¿°ããå¿
èŠããªããªããŸããã
private ExecutionContext _context; public DeleteFile(ExecutionContext context) { _context = context; } public DeleteFile () { }
çµå±ãåŒæ°ãæã€ã³ã³ã¹ãã©ã¯ã¿ãŒã¯äžèŠã«ãªããŸãããã€ãŸããã³ã³ãã€ã©ãŒãããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãäœæãããããããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãèšè¿°ããå¿
èŠããããŸããã ããã§ãã³ãã³ããã¬ãŒã ã¯ãŒã¯ã¯æ¬¡ã®ããã«ãªããŸãã
public class DeleteFile: Command { public string FilePath { get; set; } public override void Do(ExecutionContext context) { } }
ã€ãŸãããã®äžã«äœåãªãã®ã¯ãªããæ¬è³ªã ãããããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ããµããŒãããã³éçºããããã°ã©ããŒããã®æ¬è³ªãç解ãããããªãããšãæå³ããŸãã
ããã§ãExecuteIfã³ãã³ãã®å®è£
ãèšè¿°ã§ããŸãã
public class ExecuteIf : Command { public string ArgumentName { get; set; } public Command Then { get; set; } public Command Else { get; set; } public override void Do(ExecutionContext context) { if ((bool)context.GetResult(ArgumentName)) { Then.Do(context); } else if (Else != null) { Else.Do(context); } } }
åºæ¬çãªã³ãã³ãã·ã¹ãã ã
ã€ã³ã¹ããŒã©ãŒã³ãã³ããã¬ãŒã ã¯ãŒã¯ã®äœæã«æ»ããŸãããã åºæ¬æœè±¡ã¯ã©ã¹Commandãããã³æ¡ä»¶ä»ãã³ãã³ãExecuteIfã«ã€ããŠã¯æ¢ã«èª¬æããŸããã ExecuteIfã³ãã³ãã®Thenããã³Elseãã©ã¡ãŒã¿ãŒã«ã¯ã1ã€ã®ã³ãã³ãã ãã§ãªããé£ç¶ããã³ãã³ãã®ãããã¯å
šäœãæå®ã§ããŸãã ãããŠãããã¯ã³ãã³ããèšèšããå¿
èŠãããããšãæå³ããŸã-æŒç®åæ¬åŒ§ã®é¡äŒŒç©ã ãã®ã³ãã³ããCommandSequenceãšåŒã³ãŸãã ãã®ã€ã³ã¿ãŒãã§ãŒã¹ãšå®è£
ã¯ç°¡åã§ãïŒ
public class CommandSequence : Command { public List Commands; public override void Do(ExecutionContext context) { foreach (Command command in Commands) { command.Do(context); } } }
ãã®å¯äžã®ãã©ã¡ãŒã¿ãŒã¯ã³ãã³ãã®ãªã¹ãã§ãããDoïŒïŒã¡ãœããã¯åçŽã«ããããé çªã«å®è¡ããŸãã
ExecuteIfã³ãã³ãã¯ãå
¥åã³ã³ããã¹ããšããŠå®è¡ã³ã³ããã¹ãããããŒã«å€æ°ã®ååãåãå
¥ããããšãæãåºããŠãã ããã ãã®ããŒã«å€æ°ã¯ãã³ã³ããã¹ãã®ã©ããã«è¡šç€ºãããã¯ãã§ãã 圌女ã¯ç¹å®ã®ç¶æ
ããã§ãã¯ããçµæãããã«çŸããã¯ãã§ãã ãããŠãéãæ¯èŒããããã®ããŒã ãèšèšããæãæ¥ãŸããã æååæ¯èŒã³ãã³ããéå§ããããã«èšèšããŸãã ã³ãã³ãã€ã³ã¿ãŒãã§ã€ã¹ãšãã®éšåçãªå®è£
ã¯æ¬¡ã®ããã«ãªããŸãã
public class CompareStringsCommand: Command { public string FirstOperandName { get; set; } public string SecondOperandName { get; set; } public string ResultName { get; set; } public void Do(ExecutionContext context) { string operand1 = (string)(context.GetResult(FirstOperandName)); string operand2 = (string)(context.GetResult(SecondOperandName)); bool result = Compare(operand1, operand2); context.SaveResult(ResultName, result); } }
ã³ãã³ãã¯ãã³ã³ããã¹ããã2ã€ã®å€æ°ãFirstOperandNameãšSecondOperandNameã®ååã§èªã¿åããããããæ¯èŒãïŒCompareïŒïŒã¡ãœããã䜿çšããŠæ¯èŒãæå®ããŸãïŒãæ¯èŒã®ããŒã«çµæãResultNameãšããååã§ã³ã³ããã¹ãã«ä¿åããŸãã
ãã®ã³ãã³ãã¯ãä»ã®ãã¹ãŠã®æååæ¯èŒã³ãã³ãã®åºæ¬æœè±¡ã¯ã©ã¹ã«ãªãããã®åªããåè£ã§ãããCompareïŒstringãstringïŒã¡ãœããã¯ãæœè±¡ã¯ã©ã¹ã¡ãœããã«ãªããç¶æ¿è
ã«å®è£
ããããã®åªããåè£ã§ããããšãããããŸãã 次ã«ãæœè±¡ã¯ã©ã¹ã®ã€ã³ã¿ãŒãã§ãŒã¹ã®ã¿ãæžãçŽãïŒDoïŒïŒã¡ãœããã®å®è£
ã¯åããŸãŸïŒãçžç¶äººã®1人ã®ã³ãŒããæäŸããŸãã
public abstract class CompareStringsCommand: Command { public string FirstOperandName { get; set; } public string SecondOperandName { get; set; } public string ResultName { get; set; } protected abstract bool Compare(string operand1, string operand2); public override void Do(ExecutionContext context) {
ã芧ã®ãšããããã€ããªïŒ2ã€ã®åŒæ°ïŒæ¯èŒæŒç®åã®ã³ãã³ãã»ããã¯ãCompareStringsCommandã¯ã©ã¹ã®ç¶æ¿è
ãäœæãããã®äžã«CompareïŒstringãstringïŒã¡ãœãããå®çŸ©ããã ãã§ãä»ã®æ¯èŒæäœïŒEndsWithãContainsãEqualsãNotEqualsïŒã§ç°¡åã«æ¡åŒµã§ããŸãã
ãã®æ®µéã§ã®åé
æŒç®ïŒããšãã°ãIsNullOrEmptyãªã©ïŒã¯ã第2ãªãã©ã³ããåã«ç¡èŠããŠãåãåºæ¬ã¯ã©ã¹ã䜿çšããŠå®è£
ããããšãææ¡ããŸãã
ããã«æ³šæããŸãããã CompareStringsCommandã³ãã³ãã¯ãå®è¡ã³ã³ããã¹ãã«æ ŒçŽãããŠãã2ã€ã®åŒæ°ãæ¯èŒããŸãããããã®åŒæ°ã¯ãä»ã®ã³ãã³ãã®çµæãšããŠã®ã¿ååšããŸãã ããããããšãã°ãã¬ãžââã¹ããªããèªã¿åãããè¡ãäžå®ã®éšåæååã§å§ãŸããã©ãããç¥ãããå Žåã¯ã©ãããã°ããã§ããïŒ ãã®å®æ°ãå®è¡ã³ã³ããã¹ãã«ååšããããšã確èªããå¿
èŠããããŸãã æå®ãããååã§å®è¡ã³ã³ããã¹ãã«å€ãåçŽã«ä¿åããã³ãã³ããèšèšããŸãã ããã§ã¯ãã¹ãŠãç°¡åã§ãïŒ
public class SaveConstantCommand: Command { public string ResultName { get; set; } public object Value { get; set; } public override void Do(ExecutionContext context) { context.SaveResult(ResultName, Value); } }
次ã®ç« ã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã¡ã«ããºã ã®å®è£
ã«ã€ããŠèª¬æããŸãã
第äºéšãžã®ãªã³ã¯