翻蚳è ãã ïŒ
MVCãšãã®æŽŸçãã¿ãŒã³ã«é¢ããå€ãã®è³æãæ¢ã«å ¬éããŠããŸããã誰ããç¬èªã®æ¹æ³ã§ããããç解ããŠããŸãã ããã«åºã¥ããŠãæèŠã®çžéãæèŠã®çžéãçããŸãã çµéšè±å¯ãªéçºè ã§ãããMVPãMVVMãããã³ãã¬ãŒã³ããŒã·ã§ã³ã¢ãã«ã®éããšãåãã¿ãŒã³ã§ã³ã³ããŒãã³ããäœããã¹ããã«ã€ããŠè°è«ããŸãã ç¶æ³ã¯ãå€ãã®äººãMVCã®ã¯ã©ã·ãã¯ããŒãžã§ã³ã§ã®ã³ã³ãããŒã©ãŒã®çã®åœ¹å²ãç¥ããªããšããäºå®ã«ãã£ãŠæªåããŸãã è¯ãã¬ãã¥ãŒèšäºã®ç¿»èš³ãããªãã®æ³šæã«æã£ãŠãããŸã ã
Model-View-ViewModelïŒMVVMïŒãã¿ãŒã³ã®è©³çŽ°ã詳ãã説æããåã«ãMVVMãšã¢ãã«ãšãã¬ãŒã³ããŒã·ã§ã³ãåé¢ããä»ã®ãã¶ã€ã³ãã¿ãŒã³ïŒMV *ãã¿ãŒã³ïŒã®é¡äŒŒç¹ãšçžéç¹ã説æããŠãããšåœ¹ç«ã€ãšæããŸãã
MV *ãã¿ãŒã³ã«ã¯ããªãã®æ°ããããŸããModel-View-ControllerãModel-View-PresenterãPresentation ModelãPassive ViewãSupervising ControllerãModel-View-ViewModelãªã©ã§ãã
ãã¡ãããå³ãèŠããšãç¢å°ãã³ã³ããŒãã³ãéã®é¢ä¿ã瀺ããŠããããšãããããŸãã ãããããããå¯äžã®éãã§ããïŒ ã³ã³ãããŒã©ãŒã¯PresenterãŸãã¯PresentationModelãšåãã§ããïŒ Model-View-PresenterãšModel-View-ViewModelãã©ã®ããã«æ¯èŒããŸããïŒ ãã®èšäºã§ã¯ãæãäžè¬çãªMV *ãã¿ãŒã³ã®é¡äŒŒç¹ãšçžéç¹ã«ã€ããŠèª¬æããŸãã
MV *ãã¿ãŒã³ã䜿çšããã«UIãæ§ç¯ãã
äžèšã®ãã¿ãŒã³ã䜿çšããã«ãã©ã®ããã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ïŒUIïŒãæ§ç¯ããŸããïŒ åœŒãã¯ãã©ãŒã ãåããããã«ãŠã£ãžã§ãããè¿œå ããã³ãŒãã§ããžãã¯ãèšè¿°ããŸãã Viewã®ããžãã¯ãèšè¿°ãããã®ãããªã³ãŒãã¯ãç»é¢äžã®èŠçŽ ãšçŽæ¥ããåãããããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšå¯æ¥ã«æ¥ç¶ãããŠããŸãã ããã¯è¯ãããç°¡åãªã¢ãããŒãã§ãã éåžžã«ã·ã³ãã«ãªã€ã³ã¿ãŒãã§ã€ã¹ã«ã®ã¿é©çšã§ããŸãã ããžãã¯ãããè€éã«ãªããšããã®ãããªUIã®ãµããŒãã¯æªå€¢ã«å€ããå¯èœæ§ããããŸãïŒ
åé¡ã®æ ¹æ¬ã¯ããã®æ¹æ³ã§UIãæ§ç¯ãããšãã ã¯ã©ã¹ã«ã¯å€æŽã®çç±ã1ã€ã ãããã¯ãã§ãããšããåäžã®è²¬ä»»ååã«éåããããšã§ãã UIã³ã³ããŒãã³ãã«è¡šç€ºãããžãã¯ãããã³ããŒã¿ã®ã³ãŒããå«ãŸããŠããå Žåãå€æŽããçç±ãããã€ããããŸãã ããšãã°ãããŒã¿ã®è¡šç€ºã«äœ¿çšããããŠãŒã¶ãŒèŠçŽ ã®ã¿ã€ããå€æŽããå Žåãå€æŽã¯ããžãã¯ã«åœ±é¿ãäžããŸããã ãã ããããžãã¯ã¯ã³ã³ãããŒã«ãšéåžžã«å¯æ¥ã«é¢é£ããŠãããããå€æŽããå¿ èŠããããŸãã ããã¯ãããããã³ãŒãè ãã§ãããå¯äžã®è²¬ä»»ã®ååã«éåããŠããããšã瀺ããŠããŸãã
ãããã£ãŠããã©ãŒã ã«ã³ã³ãããŒã«ã衚瀺ããããã®ã³ãŒããã€ã³ã¿ãŒãã§ãŒã¹ã®ããžãã¯ïŒãã¿ã³ãæŒããããšãã®åäœïŒãããã³ç»é¢ã«è¡šç€ºããããã®ããŒã¿ãå«ãŸããŠããå Žåã次ã®åé¡ãçºçããŸãã
è€éãªãµããŒã
UIãããžãã¯ããŸãã¯ããŒã¿ã®å€æŽã¯ãæ®ãã®éšåã®å€æŽã䌎ãå¯èœæ§ããããŸãã ãããã£ãŠãç·šéãè¡ãããšã¯ã¯ããã«å°é£ã§ãããä¿å®ãé£ãããªããŸãã
è©Šéšæ§ã®æªå
åã³ã³ããŒãã³ããåå¥ã«ãã¹ãã§ããããã«ãã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ãšããŒã¿ãèšè¿°ã§ããŸãã ãã ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«é¢é£ä»ããããã³ãŒãã¯ãUIã§ããžãã¯ãå®è¡ããããã«ãŠãŒã¶ãŒã®é¢äžãå¿ èŠãšããããšãå€ããããåäœãã¹ãã«ã¯é©ããŠããŸããã ããã«ãå€ãã®å ŽåãèŠèŠåã«ã¯ããã¹ãŠããæ£ããèŠããããšãã人ã«ããè©äŸ¡ãå¿ èŠã§ãã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã¹ããèªååãããœãªã¥ãŒã·ã§ã³ãããããšã«æ³šæããŠãã ããã ãã ãããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã®ã¿ãã·ãã¥ã¬ãŒãããŸãã ååãšããŠããããã¯åäœãã¹ããããæ§æããã³ä¿å®ãé£ãããã¢ããªã±ãŒã·ã§ã³å šäœãèµ·åããå¿ èŠããããããçµ±åãã¹ãã§æããã䜿çšãããŸã ã
- åå©çšæ§ã®äœäž
UIã³ãŒãã«ããžãã¯ã³ãŒããšããŒã¿ã³ãŒããæ··åšããŠããå Žåãåå©çšãã¯ããã«å°é£ã«ãªããŸãã
MV *ãã¿ãŒã³ã®ç®ç
åãã¿ãŒã³ã«ã¯ããªãã®éãããããŸããããããã®ç®æšã¯äŒŒãŠããŸããUIã³ãŒãïŒViewïŒãããžãã¯ã³ãŒãïŒPresenterãControllerãViewModelãªã©ïŒããã³ããŒã¿åŠçã³ãŒãïŒModelïŒããåé¢ããããšã§ãã ããã«ããããããããç¬ç«ããŠéçºã§ããŸãã ããšãã°ãããžãã¯ãšããŒã¿ã«åœ±é¿ãäžããããšãªããã¢ããªã±ãŒã·ã§ã³ã®å€èŠ³ãšã¹ã¿ã€ã«ãå€æŽã§ããŸãã
ããã«ãããžãã¯ãšããŒã¿ã¯ãã£ã¹ãã¬ã€ãšã¯å¥ãªã®ã§ãå¥ã ã«ãã¹ãã§ããŸãã åçŽãªã¢ããªã±ãŒã·ã§ã³ã®å Žåãããã¯ããã»ã©éèŠã§ã¯ãããŸããã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ãåçŽãªããŒã¿ãšãã£ã¿ãŒã§ããå Žåã ãã ããããè€éãªã€ã³ã¿ãŒãã§ã€ã¹ããžãã¯ãããå Žåãæ£ããåäœããããšãèªåçã«ç¢ºèªããæ©èœã¯éåžžã«äŸ¡å€ããããŸãã
ã¢ãã«ãã¥ãŒã³ã³ãããŒã©ãŒ
ãã¥ãŒãããžãã¯ãšã¢ãã«ããåé¢ããæåã®ãã¿ãŒã³ã®1ã€ã¯ã Model-View-Controller ïŒMVCïŒã§ãã ãã®æŠå¿µã¯Trygve Reenskaugomã«ãã£ãŠèª¬æãããŸãã ã
1979幎ã«ïŒ ïŒç§ã¯çãŸããããŸããã§ããïŒã
ãã®ãã¿ãŒã³ã¯ãSmalltalkã§ã¢ããªã±ãŒã·ã§ã³ãäœæããããã«éçºãããŸããã ããããåœæã¯ãããã°ã©ãã³ã°ã¯ä»æ¥ã®ããã§ã¯ãããŸããã§ããã çªã¯ãããŸããã§ããã ã°ã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯ãããŸããã§ããã ãŠã£ãžã§ããã©ã€ãã©ãªã¯ãããŸããã§ããã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãå¿ èŠãªå Žåã¯ãèªåã§äœæããå¿ èŠããããŸãã ãŸãã¯ãããŒããŒããªã©ã®å ¥åããã€ã¹ãšããåãããå Žåã
ããããTrygveãè¡ã£ãããšã¯éåžžã«é©æ°çã§ããã å šå¡ã衚瀺ã³ãŒããããžãã¯ãããã³ããŒã¿ãæ··åšãããå Žåã圌ã¯ãã¿ãŒã³ãé©çšããŠããããã®è²¬ä»»ãå¥ã ã®ã¯ã©ã¹éã§å ±æããŸããã
MVCãã¿ãŒã³ã®åé¡ã¯ãããããäžçã§æã誀解ãããŠãããã¿ãŒã³ã®1ã€ã§ããããšã§ãã ãããŠãããã¯ååã®ãããã ãšæããŸãã Trygveã¯æåã«Model-View-Editorãã¿ãŒã³ãåŒã³åºããŸããããåŸã«Model-View-Controllerã«èœã¡çããŸããã ã¢ãã«ïŒããŒã¿ïŒãšãã¥ãŒïŒç»é¢ã«è¡šç€ºããããã®ïŒãæ確ã§ãã ããããã³ã³ãããŒã©ãŒãšã¯äœã§ããïŒ ã¢ããªã±ãŒã·ã§ã³ã³ã³ãããŒã©ãŒã¯MVCãã¿ãŒã³ãšåãã§ããïŒ ïŒ ããããããããæ··ä¹±ã®åå ã¯ããããŸã ïŒã
ãããã®ã¢ãã«ããã¥ãŒãã³ã³ãããŒã©ãŒã¯äœã§ããïŒ
ã¢ãã«
ã¢ãã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ãããããååŸããŠä¿åããããžãã¯ã§ãã å€ãã®å Žåãããã¯ããŒã¿ããŒã¹ãŸãã¯WebãµãŒãã¹ã®çµæã«åºã¥ããã¡ã€ã³ã¢ãã«ã§ãã å Žåã«ãã£ãŠã¯ã ãã¡ã€ã³ã¢ãã«ã¯ç»é¢ã«è¡šç€ºããããã®ã«ããŸãæ圱ãããŸãã ãã ãã䜿çšããåã«ãé©å¿ãå€æŽãæ¡åŒµããå¿ èŠãããå ŽåããããŸãã
衚瀺ãã
ãã¥ãŒã¯ãç»é¢ã«UIã衚瀺ãã圹å²ãæãããŸããã ãŠã£ãžã§ããã©ã€ãã©ãªããªããã°ãããã¯ãããã¯ããã¿ã³ãå ¥åãã£ãŒã«ããªã©ã®èªå·±ã¬ã³ããªã³ã°ãæå³ããŸãããViewã¯ã¢ãã«ãç£èŠããããããããŒã¿ã衚瀺ããããšãã§ããŸãã
- ã³ã³ãããŒã©ãŒ
ã³ã³ãããŒã©ãŒã¯ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãåŠçããã¢ãã«ãŸãã¯ãã¥ãŒãæŽæ°ããŸãã ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ããïŒããŒããŒãã®ãã¿ã³ãæŒããããŠã¹ã«ãŒãœã«ã移åããïŒå Žåãã³ã³ãããŒã©ãŒã¯ãããã®ã¢ã¯ã·ã§ã³ã«é¢ããéç¥ãåãåããã¢ã¯ã·ã§ã³ã®åŠçæ¹æ³ã決å®ããŸãã
翻蚳è ããã®ã¡ã¢ïŒ
Controllerã¯ãViewã§ã¯ãªãå ¥åã€ãã³ããçŽæ¥åä¿¡ããããšã«æ³šæããŠãã ããã ã³ã³ãããŒã©ãŒã¯ããŒããŒããŸãã¯ããŠã¹ããã®ãŠãŒã¶ãŒå ¥åã解éããã¢ãã«ãŸãã¯ãã¥ãŒã«ã³ãã³ããéä¿¡ããŠé©åãªå€æŽãå ããŸãã
ã³ã³ãããŒã©ãŒããã¯ãªãŒã³ãªãMVCå®è£ ã§ã©ã®ããã«èŠãããã瀺ãç°¡åãªäŸãäœæããŸããã éåžžã®asp.netïŒasp.net MVCã§ã¯ãªãïŒã«å®è£ ããŸãããããŠãŒã¶ãŒã³ã³ãããŒã«ã¯äœ¿çšããŸããã ãããã£ãŠãããã¯ããäŒçµ±çãªASPã¹ã¿ã€ã«ã§ãã ïŒ ã¯ããããã¯ããŸãè¯ãäŸã§ã¯ãããŸããããã³ã³ãããŒã©ãŒã®æ¬åœã®åœ¹å²ãç解ããããã®åºçºç¹ã«ãªãããšãé¡ã£ãŠããŸã ïŒã
public class Controller { private readonly IView _view; public Controller(IView view) { _view = view; HttpRequest request = HttpContext.Current.Request; if (request.Form["ShowPerson"] == "1") { if (string.IsNullOrEmpty(request.Form["Id"])) { ShowError("The ID was missing"); return; } ShowPerson(Convert.ToInt32(request.Form["Id"])); } } private void ShowError(string s) { _view.ShowError(s); } private void ShowPerson(int Id) { var model = new Repository().GetModel(Id); _view.ShowPerson(model); } }
é·å¹ŽåŸãããã°ã©ãã³ã°ã®ãã©ãã€ã ã¯å°ãå€ãããŸãã-ãŠãŒã¶ãŒã³ã³ãããŒã«ïŒ ãŠã£ãžã§ãã ïŒããããŸãã ãŠã£ãžã§ããã¯ãèªèº«ãã¬ã³ããªã³ã°ãããŠãŒã¶ãŒå ¥åã解éããŸãã ãã¿ã³ã¯ãã¯ãªãã¯ãããšãã«äœããã¹ãããç¥ã£ãŠããŸãã å ¥åãã£ãŒã«ãã¯ãããã¹ããå ¥åããå Žåã®åŠçââãèªèããŠããŸãã ããã«ãããã³ã³ãããŒã©ãŒã®å¿ èŠæ§ãæžããMVCãã¿ãŒã³ã®é¢é£æ§ãäœããªããŸããã ãã ããã¢ããªã±ãŒã·ã§ã³ããžãã¯ããã¬ãŒã³ããŒã·ã§ã³ãšããŒã¿ããåé¢ããå¿ èŠããããããModel-View-PresenterïŒMVPïŒãšåŒã°ããå¥ã®ãã¿ãŒã³ã人æ°ãéããŠããŸãã
MVCãã¿ãŒã³ã®ã»ãšãã©ã®äŸã¯ãããã¹ãããã¯ã¹å®è£ ããã¿ã³å®è£ ãªã©ã®éåžžã«å°ããªã³ã³ããŒãã³ãã«çŠç¹ãåœãŠãŠããŸãã ææ°ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã¯ãããžïŒVisual Basic 3ã¯Smalltalk 1979ãšæ¯èŒããŠææ°ã§ãïŒã䜿çšããå Žåãéåžžããã®ãã¿ãŒã³ã¯å¿ èŠãããŸããã ãã ããéåžžã«äœã¬ãã«ã®APIïŒDirect Xãªã©ïŒã䜿çšããŠãŠã£ãžã§ãããèšèšããŠããå Žåã«åœ¹ç«ã¡ãŸãã
éå»æ°å¹Žã«ããã£ãŠãMVCãã¿ãŒã³ã¯åã³éèŠã«ãªããŸãããã ASP.NET MVCã®åºçŸã«é¢é£ããŠãå¥ã®çç±ã§ã ASP.NET MVCãã¬ãŒã ã¯ãŒã¯ã¯ãASP.NETãšã¯ç°ãªãããŠã£ãžã§ããã®æŠå¿µã䜿çšããŸããã ASP.NETã§ã¯ãMVCãã¥ãŒã¯HTMLãã¬ã³ããªã³ã°ããASPXã³ã³ãããŒã«ã§ãã ãŸããã³ã³ãããŒã©ãŒã¯HTTPèŠæ±ãåãå ¥ããããããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãå床åŠçããŸãã httpãªã¯ãšã¹ãã«åºã¥ããŠãäœããããã決å®ããŸãïŒã¢ãã«ãæŽæ°ããããç¹å®ã®ãã¥ãŒã衚瀺ããŸãïŒã
ã¢ãã«ãã¥ãŒãã¬ãŒã³ã¿ãŒ
ããžã¥ã¢ã«ããã°ã©ãã³ã°ç°å¢ã®éçºãšããŠãŒã¶ãŒå ¥åã®æç»ãšåŠçãã«ãã»ã«åãããŠã£ãžã§ããã®å°å ¥ã«ãããåå¥ã®ã³ã³ãããŒã©ãŒã¯ã©ã¹ãäœæããå¿ èŠããªããªããŸããã ããããéçºè ã¯ããžãã¯ããã¬ãŒã³ããŒã·ã§ã³ããåé¢ããå¿ èŠããããŸãããããã¯ä»ãããé«ãæœè±¡åã¬ãã«ã§ã®ã¿ã§ãã è€æ°ã®ãŠãŒã¶ãŒèŠçŽ ãããã©ãŒã ãäœæãããšãã€ã³ã¿ãŒãã§ã€ã¹ãšããŒã¿ããžãã¯ãå«ãŸããããšãå€æããããã§ãã MVPãã¿ãŒã³ã¯ãUIãã€ã³ã¿ãŒãã§ãŒã¹ããžãã¯ïŒãŠã£ãžã§ãããšå¯Ÿè©±ãããšãã«èµ·ããããšïŒãšããŒã¿ïŒç»é¢ã«è¡šç€ºããããŒã¿ïŒããåé¢ããæ¹æ³ã説æããŸãã
ã¢ãã«
ããã¯ã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ã§ãããããããååŸããŠä¿åããããžãã¯ã§ãã å€ãã®å ŽåãããŒã¿ããŒã¹ãŸãã¯WebãµãŒãã¹ã®çµæã«åºã¥ããŠããŸãã å Žåã«ãã£ãŠã¯ããã¥ãŒã§äœ¿çšããåã«ãé©å¿ãå€æŽããŸãã¯æ¡åŒµããå¿ èŠããããŸãã
衚瀺ãã
éåžžãããã¯ãŠã£ãžã§ãããæã€ãã©ãŒã ã§ãã ãŠãŒã¶ãŒã¯ãã®èŠçŽ ãæäœã§ããŸããããŠã£ãžã§ããã€ãã³ããã€ã³ã¿ãŒãã§ã€ã¹ããžãã¯ã«è§ŠãããšãViewã¯ããããã¬ãŒã³ã¿ãŒã«åããŸãã
- çºè¡šè
ãã¬ãŒã³ã¿ãŒã«ã¯ããã¹ãŠã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ããžãã¯ãå«ãŸããã¢ãã«ãšãã¬ãŒã³ããŒã·ã§ã³ã®åæãæ åœããŸãã ãã¬ãŒã³ããŒã·ã§ã³ããŠãŒã¶ãŒãäœããã®æäœïŒãã¿ã³ã®ã¯ãªãã¯ãªã©ïŒãè¡ã£ãããšããã¬ãŒã³ã¿ãŒã«éç¥ãããšããã¬ãŒã³ã¿ãŒã¯ã¢ãã«ã®æŽæ°ã決å®ããã¢ãã«ãšãã¥ãŒã®éã®ãã¹ãŠã®å€æŽãåæããŸãã
ãã¬ãŒã³ã¿ãŒããã¬ãŒã³ããŒã·ã§ã³ãšçŽæ¥éä¿¡ããªãããšã¯éèŠãªããšã§ãã 代ããã«ãã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠéä¿¡ããŸãã ããã«ããããã¬ãŒã³ã¿ãŒãšã¢ãã«ãåå¥ã«ãã¹ãã§ããŸãã
ãã®ãã¿ãŒã³ã«ã¯ãããã·ããã¥ãŒãšç£èŠã³ã³ãããŒã©ãŒã®2ã€ã®ããªãšãŒã·ã§ã³ããããŸãã
ããã·ããã¥ãŒ
ãã®ããªã¢ã³ãã§ã¯ãMVPãã¥ãŒã¯ã¢ãã«ã«ã€ããŠäœãèªèããŸãããã代ããã«ç»é¢ã«è¡šç€ºããå¿ èŠããããã¹ãŠã®æ å ±ã®åçŽãªããããã£ãæäŸããŸãã ãã¬ãŒã³ã¿ãŒã¯ã¢ãã«ããæ å ±ãèªã¿åãããã¥ãŒã®ããããã£ãæŽæ°ããŸãã
ããã¯PassiveViewã®äŸã§ãã
public PersonalDataView : UserControl, IPersonalDataView { TextBox _firstNameTextBox; public string FirstName { get { return _firstNameTextBox.Value; } set { _firstNameTextBox.Value = value; } } }
ã芧ã®ãšããããã¥ãŒãšãã¬ãŒã³ã¿ãŒã®äž¡æ¹ã§éåžžã«å€ãã®ã³ãŒããèšè¿°ããå¿ èŠããããŸãã ãã ããããã«ããããããã®éã®çžäºäœçšããããã¹ãå¯èœã«ãªããŸãã
ã¹ãŒããŒãã€ã¶ãŒã³ã³ãããŒã©ãŒ
ãã®å®æœåœ¢æ ã§ã¯ãïŒïŒ¶ïŒ°ã¯ã¢ãã«ãèªèããŠãã ãããŒã¿ããããã³ã°ã«é¢é£ä»ãã圹å²ãæããã ããã«ããããã¬ãŒã³ã¿ãŒãšViewã®éã®éä¿¡ãããç°¡æœã«ãªããŸãããView-Presenter察話ã®ãã¹ã容ææ§ãæãªãããŸãã å人çã«ã¯ããã®ãã¿ãŒã³ã«ãControllerããšããååãå«ãŸããŠãããšããäºå®ã¯å«ãã§ãã ã³ã³ãããŒã©ãŒã¯MVCãšåãã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã³ã³ãããŒã©ãŒãšãåãã§ã¯ãªãããã§ãã
ããã¯ãç£ç£ã³ã³ãããŒã©ãŒãã¿ãŒã³ã®è¡šçŸã®äŸã§ãã
public class PersonalDataView : UserControl, IPersonalDataView { protected TextBox _firstNameTextBox; public void SetPersonalData(PersonalData data) { _firstNameTextBox.Value = data.FirstName; } public void UpdatePersonalData(PersonalData data) { data.FirstName = _firstNameTextBox.Value; } }
ã芧ã®ãšããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯ããŸã詳现ã§ã¯ãªããViewã«ããå€ãã®è²¬ä»»ãè² ã£ãŠããŸãã
ãã¬ãŒã³ããŒã·ã§ã³ã¢ãã«
Martin Fowlerã¯ãWebãµã€ãã§ã ãã¬ãŒã³ããŒã·ã§ã³ã¢ãã«ãšåŒã°ãã責任ã®åé¢ãéæããããã®å¥ã®ã¢ãããŒãã«ã€ããŠèª¬æããŠããŸãã PresentationModelã¯ãèŠèŠèŠçŽ ã«äŸåããªãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®è«ççãªãã¬ãŒã³ããŒã·ã§ã³ã§ã ã
PresentationModelã«ã¯ããã€ãã®è²¬ä»»ããããŸãã
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ããžãã¯ãå«ãŸããŸãã
ãã¬ãŒã³ã¿ãŒãšåæ§ã«ãPresentationModelã«ã¯ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ããžãã¯ãå«ãŸããŠããŸãã ãã¿ã³ãã¯ãªãã¯ãããšããã®ã€ãã³ãã¯PresentationModelã«ã«ãŒãã£ã³ã°ãããPresentationModelã¯ãããã©ãåŠçãããã決å®ããŸãã
ç»é¢ã«è¡šç€ºããããã®ã¢ãã«ããã®ããŒã¿ãæäŸããŸã
PresentationModelã¯ãã¢ãã«ããã®ããŒã¿ãå€æããŠãç»é¢ã«ç°¡åã«è¡šç€ºã§ããããã«ããŸãã å€ãã®å Žåãã¢ãã«ã«å«ãŸããæ å ±ãç»é¢ã§çŽæ¥äœ¿çšããããšã¯ã§ããŸããã æåã«ããŒã¿ã®å€æãè£è¶³ããŸãã¯ããã€ãã®ãœãŒã¹ããã®åéãå¿ èŠã«ãªãå ŽåããããŸãã ããã¯ãã¢ãã«ãå®å šã«å¶åŸ¡ã§ããªãå Žåã«æãããèµ·ãããŸãã ããšãã°ããµãŒãããŒãã£ã®WebãµãŒãã¹ãŸãã¯æ¢åã®ã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ããŒã¹ããããŒã¿ãåãåã£ãå Žåã
- UIã®ç¶æ
ãä¿åããŸã
å€ãã®å ŽåããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ãã¢ãã«ãšã¯é¢ä¿ã®ãªãè¿œå æ å ±ãä¿åããå¿ èŠããããŸãã ããšãã°ãç»é¢ã§çŸåšéžæãããŠããã¢ã€ãã ã¯ã©ãã§ããïŒ ã©ã®æ€èšŒãšã©ãŒãçºçããŸãããïŒ PresentationModelã¯ããã®æ å ±ãããããã£ã«ä¿åã§ããŸãã
Viewã¯ãPresentationModelããããŒã¿ãç°¡åã«ååŸããç»é¢ã«è¡šç€ºããããã«å¿ èŠãªãã¹ãŠã®æ å ±ãååŸã§ããŸãã ãã®ã¢ãããŒãã®å©ç¹ã®1ã€ã¯ãèŠèŠèŠçŽ ã®ãã¹ãã«äŸåããããšãªããUIã®è«ççã§å®å šã«ãã¹ãå¯èœãªè¡šçŸãäœæã§ããããšã§ãã
ãã¬ãŒã³ããŒã·ã§ã³ã¢ãã«ã¯ãViewãã¢ãã«ïŒPresentationModelïŒããã®ããŒã¿ãã©ã®ããã«äœ¿çšãããã説æããŸããã
Model-View-ViewModel
æåŸã«ãMVVMãŸãã¯åã«ViewModelãã¿ãŒã³ãšãåŒã°ããModel-View-ViewModelãã¿ãŒã³ã ããã¯ããã¬ãŒã³ããŒã·ã§ã³ã¢ãã«ãã¿ãŒã³ã«éåžžã«äŒŒãŠããŸãã
å®éãããããå¯äžã®éãã¯ãWPFãšSilverlightã®ããŒã¿ãã€ã³ãã£ã³ã°æ©èœã®æ瀺çãªäœ¿çšã§ãã é©ãããšã§ã¯ãªããã ãžã§ã³ã»ãŽã¹ãã³ã¯åœŒã®ããã°ã§ãã®ãã¿ãŒã³ã«èšåããæåã®äººã®äžäººã ã£ãããã ã
ViewModelã¯ViewãšçŽæ¥éä¿¡ã§ããŸããã 代ããã«ã ã³ãã³ãã®åœ¢åŒã§ç°¡åã«ãã€ã³ãã§ããããããã£ãšã¡ãœãããæäŸããŸã ã Viewã¯ãããã®ããããã£ã«ãã€ã³ãããŠãViewModelããæ å ±ãååŸãããã®äžã§ã³ãã³ãïŒã¡ãœããïŒãåŒã³åºãããšãã§ããŸãã ããã«ã¯ãViewãViewModelã«ã€ããŠç¥ãå¿ èŠã¯ãããŸããã XAML Databindingã¯ããªãã¬ã¯ã·ã§ã³ã䜿çšããŠViewãšViewModelããã€ã³ãããŸãã ãããã£ãŠããã¥ãŒã«ä»»æã®ViewModelã䜿çšããŠãç®çã®ããããã£ãæäŸã§ããŸãã
ãã®ãã¿ãŒã³ãSilverlightãŸãã¯WPFã«é©çšããããšããç§ãæ¬åœã«æ°ã«å ¥ã£ãŠãããã®ã¯æ¬¡ã®ãšããã§ãã
ã¢ããªã±ãŒã·ã§ã³ã®å®å šã«ãã¹ãå¯èœãªè«çã¢ãã«ãååŸããŸãã
ViewModelã¯ãã¥ãŒã«å¿ èŠãªãã¹ãŠã®æ å ±ã䟿å©ãªåœ¢åŒã§æäŸããããããã¬ãŒã³ããŒã·ã§ã³èªäœã¯éåžžã«ã·ã³ãã«ã«ãªããŸãã ãŸãããã¶ã€ããŒã¯ãExpression Blendãšãã£ã¿ãŒã§å€èŠ³ãšã¹ã¿ã€ã«ãå®éšãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«åœ±é¿ãäžããã«å€æŽã§ããŸãã
- ãããŠæåŸã«ãViewã®ã³ãŒã ïŒ ã³ãŒãããã€ã³ã ïŒãæžãããšãé¿ããããšãã§ããŸãã ä»ãããã¯MVVMãã¿ãŒã³ã®ãã¡ã³ã®éã§ã®è«äºç¹ã§ãã å人çã«ã¯ãååãšããŠãViewã«è¿œå ã®ã³ãŒããèšè¿°ããå¿ èŠã¯ãªããããè¯ã解決çããããšæããŸãã ã¯ããæã ãããã€ãã®ããªãã¯ïŒ ã¢ã¿ãããããããã€ãã¢ã®äœæãªã©ïŒãè¡ãå¿ èŠããããŸããããããã¯åªããåå©çšå¯èœãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã ãã ããXAMLã§ã®XAMLããŒã¯ã¢ãããšããŒã¿ãã€ã³ãã£ã³ã°ã誰ãã奜ãããã§ã¯ãªãããšãèªèããŠããŸãã ViewModelãã¿ãŒã³ã¯ã ã³ãŒãããã€ã³ãã®äœ¿çšãŸãã¯åé¿ã匷å¶ããŸããã ããªãã«ãšã£ãŠæ£ãããšæãããããšãããŠãã ããã
ãããã«
æãäžè¬çãªMV *ãã¿ãŒã³ã®ãã®èª¬æãããããã®éããç解ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
翻蚳è ã³ã¡ã³ãïŒ
èè ãšåæ§ã«ããã®èª¬æãMV *ãã¿ãŒã³ã®é¡äŒŒç¹ãšçžéç¹ã®ç解ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã ããããç解ãããšãã¢ããªã±ãŒã·ã§ã³ã«ã©ã®ãã¿ãŒã³ãé©çšããããç°¡åã«æ±ºå®ã§ããããã«ãªããŸãã
ãã®èšäºããåŒãåºããäž»ãªçµè«ïŒ
- ãã¹ãŠã®ãã¿ãŒã³ã®ã¢ãã«ã¯åãããã«èŠããåãç®æšãæã£ãŠããŸã-ããŒã¿ã®ååŸãåŠçãããã³ä¿åã
- åŸæ¥ã®MVCã§ã¯ããŠãŒã¶ãŒå ¥åã¯Viewã§ã¯ãªãControllerã«ãã£ãŠåŠçãããŸãã
- ææ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšãŠã£ãžã§ããã©ã€ãã©ãªã¯ãŠãŒã¶ãŒå ¥ååŠçãåŠçãããããMVCãã¿ãŒã³ã®ã³ã³ãããŒã©ãŒã¯äžèŠã«ãªããŸãã
- MV *ãã¿ãŒã³ã®ç®æšã¯ãUIãããã³ã°ãã€ã³ã¿ãŒãã§ãŒã¹ããžãã¯ãããã³ããŒã¿ïŒããããåä¿¡ããã³åŠçïŒãäºãã«åé¢ããããšã§ãã
- ã¢ããªã±ãŒã·ã§ã³ã§MV *ãã¿ãŒã³ã䜿çšãããšããµããŒããšãã¹ããç°¡çŽ åããããŒã¿ãèŠèŠåãããæ¹æ³ããåé¢ã§ããŸãã
- MVPã¯ããªãæ®éçãªãã¿ãŒã³ã§ãããå€ãã®å Žåã«é©ããŠããŸãïŒããã¯ç§ã®å人çãªæèŠã§ãïŒã 䜿çšãããªãã·ã§ã³ã¯ãããã·ããã¥ãŒãŸãã¯ç£èŠã³ã³ãããŒã©ãŒã§ãã å¿ èŠãªãã®ãã€ãŸãã³ãŒãã®å¶åŸ¡æ§ãšãã¹ã容ææ§ããŸãã¯ç°¡æœããšç°¡æœãã«ãã£ãŠå°ãããŸãã ã¿ã¹ã¯éã移åãã1ã€ãŸãã¯å¥ã®ã¢ãããŒããé©çšããŸãã
- ã·ã¹ãã ã«èªåããŒã¿ãã€ã³ãã£ã³ã°ïŒããŒã¿ãã€ã³ãã£ã³ã°ïŒãé©åã«å®è£ ãããŠããå ŽåãMVVMãéžæãããŸãã
- ãã¬ãŒã³ããŒã·ã§ã³ã¢ãã«ã¯MVVMã®åªãã代æ¿æ段ã§ãããèªåãªã³ã¯ããªãå Žåã«åœ¹ç«ã¡ãŸãã ãã ããèªåã§ãã€ã³ãã£ã³ã°ã³ãŒããèšè¿°ããå¿ èŠããããŸãïŒããã¯åçŽã§ãããæ¥åžžçãªã³ãŒãã§ãïŒã ããããšã¬ã¬ã³ãã«å®è£ ããæ¹æ³ã«ã€ããŠã®ã¢ã€ãã¢ããããŸãããããã«ã€ããŠã¯æ¬¡ã®èšäºã§èª¬æããŸãã
PS翻蚳ã®æºåã«ååããŠãããååã®Jeevuzã«ãæè¬ããŸã ã