Title | Author | Date |
---|---|---|
GUIã¢ãŒããã¯ã㣠|
Martin Fowler |
18 July 2006 |
åæ: GUI Architectures (martinfowler.com)
ãªããã»ã¯ã©ã€ã¢ã³ãã»ã·ã¹ãã ã®ã³ãŒããçµç¹åããã®ã«ã¯å€ãã®ç°ãªãæ¹æ³ããã£ããããã§ã¯ãæã圱é¿åããã£ããšæãããã®ãéžãã§è¿°ã¹ãããããã©ã®ããã«ãã¿ãŒã³ã«é¢ä¿ããŠãããã説æããã
æåŸã®ææãªæŽæ°ïŒ06幎7æ18æ¥
- ãã©ãŒã ãšã³ã³ãããŒã«
- Model View Controller
- VisualWorksã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«
- Model-View-Presenter (MVP)
- æ§ãããªãã¥ãŒ
ãŠãŒã¶ãŒãšããŠãéçºè ãšããŠããã°ã©ãã£ã«ã«ã»ãŠãŒã¶ã»ã€ã³ã¿ãã§ãŒã¹ã¯ãœãããŠã§ã¢ã®æ¯è²ã®äžéšã§ãªãã¿æ·±ããã®ã«ãªã£ãã èšèšã®èгç¹ããèŠããšãããã¯ã·ã¹ãã èšèšã®åé¡ã®ç¹å®ã®éåââç°ãªããé¡äŒŒããããã€ãã®è§£æ±ºçãå°ãåé¡ââã衚ããã
ç§ã®é¢å¿ã¯ããªããã»ã¯ã©ã€ã¢ã³ãéçºã§ã¢ããªã±ãŒã·ã§ã³éçºè ãã¡ã䜿ãå ±éã§åœ¹ã«ç«ã€ãã¿ãŒã³ãèŠåºãããšã§ããã ç§ã¯ããããžã§ã¯ãã»ã¬ãã¥ãŒã§ãããããªèšèšãèŠãŠããããããå®å®ããæ¹æ³ã§æžãããŠãããããããªèšèšãèŠãŠããã ãããã®èšèšã®å éšã«åœ¹ã«ç«ã€ãã¿ãŒã³ãããããããããããã説æããããšã¯ãã°ãã°ç°¡åã§ã¯ãªãã äŸãšããŠModel-View-Controllerãæããã ããã¯ãã¿ãŒã³ãšããŠãã°ãã°åç §ãããããçžåœãªæ°ã®ç°ãªãèããå«ãã®ã§ãããããã¿ãŒã³ãšã¿ãªãããšãæ¬åœã«åœ¹ã«ç«ã€ãã¯ç§ã«ã¯ããããªãã ããŸããŸãªäººãããŸããŸãªãšããã§MVCã«ã€ããŠèªã¿ãããŸããŸãªèããåãåã£ãŠããããããMVCãã ãšèšãã ãããååãªæ··ä¹±ãåŒãèµ·ãããªããšããŠããäŒèšã²ãŒã ã®ã·ã¹ãã ã«ãã£ãŠçºå±ããMVCãžã®èª€è§£ã®åœ±é¿ãåããã
ãã®ãšãã»ã€ã§ã¯ç§ã¯ãããã€ãã®é¢çœãã¢ãŒããã¯ãã£ãæ¢æ€ãããããã®æãé¢çœãç¹åŸŽã«ã€ããŠç§ã®è§£éã説æãããã ç§ã®æã¿ã¯ãç§ã説æãããã¿ãŒã³ãçè§£ããããã®æèããã®ãšãã»ã€ãæäŸããããšã§ããã
ãã®ãšãã»ã€ã¯ããçšåºŠãé·å¹Žã«ãããè€æ°ã®ã¢ãŒããã¯ãã£ãéããŠUIèšèšã®èãæ¹ããã©ããããçš®ã®ç¥çãªæŽå²ãšã¿ãªãããšãã§ããã ããããç§ã¯ããã«ã€ããŠæ³šæãçºããªããã°ãªããªãã ã¢ãŒããã¯ãã£ãçè§£ããããšã¯ç°¡åã§ã¯ãªãããããã®å€ããå€åããŠæ»ãã§ããæã«ã¯ãªãããã ã 人ã ãåãã¢ãŒããã¯ãã£ããç°ãªããã®ãèªã¿åãã®ã§ãèãã®åºããããã©ãããšã¯ããã«é£ããã ç¹ã«ãç§ã¯èª¬æããã¢ãŒããã¯ãã£ã®åŸ¹åºçãªèª¿æ»ãããªãã£ãã ç§ãããããšã¯ãèšèšã®äžè¬çãªèª¬æãšèšããããã®ã ã ãããã®èª¬æãäœããçç¥ããŠãããšããŠããç§ã¯ãããå šãæ°ã«ããªãã ã ãããã¢ãŒããã¯ãã£ã®ä¿¡é Œã§ãã解説ãšããŠç§ã®èª¬æãåãå ¥ããŠã¯ãããªãã ããã«ãç¹ã«é¢é£ãããšæããªãã£ããšãã«ãç§ãç¡èŠãŸãã¯åçŽåãããã®ãããã ç§ã®äž»èŠãªé¢å¿ã¯æ ¹åºã«ãããã¿ãŒã³ã«ããããããã®èšèšã®æŽå²ã«ã¯ãªãããšãå¿ããªãããã«ã
ïŒã¡ãã£ãšããäŸå€ãããããšããã®ã¯ãç§ã¯MVCã調ã¹ãããã«åäœããŠããSmalltalk-80ã«ã¢ã¯ã»ã¹ããã ç¹°ãè¿ãããç§ã¯èª¿æ»çµæãç¶²çŸ çã«èª¬æããã€ããã¯ãªãã£ãããšã¯ãããããã¯äžè¬çãªèª¬æã§ã¯æããªãã£ãããšãæããã«ããââãã®ããšããç§ãããã§ããŠããä»ã®ã¢ãŒããã¯ãã£ã®èª¬æã«ã€ããŠãç§ãããã«æ éã«ãããããã ããããªãããããã®ã¢ãŒããã¯ãã£ã®1ã€ãããç¥ã£ãŠããŠãéèŠãªããšã«ã€ããŠç§ãééã£ãŠãããæ¬ ããŠãããããŠããã®ã«æ°ãä»ããããæããŠã»ããã ãã®é åã®ãã培åºçãªèª¿æ»ã¯ã¢ã«ãããã¯ãªç ç©¶ã®è¯ã察象ã§ãããšãæã£ãŠãããïŒ
ãã®èª¿æ»ããåçŽã§ããç¥ãããŠããã¢ãŒããã¯ãã£ããå§ãããã ããã«ã¯éç§°ããªãã®ã§ããã®ãšãã»ã€ã§ã¯ããã©ãŒã ãšã³ã³ãããŒã«ããšåŒãŒãã ããã¯90幎代ã®ã¯ã©ã€ã¢ã³ãã»ãµãŒããŒéçºç°å¢ââVisual BasicãDelphiãPowerbuilderãšãã£ãããŒã«ââã«ãã£ãŠå¥šå±ããããã®ãªã®ã§ãããªãã¿ã®ã¢ãŒããã¯ãã£ã§ããã ç§ã®ãããªèšèšãããã«ãã£ãŠãã°ãã°äžå·ãããããããããäžè¬çã«çšãããç¶ããŠããã
ããã調æ»ããããã«ããããŠå®éã«ã¯ä»ã®ã¢ãŒããã¯ãã£ã調æ»ããããã«ããäžè¬çãªäŸã䜿ããã ç§ãäœãã§ãããã¥ãŒã€ã³ã°ã©ã³ãã«ã¯ã空æ°äžã®ã¢ã€ã¹ã¯ãªãŒã ã®åŸ®ç²åã®éã芳枬ããæ¿åºèšç»ãããã æ¿åºŠãäœããããªããããã¯æã ãååãªã¢ã€ã¹ã¯ãªãŒã ãé£ã¹ãŠããªãããšã瀺ãââããã¯æã ã®çµæžãšç€ŸäŒç§©åºã«æ·±å»ãªå±éºãããããã ïŒç§ã¯ããã®æã®æ¬ã§éåžžèŠãããã®ã«è² ããå£ããçŸå®çãªäŸã䜿ãã®ã奜ãã ãïŒ
æã ã®ã¢ã€ã¹ã¯ãªãŒã å¥åº·ç¶æ ãç£èŠããããã«ãæ¿åºã¯ãã¥ãŒã€ã³ã°ã©ã³ãå šå·ã«ç£èŠã¹ããŒã·ã§ã³ã建ãŠãã è€éãªå€§æ°ã®ã¢ããªã³ã°ã䜿çšããŠãåœå±ã¯ç£èŠã¹ããŒã·ã§ã³ããšã«ç®æšå€ãèšå®ããã æã ãè·å¡ã¯ãããããªã¹ããŒã·ã§ã³ã«è¡ã£ãŠãå®éã®ã¢ã€ã¹ã¯ãªãŒã ç²åã®æ¿åºŠãæžãèšãè©äŸ¡ã«åºãããã ãã®UIã§ã¯ãã¹ããŒã·ã§ã³ãéžãã§ãæ¥ä»ãšå®æž¬å€ãå ¥åã§ããã ãããšã·ã¹ãã ã¯ãç®æšå€ãšã®çžéãèšç®ããŠè¡šç€ºããã ããã«ã宿ž¬å€ãç®æšå€ãã10%以äžäœããã°çžéã¯èµ€ã§ãã€ã©ã€ãããã5%以äžé«ããã°ç·ã§ãã€ã©ã€ããããã
å³1ïŒ ç§ãäŸãšããŠäœ¿ãUI
ãã®ç»é¢ãèŠãã°ãæã ããŸãšããããã«ãéèŠãªéšåãããã®ãèŠãããšãã§ããã ãã©ãŒã ã¯ãæã ã®ã¢ããªã±ãŒã·ã§ã³ã«åºæã®ãã®ã ããäžè¬çãªã³ã³ãããŒã«ã䜿ã£ãŠããã 倧éšåã®GUIç°å¢ã«ã¯ãå®éã«ã¢ããªã±ãŒã·ã§ã³ã§äœ¿ãããšãã§ããäžè¬çãªã³ã³ãããŒã«ããããã忢±ãããŠããã æã ã¯æ°ããã³ã³ãããŒã«ãèªåã§é ãããšãã§ããããã¯ãã°ãã°è¯ãèãã ããäžè¬çãªåå©çšã§ããã³ã³ãããŒã«ãšç¹å®ã®ãã©ãŒã ã«ã¯ãã¯ãéããããã ç¹å¥ã«æžãããã³ã³ãããŒã«ãããè€æ°ã®ãã©ãŒã ã«ããã£ãŠåå©çšãããããšãããããã
ãã©ãŒã ã¯ã2ã€ã®äž»èŠãªè²¬åãå«ãïŒ
- ç»é¢ã¬ã€ã¢ãŠãïŒ ç»é¢äžã®ã³ã³ãããŒã«ã®é 眮ãšãä»è ãšã®éå±€æ§é ãå®ããã
- ãã©ãŒã ã»ããžãã¯ïŒ ç°¡åã«ã¯ã³ã³ãããŒã«èªèº«ã®å éšã«ããã°ã©ã ã§ããªããµããŸãã
倧éšåã®GUIéçºç°å¢ã§ã¯ãéçºè ã¯ãã©ãŒã ã®ç©ºããŠããæã«ã³ã³ãããŒã«ããã©ãã°ïŒããããããããšãã§ããã°ã©ãã£ã«ã«ã»ãšãã£ã¿ã䜿ã£ãŠç»é¢ã¬ã€ã¢ãŠããå®çŸ©ã§ããã ããã¯ããã©ãŒã ã»ã¬ã€ã¢ãŠãã®ã»ãšãã©ãåãæ±ãã ãã©ãŒã äžã®ã³ã³ãããŒã«ã®å¿å°ããã¬ã€ã¢ãŠããèšå®ããã®ã¯ããã®ããã«ç°¡åã§ããïŒå¿ ãããæé«ã®ããæ¹ã§ã¯ãªããââãã®ä»¶ã¯åŸã§åãäžããã€ããã ïŒã
ã³ã³ãããŒã«ã¯ããŒã¿ã衚瀺ããââæž¬å®å€ã«é¢ãããã®ã±ãŒã¹ã§ã¯ã ãã®ããŒã¿ã¯ã»ãšãã©åžžã«ä»ã®ã©ããããæ¥ãã ãããä»åã¯SQLããŒã¿ããŒã¹ã ãšä»®å®ãããããããã£ãã¯ã©ã€ã¢ã³ãã»ãµãŒããŒã»ããŒã«ã®å€§éšåãæ³å®ããŠããç°å¢ã§ããã®ã§ã倧éšåã®ç¶æ³ã§ã¯ãé¢ä¿ããããŒã¿ã«ã¯3ã€ã®ã³ããŒãããïŒ
- ããŒã¿ã®ã³ããŒã®1ã€ã¯ãããŒã¿ããŒã¹ãã®ãã®ã«ããããã®ã³ããŒã¯ããŒã¿ã®é·æçãªèšé²ã§ããã®ã§ãç§ã¯ããã èšé²ç¶æ ãšåŒã¶ãèšé²ç¶æ ã¯ãéåžžãããããªã¡ã«ããºã ã«ãã£ãŠå ±æãããè€æ°ã®äººã ã®ç®ã«èŠããã
- æŽãªãã³ããŒã¯ãã¢ããªã±ãŒã·ã§ã³å ã®ã¡ã¢ãªäžã®ã¬ã³ãŒãã»ããã«ãããã¯ã©ã€ã¢ã³ãã»ãµãŒããŒç°å¢ã®å€§éšåã¯ãããç°¡åã«ã§ããããã«ããããŒã«ãæäŸããããã®ããŒã¿ã¯ã¢ããªã±ãŒã·ã§ã³ãšããŒã¿ããŒã¹ãšã®éã®ç¹å®ã®ã»ãã·ã§ã³ã®éã ãé¢ä¿ããã®ã§ãç§ã¯ããã ã»ãã·ã§ã³ç¶æ ãšåŒã¶ãåºæ¬çã«ãããã¯ä¿åãããã³ãããããŠããŒã¿ããŒã¹ãžæ»ããŸã§ã®éã«ãŠãŒã¶ãŒãæ±ãããŒã¿ã®äžæçãªããŒã«ã«ã»ããŒãžã§ã³ãæäŸããââãã®æã«ã¯ãããã¯èšé²ç¶æ ãšããŒãžããããèšé²ç¶æ ãšã»ãã·ã§ã³ç¶æ ã調æŽããããšã«é¢ããåé¡ã«ã€ããŠã¯ããã§ã¯æ°ã«ããªãïŒç§ã¯ãP of EAAã§ãããããªæè¡ãåãäžããã
- æåŸã®ã³ããŒã¯GUIã³ã³ããŒãã³ãèªäœã«ãããããã¯ãå³å¯ã«ãç»é¢ã§èŠãããããŒã¿ã§ãããããããã«ãç§ã¯ããã ç»é¢ç¶æ ãšåŒã¶ãç»é¢ç¶æ ãšã»ãã·ã§ã³ç¶æ ãã©ã®ããã«åæãããŠãããã¯ãUIã«ãšã£ãŠéèŠã§ããã
ç»é¢ç¶æ ãšã»ãã·ã§ã³ç¶æ ãåæãããŠããããšã¯ãéèŠãªä»äºã§ããããããããç°¡åã«ããã®ãå©ããããŒã«ã¯ãããŒã¿ã»ãã€ã³ãã£ã³ã°ã§ãã£ãããã®èããšã¯ãã³ã³ãããŒã«ã»ããŒã¿ãŸãã¯æ ¹åºã«ããã¬ã³ãŒãã»ããã®ã©ã¡ããã«ã©ã®ãããªå€åããã£ãŠãããã«ããäžæ¹ã«äŒæããããšãããã®ã ã£ãããã£ãŠãããç»é¢äžã®å®æž¬å€ãå€ãããªãã°ãããã¹ãã»ãã£ãŒã«ãã»ã³ã³ãããŒã«ã¯æ ¹åºã«ããã¬ã³ãŒãã»ããã®æ£ããã³ã©ã ã广çã«æŽæ°ããã
äžè¬ã«ãããŒã¿ã»ãã€ã³ãã£ã³ã°ã¯æ³šæãèŠãããã³ã³ãããŒã«ã®å€åãã¬ã³ãŒãã»ãããå€ãããããã³ã³ãããŒã«ãæŽæ°ãããããã¬ã³ãŒãã»ãããæŽæ°ããâŠâŠãšãã埪ç°ãé¿ããå¿ èŠãããã®ãªãã 䜿çšã®ãããŒã¯ãããé¿ããã®ãå©ããââç»é¢ãéããããšãã«ã»ãã·ã§ã³ç¶æ ããç»é¢ãŸã§ããŒããããã®åŸã¯ãç»é¢ç¶æ ãžã®ã©ããªå€åãã»ãã·ã§ã³ç¶æ ãžäŒæããã äžæŠç»é¢ãç«ã¡äžãã£ããªãã°ãã»ãã·ã§ã³ç¶æ ãçŽæ¥æŽæ°ãããããšã¯ããŸããªãã ãã®çµæãããŒã¿ã»ãã€ã³ãã£ã³ã°ãå šäœçã«åæ¹åã«ã¯ãªããªããããããªãââæåã®ã¢ããããŒããšããã®åŸã§å€åãã³ã³ãããŒã«ããã»ãã·ã§ã³ç¶æ ã«äŒæããã ãã«éå®ãããã
ããŒã¿ã»ãã€ã³ãã£ã³ã°ã¯ãã¯ã©ã€ã¢ã³ãã»ãµãŒããŒã»ã¢ããªã±ãŒã·ã§ã³ã®å€ãã®æ©èœãããªãããŸãåãæ±ãã 宿ž¬å€ãå€ãããšãã«ã¯ã³ã©ã ãæŽæ°ãããããããéžæãããã¹ããŒã·ã§ã³ãå€ããã ãã§ãã£ãŠãã¬ã³ãŒãã»ããã®çŸåšéžæè¡ãå€ããä»ã®ã³ã³ãããŒã«ã®ãªãã¬ãã·ã¥ãåŒãèµ·ããã
ãã®ãµããŸãã®å€ãã¯ãã¬ãŒã ã¯ãŒã¯æ§ç¯è ã«ãã£ãŠçµã¿èŸŒãŸããŠããã圌ãã¯äžè¬ã®ããŒãºãèŠãŠããããæºããã®ãç°¡åã«ããã®ã ã ç¹ã«ãããã¯ã³ã³ãããŒã«ã«(éåžžããããã£ãšåŒã°ããŠãã)å€ãèšå®ããããšã§å®çŸãããã ã³ã³ãããŒã«ã¯ãåçŽãªããããã£ã»ãšãã£ã¿ã«ãã£ãŠã³ã©ã åãèšå®ãããããšã§ãã¬ã³ãŒãã»ããã®ç¹å®ã®ã³ã©ã ãšçµã³ã€ãã
æ£ããçš®é¡ã®ãã©ã¡ãŒã¿ãŒåãšãšãã«ããŒã¿ã»ãã€ã³ãã£ã³ã°ã䜿ãããšã§ãé·ãéãé²ãããšãã§ããã ããããã©ããŸã§ãé²ãããšããããã§ã¯ãªãââãããŠãããã©ã¡ãŒã¿ãŒåã®éžæè¢ã«ã¯é©ããªãã ããããžãã¯ãå°ãã¯ããã ä»åã®å Žåã¯çžéãèšç®ããããšãããã®çµã¿èŸŒãŸãããµããŸãã«é©åããªããã®ã®äŸã§ããââããã¯ã¢ããªã±ãŒã·ã§ã³ã«åºæã§ãããããéåžžã¯ãã©ãŒã ã«çœ®ãããã
ãããåäœããããã«ã宿ž¬å€ãã£ãŒã«ãã®å€ãå€ãããšãã¯ãã€ã§ãããã©ãŒã ã¯éå ±ãããå¿ èŠãããããããŠããã©ãŒã äžã®åºæã®ãµããŸããããã€ãåŒã³åºãããšãäžè¬çãªããã¹ãã»ãã£ãŒã«ãã«èŠæ±ãããã ããã¯ãã¯ã©ã¹ã»ã©ã€ãã©ãªãå°å ¥ããå¶åŸ¡ã®å転ãšããŠåŒã³åºãããããšã§ããã䜿ãããšãããå°ãã ãè€éãªããšã ã
ãã®æã®ãã®ãåäœãããã«ã¯ãããããªããæ¹ãããââã¯ã©ã€ã¢ã³ãã»ãµãŒããŒã»ããŒã«ãããã«ãããããã®ã¯ã€ãã³ãã®æŠå¿µã§ãã£ãã åã ã®ã³ã³ãããŒã«ã¯ãèµ·ããããšãã§ããã€ãã³ãã®äžèЧãæã£ãŠããã ã©ããªå€éšãªããžã§ã¯ãã§ãã€ãã³ãã«èå³ããããšã³ã³ãããŒã«ã«äŒããããšãã§ããââãããããšãã³ã³ãããŒã«ã¯ã€ãã³ããäžãã£ããšãã«ãã®å€éšãªããžã§ã¯ããåŒã³åºãã ããã¯åºæ¬çã«ããã©ãŒã ãã³ã³ãããŒã«ãç£èŠããŠãããšãããªãã¶ãŒããŒã»ãã¿ãŒã³ã®èšãå€ãã§ãããªãã ãã©ãŒã ã®éçºè ãã€ãã³ããèµ·ãããšãã«åŒã³åºããããµãã«ãŒãã³ã«ã³ãŒããæžãããšãã§ããäœããã®ä»çµã¿ã¯ãéåžžã¯ãã¬ãŒã ã¯ãŒã¯ãæäŸããã ã€ãã³ããšã«ãŒãã³ã®éã®é¢é£ãæ£ç¢ºã«ã¯ã©ã®ããã«äœããããã¯ãã©ãããã©ãŒã éã§ç°ãªã£ãŠããã®ã§ããã®è°è«ã«ãããŠã¯éèŠã§ãªãââéèŠãªã®ã¯ãããèµ·ããããã®ä»çµã¿ãããã€ãååšãããšããããšã§ããã
äžæŠãã©ãŒã å ã®ã«ãŒãã³ã«å¶åŸ¡ããããã°ãå¿ èŠãªããšã¯äœã§ãã§ããã ããã¯ç¹å®ã®ãµããŸããå®è¡ããå¿ èŠã«å¿ããŠã³ã³ãããŒã«ãä¿®æ£ããããŒã¿ã»ãã€ã³ãã£ã³ã°ã«ãã£ãŠãããã®å€æŽãã¹ãŠãã»ãã·ã§ã³ç¶æ ãžäŒæãããããšãã§ããã
ããŒã¿ã»ãã€ã³ãã£ã³ã°ã¯å¿ ãååšããããã§ã¯ãªãã®ã§ããããå¿ èŠã§ããã Windowsã³ã³ãããŒã«ã®å€§ããªåžå Žãããããå šãŠãããŒã¿ã»ãã€ã³ãã£ã³ã°ããããšããããã§ã¯ãªãã ããŒã¿ã»ãã€ã³ãã£ã³ã°ãååšããªããªãã°ãåæãè¡ãã®ã¯ãã©ãŒã 次第ã§ããã ããã¯ãä¿åãã¿ã³ãæŒããããšãããŸãæåã«ãŠã£ãžã§ããã«èšå®ãããã¬ã³ãŒãã»ã»ããããããŒã¿ãåŒãæããŠã倿ŽãããããŒã¿ãã¬ã³ãŒãã»ã»ãããžã³ããŒãããšãã圢ã§åäœããããšãã§ããã
ããŒã¿ã»ãã€ã³ãã£ã³ã°ãååšãããšããŠã宿ž¬å€ãç·šéããå Žåã調ã¹ããã ãã©ãŒã ã»ãªããžã§ã¯ãã¯ãäžè¬çãªã³ã³ãããŒã«ãžã®çŽæ¥ã®åç §ãä¿æããŠããã åç §ã¯ç»é¢äžã®ã³ã³ãããŒã«ããšã«ããã ããããããã§ã¯å®æž¬å€ãçžéãç®æšå€ãã£ãŒã«ãã«ã ãã«ããèå³ããªãã
å³2ïŒãã©ãŒã ãšã³ã³ãããŒã«ã®ã¯ã©ã¹å³
åæåäžã«ãã©ãŒã ãç»é¢ãçµã¿ç«ãŠããšãããã©ãŒã ã¯èªåèªèº«ãã€ãã³ãã«ç»é²ããèªèº«ã®ã¡ãœãããšçµã³ã€ããââããã§ã¯ actual_textChanged
ã¡ãœããã ã
å³3ïŒãã©ãŒã ãšã³ã³ãããŒã«ã§ãžã£ã³ã«ã倿Žããããã®ã·ãŒã±ã³ã¹å³
ãŠãŒã¶ãŒã宿ž¬å€ãå€ãããšããããã¹ãã»ãã£ãŒã«ãã»ã³ã³ãããŒã«ã¯ã€ãã³ããèµ·ããããã¬ãŒã ã¯ãŒã¯ã»ãã€ã³ãã£ã³ã°ã®éæ³ã«ãã£ãŠ actual_textChanged
ãå®è¡ãããã
ãã®ã¡ãœããã¯å®æž¬å€ããã³ç®æšå€ã®ããã¹ãã»ãã£ãŒã«ãããããã¹ããååŸããŠãåŒãç®ãããå€ãçžéãã£ãŒã«ãã«å
¥ããã
ãŸããã®ã¡ãœããã¯ãå€ãã©ããªè²ã§è¡šç€ºãããªããã°ãªããªãããç®åºããããã¹ãã»ã«ã©ãŒãé©åã«èª¿ç¯ããã
ããã€ãã®ãµãŠã³ããã€ãã§ã¢ãŒããã¯ãã£ããŸãšããããšãã§ããïŒ
- éçºè ã¯ãäžè¬çãªã³ã³ãããŒã«ã䜿ã£ãŠã¢ããªã±ãŒã·ã§ã³åºæãã©ãŒã ãæžãã
- ãã©ãŒã ã¯ããã©ãŒã äžã®ã³ã³ãããŒã«ã®ã¬ã€ã¢ãŠããå®çŸ©ããã
- ãã©ãŒã ã¯ã³ã³ãããŒã«ãç£èŠããŠããŠãé¢å¿ãããã€ãã³ããã³ã³ãããŒã«ããäžããããã®ã«åå¿ãããã³ãã©ãŒã»ã¡ãœãããæã£ãŠããã
- åçŽãªããŒã¿ç·šéã¯ãããŒã¿ã»ãã€ã³ãã£ã³ã°ãéããŠæ±ãããã
- è€éãªå€æŽã¯ããã©ãŒã ã®ã€ãã³ãåŠçã¡ãœããã§ãªãããã
ãããããUIéçºãã¿ãŒã³ã«ãããŠæãåºãåŒçšãããŠãããã®ã¯Model View ControllerïŒMVCïŒã§ãããââãããæã誀ã£ãŠåŒçšãããŠããã ç§ã¯ãMVCãšããŠèª¬æãããŠãããã®ããŸã£ãã䌌ã€ããªããã®ã ãšããã£ãããšãäœåãã£ããå¿ããŠããŸã£ãã ççŽã«èšã£ãŠããã®çç±ã®å€ãã¯ãå€å žçãªMVCã®äžéšãè¿å¹Žã®ãªããã»ã¯ã©ã€ã¢ã³ãã«ã¯ããŸãæå³ããªããªããšããããšã§ããã ãããä»åã¯ããã®èµ·æºãèŠãŠã¿ãããšã«ããã
MVCãèŠããšãããããã©ããªèŠæš¡ã«ãããŠãæåã«é倧ãªUIç ç©¶ã詊ã¿ã1ã€ã§ãã£ãããšãæãåºãããšã¯éèŠã§ããã ã°ã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯ã70幎代ã«ã¯å¿ ãããäžè¬çã§ã¯ãªãã£ãã ç§ãä»ããã説æãããã©ãŒã ãšã³ã³ãããŒã«ã»ã¢ãã«ã¯ãMVCã®åŸã«çŸããââç§ããããæåã«èª¬æããã®ã¯ãããåçŽã ããã§ãã£ãŠãåžžã«è¯ãããæ¹ãšããããã§ã¯ãªãã ãŸããç§ã¯è©äŸ¡ã®äŸã䜿ã£ãŠSmalltalk 80ã®MVCãè«ããã€ããã§ããââããããããããããã«Smalltalk 80ã®å®éã®çްéšãããã€ãåæã«ãããŠããã£ãŠããããšããäºæ¿ããã ãããââããã¯æåã¯çœé»ã·ã¹ãã ã§ãã£ãã
MVCã®äžå¿ã§ããããããŠåŸã®ãã¬ãŒã ã¯ãŒã¯ã«æã圱é¿åããã£ãèãã¯ãç§ãSeparated PresentationãšåŒãã§ãããã®ã§ããã Separated Presentationãæ¯ããèãã¯ãçŸå®ã®äžçã®èªèãã¢ãã«åãããã¡ã€ã³ã»ãªããžã§ã¯ããšãç»é¢ã§èŠããGUIã®èŠçŽ ã§ãããã¬ãŒã³ããŒã·ã§ã³ã»ãªããžã§ã¯ããšã®éãæç¢ºã«åå²ããããšã ã ãã¡ã€ã³ã»ãªããžã§ã¯ãã¯å®å šã«èªå·±å®çµããŠããŠããã¬ãŒã³ããŒã·ã§ã³ã®åç §ãªãã§åäœããªããã°ãªããªãããŸããããããåæã«ãè€æ°ã®ãã¬ãŒã³ããŒã·ã§ã³ããµããŒãããããšãã§ããªããã°ãªããªããããã ãã®ã¢ãããŒãã¯Unixæåã®éèŠãªéšåã§ããã£ãŠã仿¥ã§ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ãã°ã©ãã£ãã¯ããã³ã³ãã³ãã»ã©ã€ã³ã®äž¡æ¹ã®ã€ã³ã¿ãŒãã§ãŒã¹ã«ãã£ãŠæäœã§ããããã«ãç¶ããŠããã
MVCã«ãããŠããã¡ã€ã³èŠçŽ ã¯ã¢ãã«ãšåŒã°ããã ã¢ãã«ã»ãªããžã§ã¯ãã¯ãUIãå®å šã«ç¥ããªãã è©äŸ¡UIã®äŸãæ€èšãå§ããããã«ãã¢ãã«ã¯æž¬å®å€ã§ãããèå³ãããããŒã¿ãã¹ãŠã®ãã£ãŒã«ããæã£ãŠãããšãããã ïŒããã«ãããããã«ããªã¹ãããã¯ã¹ãååšããããšã§ãäœãã¢ãã«ã§ããããšããåé¡ããããããè€éã«ãªããããã°ããã®éã¯ãã®ãªã¹ãããã¯ã¹ãç¡èŠããããšã«ãããïŒ
MVCã«ãããŠãç§ã¯ãã©ãŒã ãšã³ã³ãããŒã«ã§æã£ãŠããã¬ã³ãŒãã»ã»ããã®æŠå¿µã§ã¯ãªããéåžžã®ãªããžã§ã¯ããDomain Modelã§ããããšãæ³å®ããŠããã ããã¯ãèšèšã®èåŸã«ããäžè¬çãªä»®å®ãåæ ããŠããã ãã©ãŒã ãšã³ã³ãããŒã«ã§ã¯å€§éšåã®äººã ããªã¬ãŒã·ã§ãã«ã»ããŒã¿ããŒã¹ã®ããŒã¿ãæ¥œã«æäœããããšæã£ãŠããããšãä»®å®ããŠããããMVCã§ã¯éåžžã®Smalltalkãªããžã§ã¯ããæäœããŠããããšãä»®å®ããã
MVCã®ãã¬ãŒã³ããŒã·ã§ã³éšåã¯ãæ®ã2ã€ã®æ§æèŠçŽ ã§ã§ããŠããïŒãã¥ãŒãšã³ã³ãããŒã©ã§ããã ã³ã³ãããŒã©ã®è·åã¯ããŠãŒã¶ãŒã®å ¥åãåãå ¥ããŠããããã©ãããã¹ããã倿ããããšã§ããã
ããã§ç§ã匷調ããªããã°ãªããªãããšã¯ããã 1ã€ã®ãã¥ãŒãšã³ã³ãããŒã©ãããªãã®ã§ã¯ãªããç»é¢ã®æ§æèŠçŽ ããšãã³ã³ãããŒã«ããšããããŠç»é¢å šäœã«å¯ŸããŠãã¥ãŒã»ã³ã³ãããŒã©ã®ãã¢ãæã£ãŠããããšã ã ããã§ããŠãŒã¶ãŒã®å ¥åã«åå¿ããæåã®éšåã¯ã誰ãç·šéãããããç¥ãããã«å調ããŠãããããããªã³ã³ãããŒã©ã§ããã ãã®ã±ãŒã¹ã§ã¯ããã¯å®æž¬å€ããã¹ããã£ãŒã«ãã§ãããããããæ¬¡ã«èµ·ããããšãåŠçããã®ã¯ããã¹ãã»ãã£ãŒã«ãã»ã³ã³ãããŒã©ã«ãªãã ããã
å³4ïŒã¢ãã«ããã¥ãŒãã³ã³ãããŒã©ã«å¿ é ã®äŸåé¢ä¿ãïŒå¿ é ãšåŒãã§ããã®ã¯ãå®éã«ã¯ãã¥ãŒãšã³ã³ãããŒã©ããäºããšçŽæ¥ã€ãªãã£ãŠããããã ããéçºè ã¯éåžžãã®äºå®ãå©çšããªããïŒ
åŸã®ç°å¢ãšåæ§ã«ãSmalltalkã§ã¯åå©çšããããšãã§ããäžè¬çãªUIã³ã³ããŒãã³ããæãŸãããšããã£ãã ãã®å Žåããã®ã³ã³ããŒãã³ããšã¯ãã¥ãŒã»ã³ã³ãããŒã©ã®ãã¢ã«ãªãã ããã äž¡æ¹ãšãäžè¬çãªã¯ã©ã¹ã§ãåæ§ã«ãã¢ããªã±ãŒã·ã§ã³åºæã®ãµããŸãã«æ¥ç¶ãããå¿ èŠããã£ãã ãã©ãŒã ãšã³ã³ãããŒã©ã«ããããã©ãŒã ã«é¡äŒŒããæå³ã§ãç»é¢å šäœã衚çŸããããäœã¬ãã«ãªã³ã³ãããŒã«ã®ã¬ã€ã¢ãŠããå®çŸ©ããã§ãããè©äŸ¡ãã¥ãŒãããã ããã ããããã©ãŒã ãšã¯ç°ãªããMVCã¯ããäœã¬ãã«ãªã³ã³ããŒãã³ãã®ããã®ã€ãã³ãã»ãã³ãã©ãè©äŸ¡ã³ã³ãããŒã©ã«ã¯æã£ãŠããªãã
å³5ïŒã¢ã€ã¹ã¯ãªãŒã ã®ã¢ãã¿ãŒè¡šç€ºã®MVCçã®ã¯ã©ã¹
ããã¹ãã»ãã£ãŒã«ãã®æ§æã¯ãã¢ãã«ïŒæž¬å®å€ïŒãšã®ã€ãªãããäžããããã¹ããå€ãããšãã«ã©ããªã¡ãœãããå®è¡ããã¹ããã«ã€ããŠäŒããããšããæ¥ãã
ããã¯ãç»é¢ãåæåãããæã« #actual:
ã«ã»ãããããïŒSmalltalkã§ã¯ãå
è¡ãã #
ã¯ã·ã³ãã«ãŸãã¯ææãããæååã瀺ãïŒã
ç¶ããŠããã¹ãã»ãã£ãŒã«ãã®ã³ã³ãããŒã©ã¯ãå€åãããããããã«ã枬å®å€äžã®å¯Ÿå¿ããã¡ãœããããªãã¬ã¯ã·ã§ã³ã§èµ·åããã
åºæ¬çã«ãããã¯ããŒã¿ã»ãã€ã³ãã£ã³ã°ã§èµ·ããã®ãšåãã¡ã«ããºã ã§ãããã³ã³ãããŒã«ã¯æ ¹åºã«ãããªããžã§ã¯ãïŒåïŒã«ãªã³ã¯ãããŠããŠãã©ã®ã¡ãœããïŒã³ã©ã ïŒãæäœããããäŒããããŠããã
å³6ïŒMVCã§å®æž¬å€ãå€ãã
ãã£ãŠãäœã¬ãã«ã®ãŠã£ãžã§ãããç£èŠããŠããå šäœçãªãªããžã§ã¯ãã¯ãªããããã®ä»£ããã«äœã¬ãã«ã®ãŠã£ãžã§ãããã¢ãã«ãç£èŠããŠããããã©ãŒã ã«ãã£ãŠãªãããã§ãããæ±ºå®ã®å€ããèªåèªèº«ã§åãæ±ãã ãã®å Žåãçžéãç®åºããããšã«ã€ããŠã¯ã枬å®å€ãªããžã§ã¯ãèªäœããããããããã®èªç¶ãªå Žæã§ããã
ãªãã¶ãŒããŒã¯MVCã§èµ·ããããšã§ãå®éããã¯MVCã®å瞟ã§ããèãæ¹ã®1ã€ã§ããã
ãã®å Žåããã¹ãŠã®ãã¥ãŒãšã³ã³ãããŒã©ã¯ãã¢ãã«ã芳å¯ããã
ã¢ãã«ãå€ãããšãããã¥ãŒã¯åå¿ããã
ãã®å Žåã宿ž¬å€ã®ããã¹ãã»ãã£ãŒã«ãã»ãã¥ãŒã¯ã枬å®å€ãªããžã§ã¯ããå€ãã£ãããšãéç¥ããããã®ããã¹ãã»ãã£ãŒã«ãã®ã¢ã¹ãã¯ããšããŠå®çŸ©ãããã¡ãœããââãã®å Žå #actual
ââãå®è¡ããŠããã®å€ãçµæã«ã»ããããã
ïŒããã¯è²ã«ã€ããŠã®ããšã«é¡äŒŒããäœããããã®ã ããããã¯ããåŸã§åãäžããã€ããã§ãããèªåèªèº«ã®ã¹ãã¯ã¿ãŒãçºçããããïŒ
ããã¹ãã»ãã£ãŒã«ãã»ã³ã³ãããŒã©èªèº«ãå€ããã¥ãŒã«ã»ããããªãã£ãããšã«æ°ãã€ãã ãããããã¯ã¢ãã«ãæŽæ°ããŠãç¶ããŠç£èŠã¡ã«ããºã ã«æŽæ°ã®é¢åãèŠãããã ããã¯ããã©ãŒã ãã³ã³ãããŒã«ãæŽæ°ããæ ¹åºã«ããã¬ã³ãŒãã»ãããæŽæ°ããããã«ããŒã¿ã»ãã€ã³ãã£ã³ã°ã«é Œããšããããã©ãŒã ãšã³ã³ãããŒã«ã®ã¢ãããŒããšå šãç°ãªã£ãŠããã ããã2ã€ã®ã¹ã¿ã€ã«ããã¿ãŒã³ãšããŠèšè¿°ããïŒãããŒåæãšãªãã¶ãŒããŒåæã ãããã®2ã€ã®ãã¿ãŒã³ã¯ãç»é¢ç¶æ ãšã»ãã·ã§ã³ç¶æ ãšã®åæãéå§ãããããšãæ±ãããã®ç°ãªã£ãæ¹æ³ãèšè¿°ããã ãã©ãŒã ãšã³ã³ãããŒã«ã§ã¯ãçŽæ¥æŽæ°ãããå¿ èŠããããããããªã³ã³ãããŒã«ãæäœããŠããã¢ããªã±ãŒã·ã§ã³ã®æµããéããŠãå®è¡ãããã MVCã§ã¯ãã¢ãã«ãæŽæ°ããç¶ããŠãã®ã¢ãã«ã芳å¯ããŠãããã¥ãŒãæŽæ°ããããã«ãªãã¶ãŒããŒé¢ä¿ã«é Œãããšã«ãã£ãŠãå®è¡ãããã
ããŒã¿ã»ãã€ã³ãã£ã³ã°ãååšããªããšãããããŒåæã¯ããã«æããã«ãªãã ã¢ããªã±ãŒã·ã§ã³èªèº«ãåæãããå¿ èŠããããªãã°ãå žåçã«ã¯ã¢ããªã±ãŒã·ã§ã³ã®æµãã®äžã®éèŠãªãã€ã³ãââäŸãã°ç»é¢ãéããããä¿åãã¿ã³ãæŒããããããšãââã«å®è¡ãããã
ãªãã¶ãŒããŒåæã®çµæã®1ã€ã¯ããŠãŒã¶ãŒãç¹å®ã®ãŠã£ãžã§ãããæäœãããšãã«ã¯ããã®ã³ã³ãããŒã©ã¯ä»ã®ã©ã®ãŠã£ãžã§ããã倿Žããå¿ èŠãããã®ããå šãç¥ããªããšããããšã§ããã ãã©ãŒã ããã®ããšãç£èŠããŠããŠãããå€åã«å¯ŸããŠå šäœçãªç»é¢ç¶æ ãéŠå°Ÿäžè²«ãããå¿ èŠãããäžæ¹ã§ãããã¯è€éãªç»é¢ã§ã¯ããªã倧å€ãªããšãªã®ã ãããªãã¶ãŒããŒåæã®ã³ã³ãããŒã©ã¯ããããããšãç¡èŠããããšãã§ããã
åãã¢ãã«ã»ãªããžã§ã¯ããèŠãŠããè€æ°ã®ç»é¢ãéãããŠããŠãããªãã°ããã®åœ¹ã«ç«ã€ç¡ç¥ã¯ç¹ã«äŸ¿å©ã«ãªãã å€å žçãªMVCã®äŸã¯ããŒã¿ç»é¢ã®ãããªã¹ãã¬ããã·ãŒãã§ããã®ããŒã¿ã®ç°ãªãã°ã©ããæ°åãå¥ã ã®ãŠã€ã³ããŠã«çœ®ãããŠãããããªãã®ã ã£ãã ã¹ãã¬ããã·ãŒãã»ãŠã€ã³ããŠã¯ä»ã«ã©ããªãŠã€ã³ããŠãéããŠãããç¥ã£ãŠããå¿ èŠã¯ãªããåã«ã¢ãã«ãå€ããã°ãªãã¶ãŒããŒåæãæ®ãã®é¢åãèŠãã ãããŒåæã§ã¯ããªãã¬ãã·ã¥ããããã«äŒããããã«ãä»ã«ã©ã®ãŠã€ã³ããŠãéããŠãããã«ã€ããŠç¥ãè¥å¹²ã®ããæ¹ãå¿ èŠãšããã ããã
ãªãã¶ãŒããŒåæã¯çŽ æŽãããããããã«ãæ¬ ç¹ãããã ãªãã¶ãŒããŒåæã«é¢ããåé¡ã¯ãªãã¶ãŒããŒã»ãã¿ãŒã³ãã®ãã®ã®æ ¹æ¬çãªåé¡ã§ããââäœãèµ·ãã£ãŠãããã«ã€ããŠãã³ãŒããèªãããšã§ã¯çè§£ã§ããªãã Smalltalk 80ã®ããã€ãã®ç»é¢ãã©ã®ããã«åãã調ã¹ãããšãããšããç§ã¯éåžžã«å匷ããããæãåºããã ã³ãŒããèªãããšã«ãã£ãŠç§ã¯ãšãŠãé ããŸã§ãã©ãçãããšãã§ããããäžæŠç£èŠã¡ã«ããºã ãåãå§ãããªãã°ãäœãèµ·ããŠãããç¥ãããšãã§ããå¯äžã®æ¹æ³ã¯ãããã¬ãŒãšãã¬ãŒã¹æãéããŠã§ãã£ãã ãªãã¶ãŒããŒã®ãµããŸãã¯æœåšçãªãµããŸãã§ããã®ã§ãçè§£ããŠãããã°ããã®ãé£ããã
åæãžã®ã¢ãããŒãã®éãã¯ç¹ã«ã·ãŒã±ã³ã¹å³ãèŠãããšã§ç®ç«ã€ããã©ããæãéèŠã§æã圱é¿åãããéãã¯MVCã§ã®Separated Presentationã®äœ¿çšã§ããã 宿ž¬å€ãšç®æšå€ãšã®çžéãèšç®ããããšã¯ãã¡ã€ã³ã®ãµããŸãã§ãããUIã«ã¯äœãé¢ä¿ããªãã ãã®çµæã以äžã®Separated Presentationã¯ãããã·ã¹ãã ã®ãã¡ã€ã³å±€ã®äžã«çœ®ããªããã°ãªããªããšèšãââããã¯ééããªã枬å®å€ãªããžã§ã¯ãã衚çŸãããã®ã§ããã æž¬å®å€ãªããžã§ã¯ããèŠãã°ãçžéã®æ©èœã¯ãŠãŒã¶ã»ã€ã³ã¿ãã§ãŒã¹ã®ã©ããªæŠå¿µãªãã§ã§ãå®å šã«æå³ããªãã
ããããã®ç¹ã§ãè¥å¹²ã®è€éåãèŠãããããã«ãªãã MVCè«ã®éªéã«ãªãåä»ãªç¹ãé£ã°ããé åã2ã€ããã æåã®åé¡é åã¯ãçžéã®è²ãèšå®ããããšã®åãæ±ãã§ããã ããããã¡ã€ã³ã»ãªããžã§ã¯ãã«å®éã«é©åãããŠã¯ãªããªããå€ã衚瀺ããéã®è²ã¯ãã¡ã€ã³ã®äžéšã§ã¯ãªãããã ã ããã«å¯ŸåŠããããšã®ç¬¬äžæ©ã¯ãããžãã¯ã®äžéšããã¡ã€ã³ã»ããžãã¯ã§ãããšçè§£ããããšã§ããã ããã§ããŠããããšã¯ãçžéã«ã€ããŠè³ªçãªèšæãããããšã§ãããè¯ïŒ5%以äžé«ãïŒãæªïŒ10%以äžäœãïŒããããŠæšæºïŒæ®ãïŒãšåŒã¶ããšãã§ããã ãã®è©äŸ¡ãããããšã¯ç¢ºãã«ãã¡ã€ã³èšèªã§ãããããããè²ã«å¯Ÿå¿ä»ããŠçžéãã£ãŒã«ããå€ããããšã¯ãã¥ãŒã»ããžãã¯ã§ããã åé¡ã¯ããã®ãã¥ãŒã»ããžãã¯ãã©ãã«çœ®ããã§ããââããã¯æšæºããã¹ãã»ãã£ãŒã«ãã®äžéšã§ã¯ãªãã
ãã®çš®ã®åé¡ã¯åæã®SmalltalkersãçŽé¢ãã圌ãã¯è§£æ±ºæ¡ãããã€ãçã¿åºããã ç§ãäžã§ç€ºãã解決æ¡ã¯ãæ±ããã®ââåããããã«ããã¡ã€ã³ã®çŽåºŠã«ã€ããŠãããã劥åããããšââã§ããã ç§ã¯èšæã®æ±ãè¡çºã¯èªãããââãããããããç¿æ £ã«ããªãããã«å€ããã
ãã©ãŒã ãšã³ã³ãããŒã«ã§ãªãããããšã¯ã»ãšãã©ã§ããââè©äŸ¡ç»é¢ãã¥ãŒã«çžéãã£ãŒã«ãã»ãã¥ãŒãç£èŠãããçžéãã£ãŒã«ããå€åãããšãã«ã¯è©äŸ¡ç»é¢ãåå¿ããŠçžéãã£ãŒã«ãã®ããã¹ãã»ã«ã©ãŒãèšå®ã§ããã ããã§ã®åé¡ã¯ãããã«å€ãã®ç£èŠã¡ã«ããºã ã®äœ¿çšââãããŠãããã䜿ãã°äœ¿ãã»ã©ãææ°çã«è€éã«ãªã£ãŠããââããã³ãããŸããŸãªãã¥ãŒã®éã®äœèšãªçµåãå«ãã§ããã
ç§ã奜ãããæ¹ã¯ãUIã³ã³ãããŒã«ã®æ°ããåãé ãããšã§ããã æ ¹æ¬çã«å¿ èŠãªãã®ã¯ããã¡ã€ã³ã«è³ªçãªå€ãèŠæ±ãããããå€ãšè²ã«é¢ããå éšããŒãã«ã«ç §ããåãããããã«å¿ããŠãã©ã³ãã®è²ãã»ãããããããªUIã³ã³ãããŒã«ã§ããã ãã®ããŒãã«ãšããã¡ã€ã³ã»ãªããžã§ã¯ãã«å°ããã¡ãã»ãŒãžã®äž¡æ¹ã¯ãè©äŸ¡ãã¥ãŒãèªåèªèº«ãçµã¿ç«ãŠããšãã«ããã£ãŒã«ããã¢ãã¿ãŒããå€èгãèšå®ããã®ãšåæ§ã«èšå®ãããã ããã 远å ã®ãµããŸããå ããããã ãã«ããã¹ãã»ãã£ãŒã«ãããµãã¯ã©ã¹åããããšãç°¡åã«ã§ãããªãã°ããã®ã¢ãããŒãã¯éåžžã«ããæ©èœãåŸãã ããã¯æããã«ãã³ã³ããŒãã³ããã©ãããããµãã¯ã©ã¹åããããèšèšãããŠãããæ¬¡ç¬¬ã§ããââSmalltalkã§ã¯éåžžã«ç°¡åã«ã§ããââä»ã®ç°å¢ã§ã¯ãã£ãšé£ãããããããªãã
å³7ïŒè²ã決å®ããããã«æ§æã§ããããã¹ãã»ãã£ãŒã«ãã®ç¹å¥ãªãµãã¯ã©ã¹ã䜿çšãã
æåŸã®ã«ãŒãã¯ãæ°ããçš®é¡ã®ã¢ãã«ã»ãªããžã§ã¯ããã€ãŸãç»é¢ã®è¿ãã«çœ®ãããŠãããããŠã£ãžã§ããããã¯ç¬ç«ããŠããã¢ãã«ãäœãããšã§ããã ããã¯ãç»é¢ã«é¢ããã¢ãã«ã«ãªãã ããã æž¬å®å€ãªããžã§ã¯ãã®ã¡ãœãããšåãã¡ãœããã¯ãã æž¬å®å€ã«å§ä»»ãããããUIã ãã«é¢é£ãããµããŸããäŸãã°ããã¹ãã®è²ãªã©ãããµããŒãããã¡ãœããã远å ãããã ããã
å³8ïŒãã¥ãŒã»ããžãã¯ãåãæ±ãããã«äžéã®ãã¬ãŒã³ããŒã·ã§ã³ã»ã¢ãã«ã䜿ã
ãã®æåŸã®éžæè¢ã¯å€æ°ã®ã±ãŒã¹ã§ããŸãæ©èœããŠãèŠãŠåããããã«ãåŸã«ç¶ãSmalltalkerãã¡ã®äžè¬çãªéã«ãªã£ãââããã¯å®éã«èšèšããããã¬ãŒã³ããŒã·ã§ã³å±€ã®äžéšãšãªã£ãŠããã¢ãã«ã§ããã®ã§ãç§ã¯ãããPresentation ModelãšåŒã¶ã
Presentation Modelã¯ãããäžã€ã®ãã¬ãŒã³ããŒã·ã§ã³ã»ããžãã¯åé¡ââãã¬ãŒã³ããŒã·ã§ã³ç¶æ ââã§ãããŸãæ©èœããã åºæ¬çãªMVCã®æŠå¿µã¯ããã¥ãŒã®ãã¹ãŠã®ç¶æ ãã¢ãã«ã®ç¶æ ããåŸããããšä»®å®ããŠããã ãã®å Žåããªã¹ãããã¯ã¹ã§ã©ã®ã¹ããŒã·ã§ã³ãéžæãããŠãããã«ã€ããŠã¯ã©ãããã°ãããã ãããïŒ Presentation Modelã¯ããã®çš®ã®ç¶æ ãé 眮ããããã®å ŽæãæäŸããããšã«ãã£ãŠè§£æ±ºããã ããŒã¿ãå€ãã£ããšãã ã䜿çšå¯èœã«ãªãä¿åãã¿ã³ããããªãã°ãé¡äŒŒããåé¡ãèµ·ããââç¹°ãè¿ãããããã¯ã¢ãã«ã«å¯Ÿããæã ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«ã€ããŠã®ç¶æ ã§ãã£ãŠãã¢ãã«ãã®ãã®ã§ã¯ãªãã
ããŠãããããMVCã«ã€ããŠã®ãµãŠã³ããã€ãã®æéã ããã
- ãã¬ãŒã³ããŒã·ã§ã³ïŒãã¥ãŒãšã³ã³ãããŒã©ïŒãšãã¡ã€ã³ïŒã¢ãã«ïŒã®éã匷ãåé¢ããªããââSeparated Presentationã
- GUIãŠã£ãžã§ãããïŒãŠãŒã¶ãŒåºæ¿ã«åå¿ããããã®ïŒã³ã³ãããŒã©ãšïŒã¢ãã«ã®ç¶æ ã衚瀺ããããã®ïŒãã¥ãŒã«åããªãããã³ã³ãããŒã©ãšãã¥ãŒã¯ãïŒäž»ã«ïŒçŽæ¥ã§ã¯ãªãã¢ãã«ãéããŠéä¿¡ããªããã°ãªããªãã
- ãã¥ãŒïŒãšã³ã³ãããŒã©ïŒã«ã¢ãã«ãç£èŠãããè€æ°ã®ãŠã£ãžã§ãããçŽæ¥éä¿¡ããå¿ èŠãªãã«æŽæ°ãããªããââãªãã¶ãŒããŒåæã
äžã§èª¬æããããã«ãSmalltalk 80ã®MVCã¯éåžžã«åœ±é¿åããããåªããç¹åŸŽããã£ããã誀ãããã£ãã 80幎代ãš90幎代ã«Smalltalkãçºéããã«ã€ããŠãå€å žçãªMVCã¢ãã«ã®éèŠãªããªãšãŒã·ã§ã³ãããã€ãçŸããããšãšãªã£ãã ãããã¥ãŒ/ã³ã³ãããŒã©ã®åé¢ãMVCã«äžå¯æ¬ ãªéšåã§ãããšèãããªãã°ãMVCã¯æ¶ããŠããŸã£ããšèšã£ãŠãå®ã¯éèšã§ã¯ãªãââååãæå³ããã®ã¯ããããããšã ã
MVCã§æããã«åœ¹ã«ç«ã£ããã®ã¯ãSeparated Presentationãšãªãã¶ãŒããŒåæã§ãã£ãã ãããSmalltalkãçºéããã®ã«ã€ããŠããããã¯ãšã©ãŸã£ãââå®éã«å€ãã®äººã ã«ãšã£ãŠãããã¯MVCã®éèŠãªæ§æèŠçŽ ã§ãã£ãã®ã ã
è¿å¹Žã¯Smalltalkããã©ãã©ã«ãªã£ãã ïŒæå°éã®ïŒèšèªå®çŸ©ãšãã£ãSmalltalkã«ã€ããŠã®åºæ¬çãªèãã¯åããŸãŸã ã£ãããè€æ°ã®Smalltalkãç°ãªãã©ã€ãã©ãªã§çºå±ããã®ãèŠãã ããã€ãã®ã©ã€ãã©ãªããã€ãã£ãã»ãŠã£ãžã§ãããããªãã¡ãã©ãŒã ãšã³ã³ãããŒã«ã»ã¹ã¿ã€ã«ã§çšããããã³ã³ãããŒã«ã䜿ãå§ããã«ã€ããŠãããã¯UIã®å±æããéèŠã«ãªã£ãã
Smalltalkã¯åœåXerox Parcç ç©¶æã§éçºãããSmalltalkãåžå Žã«åºããŠçºå±ãããããã®å¥ã®äŒç€ŸïŒParcPlaceïŒãåé¢ç¬ç«ããã ParcPlace Smalltalkã¯VisualWorksãšåŒã°ããã¯ãã¹ãã©ãããã©ãŒã ã»ã·ã¹ãã ã§ããããšãéèŠããŠããã Javaã®ãã£ãšåã«ãWindowsã§æžãããSmalltalkããã°ã©ã ãåã£ãŠããŠãããããã®ãŸãŸSolarisäžã§åããããšãã§ããã ãã®çµæãVisualWorksã¯ãã€ãã£ãã»ãŠã£ãžã§ããã䜿ãããGUIãå®å šã«Smalltalkã®ç¯å²å ã«ä¿ã£ãã
MVCã«é¢ããè°è«ã«ãããŠãç§ã¯MVCã®è¥å¹²ã®åé¡ââç¹ã«ãã¥ãŒã»ããžãã¯ãšãã¥ãŒç¶æ ã«å¯ŸåŠããæ¹æ³ââãæ®ããã VisualWorksã¯ãããã«å¯ŸåŠããããã«Application ModelãšåŒã°ããŠããæ§ææŠå¿µââPresentation Modelã®æ¹ãžé²ãæ§ææŠå¿µââãçã¿åºãããšã§ãèªèº«ã®ãã¬ãŒã ã¯ãŒã¯ãçŽåããã Presentation Modelã®ãããªãã®ã䜿ããšããã¢ã€ãã¢ã¯ãVisualWorksã§ã¯æ°ãããªãã£ãââæåã®Smalltalk 80ã³ãŒãã»ãã©ãŠã¶ãŒã¯éåžžã«é¡äŒŒããŠããããVisualWorks Application Modelã¯ããããå®å šã«ãã¬ãŒã ã¯ãŒã¯ã«çŒãåºããã
ãã®çš®ã®smalltalkã®éèŠãªæ§æèŠçŽ ã¯ãããããã£ããªããžã§ã¯ãã«å€ãããšããã¢ã€ãã¢ã§ãã£ãã
ããããã£ããã€ãªããžã§ã¯ãã®æ®éã®æŠå¿µã«ãããŠãæ°åãšäœæã®ããã®ããããã£ãæã£ãŠããPersonãªããžã§ã¯ãã«ã€ããŠèããã
ãããã®ããããã£ã¯ãã£ãŒã«ãã§ãããããããªãããäœãä»ã®ãã®ã§ãããã£ãã
ããããã£ã«ã¢ã¯ã»ã¹ããããã®æšæºçãªæ
£äŸãéåžžã¯ååšããïŒ
Javaã§ã¯ã temp = aPerson.getName()
ãš aPerson.setName("martin")
ãèŠãããã ããããC#ã§ã¯ã temp = aPerson.name
ãš aPerson.name = "martin"
ãšãªãã ããã
Property Object ã¯ãå®éã®å€ãã©ãããããªããžã§ã¯ããè¿ãããããã£ãæã£ãŠããããšã§ãããå€ããã
ãã£ãŠVisualWorksã§ã¯ãååãèŠæ±ãããšãã©ããã³ã°ã»ãªããžã§ã¯ããæ»ãããã
æã
ã¯ãç¶ããŠãã©ããã³ã°ã»ãªããžã§ã¯ãã«ãã®å€ãèŠæ±ããããšã«ãã£ãŠãå®éã®å€ãåŸãã
ãããã£ãŠã人åã«ã¢ã¯ã»ã¹ããæã¯ temp = aPerson name value
ããã³ aPerson name value: 'martin'
ãšãªãã ããã
Property Objectã¯ããŠã£ãžã§ãããšã¢ãã«ã®éã®ãããã³ã°ãå°ãç°¡åã«ããã
察å¿ããããããã£ãåŸãããã«éãã¡ãã»ãŒãžããŠã£ãžã§ããã«æããªããã°ãªããªãããããŠããŠã£ãžã§ãã㯠value
ããã³ value:
ã䜿ã£ãŠé©åãªå€ã«ã¢ã¯ã»ã¹ããããšãç¥ã£ãŠããã
VisualWorksã®ããããã£ã»ãªããžã§ã¯ãã§ããonChangeSend: aMessage to: anObserver
ã¡ãã»ãŒãžã§ãªãã¶ãŒããŒãæ§æããããšãã§ããã
Visual Worksã«ã¯ãããããã£ã»ãªããžã§ã¯ããšåŒã°ããŠããã¯ã©ã¹ã¯å®ã¯ååšããªãã
ãã®ä»£ããã«ãå€ãã®ã¯ã©ã¹ããvalue
/ value:
/ onChangeSend:
ãããã³ã«ã«åŸã£ãŠããã
æãåçŽãªãã®ã¯ValueHolderã§ããââããã¯èªåèªèº«ã®å€ãä¿æããã
ãã®è°è«ãžã®é¢é£æ§ãããã«é«ãã®ã¯AspectAdaptorã§ããã
AspectAdaptorã§ã¯ãããããã£ã»ãªããžã§ã¯ããå¥ã®ãªããžã§ã¯ãã®ããããã£ãå®å
šã«ã©ããã§ããã
ããããŠã以äžã®ãããªã³ãŒãã§ãPersonãªããžã§ã¯ãã®ããããããã£ãã©ããããPersonUIã¯ã©ã¹ã®ããããã£ãå®çŸ©ã§ããã
adaptor := AspectAdaptor subject: person
adaptor forAspect: #name
adaptor onChangeSend: #redisplay to: self
ããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ãåäœäžã®äŸã«ã©ãé©åãããã«ã€ããŠèŠãŠã¿ããã
å³9ïŒåäœäžã®äŸã«é¢ããVisual Worksã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ã«ã€ããŠã®ã¯ã©ã¹å³
ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ã䜿ãããšãšå€å žçMVCã䜿ãããšã®äž»ãªéãã¯ãåè ã¯ãã¡ã€ã³ã»ã¢ãã«ã»ã¯ã©ã¹ïŒãªãŒããŒïŒãšãŠã£ãžã§ããã®éã«äžéã®ã¯ã©ã¹ãæã£ãŠããããšã§ããââãããã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ã»ã¯ã©ã¹ã§ããã ãŠã£ãžã§ããã¯ãã¡ã€ã³ã»ãªããžã§ã¯ãã«çŽæ¥ã¢ã¯ã»ã¹ããªãââãŠã£ãžã§ããã®ã¢ãã«ã¯ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ã§ããã ãŠã£ãžã§ããã¯ãŸã ãã¥ãŒãšã³ã³ãããŒã©ã«åè§£ãããããæ°ãããŠã£ãžã§ãããé ãã®ã§ãªãéãããã®åºå¥ã¯éèŠã§ãªãã
UIãçµã¿ç«ãŠããšãã¯UIãã€ã³ã¿ãŒã§äœæ¥ãããããã®éã«ãã€ã³ã¿ãŒã§ã¯åã ã®ãŠã£ãžã§ããã®ã¢ã¹ãã¯ããèšå®ããã ã¢ã¹ãã¯ãã¯ãããããã£ã»ãªããžã§ã¯ããè¿ãã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ã®ã¡ãœããã«å¯Ÿå¿ããã
å³10ïŒå®æž¬å€ãæŽæ°ãããšã©ã®ããã«çžéããã¹ããæŽæ°ããããã«ã€ããŠç€ºããŠããã·ãŒã±ã³ã¹å³
å³10ã¯ãåºæ¬çãªæŽæ°ã·ãŒã±ã³ã¹ãã©ã®ããã«æ©èœãããã«ã€ããŠç€ºãã ããã¹ãã»ãã£ãŒã«ãã®å€ãå€ãããšããã®ãã£ãŒã«ãã¯ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ã®å åŽã§ããããã£ã»ãªããžã§ã¯ãã®äžã®å€ãæŽæ°ããã ãã®æŽæ°ã¯æ ¹åºã«ãããã¡ã€ã³ã»ãªããžã§ã¯ãã«ãŸã§å±ãããã®å®æž¬å€ãæŽæ°ããã
ããã§ç£èŠé¢ä¿ãäœåããã宿ž¬å€ãæŽæ°ãããšã倿Žããããšã枬å®å€ã«ç€ºããããã«ããããããšçµã¿ç«ãŠãå¿ èŠãããã æž¬å®å€ãªããžã§ã¯ããå€ãã£ãââç¹ã«ãçžéã®å€èгãå€ãã£ãââããšã宿ž¬å€ã瀺ãããã«ã倿ŽããåŽã«åŒã³åºãã眮ãã çžéã®ã¢ã¹ãã¯ãã»ã¢ããã¿ãŒãçµã¿ç«ãŠããšãã«ã枬å®å€ãç£èŠããæŽæ°ã¡ãã»ãŒãžãåãäžããç¶ããŠããã¹ãã»ãã£ãŒã«ãã«éãå±ããããæç€ºããã®ã¯ç°¡åã§ããã ç¶ããŠããã¹ãã»ãã£ãŒã«ãã¯ãåã³ã¢ã¹ãã¯ãã»ã¢ããã¿ãŒã«ãã£ãŠãæ°ããå€ãåŸãããšãå§ããã
ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ãšããããã£ã»ãªããžã§ã¯ãããã®ããã«äœ¿ãããšã§ãå€ãã®ã³ãŒããæžãããšãªãæŽæ°ãé ç·ããããšãæ¯æŽã§ããã ããããããã现ããåæïŒç§ã¯è¯ãããšã§ãããšã¯æããªããïŒããµããŒãããã
ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ã«ãã£ãŠãçã®ãã¡ã€ã³ã»ããžãã¯ããUIã«ç¹æã®ãµããŸããšç¶æ ãåãé¢ãããšãã§ããã ãã£ãŠãåã«èšåããåé¡ã®ãã¡ã®1ã€ã§ããããªã¹ãäžã®çŸåšéžæãããŠããé ç®ãä¿æããããšã«ã€ããŠã¯ããã¡ã€ã³ã»ã¢ãã«ã®ãªã¹ããã©ããããŠããã€çŸåšéžæãããŠããé ç®ãä¿åãããç¹å®ã®çš®é¡ã®ã¢ã¹ãã¯ãã»ã¢ããã¿ãŒãçšããããšã§è§£æ±ºã§ããã
ããããããã«ããå¶éã¯ãããã«è€éãªãµããŸãã®ããã«ã¯ãç¹å¥ãªãŠã£ãžã§ãããšããããã£ã»ãªããžã§ã¯ããé ãå¿ èŠããããšããããšã§ããã äžäŸãšããŠãæäŸããããªããžã§ã¯ãã®éåã¯ãçžéã®ããã¹ãè²ãšçžéã®çšåºŠãšãçµã³ä»ããææ®µãæäŸããªãã ã¢ããªã±ãŒã·ã§ã³ãšãã¡ã€ã³ã»ã¢ãã«ãåãé¢ãããšã§ãæææ±ºå®ãæ£ããããæ¹ã§åãé¢ãããšãã§ãããããããã¢ã¹ãã¯ãã»ã¢ããã¿ãŒãç£èŠãããŠã£ãžã§ããã䜿ãããã«ã¯ãæ°ããã¯ã©ã¹ãããã€ãäœãå¿ èŠãããã ãã°ãã°ãããã¯äœæ¥ãå€ããããšã¿ãªãããã®ã§ãå³11ã®å Žåã®ããã«ãã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ãçŽæ¥ãŠã£ãžã§ããã«ã¢ã¯ã»ã¹ããã®ãèš±ãããšã«ãã£ãŠããã®æã®ããšãããç°¡åã«ããããšãã§ããã
å³11ïŒã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ãçŽæ¥ãŠã£ãžã§ãããæäœããããšã«ãã£ãŠè²ãæŽæ°ãã
ãã®ããã«ãŠã£ãžã§ãããçŽæ¥æŽæ°ããããšã¯Presentation Modelã®äžéšåã§ã¯ãªãããããŠãããã¯Visual Worksã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ãçã®Presentation Modelã§ã¯ãªãçç±ã§ããã ãã®ããŠã£ãžã§ãããçŽæ¥æäœããããšãå¿ èŠãªããšã¯ãå€ãã®äººã«ãã£ãŠã¡ãã£ãšæ±ãåé¿æ¹æ³ãšã¿ãªãããModel-View-Presenterã¢ãããŒããçºå±ããã®ãå©ããã
ããŠãããã§ã¯Application Modelã®ãµãŠã³ããã€ãã ã
- Separated Presentationãšãªãã¶ãŒããŒåæã䜿ãããšã§MVCã«åŸã£ãã
- ãã¬ãŒã³ããŒã·ã§ã³ã»ããžãã¯ãšç¶æ ã®åçŽå ŽæââPresentation Modelã®éšåçãªçºå±ââãšããŠäžéã®ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ãå°å ¥ããã
- ãŠã£ãžã§ããã¯ãã¡ã€ã³ã»ãªããžã§ã¯ããçŽæ¥ç£èŠããããã®ä»£ããã«ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ãç£èŠããã
- ãããããªå±€ãã€ãªãã®ãå©ãããªãã¶ãŒããŒãçšããããã®çްããåæããµããŒãããããã«ãProperty Objectsãåºç¯å²ã«å©çšããã
- ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ããŠã£ãžã§ãããæäœããããšã¯ããã©ã«ãã®ãµããŸãã§ã¯ãªãã£ãããè€éãªã±ãŒã¹ã§ã¯äžè¬çã«ãªãããã
MVPã¯ãæåã¯IBMã§ç»å Žãã1990幎代ã®Taligentã§ããç®ã«ããããã«ãªã£ãã¢ãŒããã¯ãã£ã§ããã ããã¯ãPotelã®è«æããæãåºãåŒçšãããã ãã®èãã¯ãDolphin Smalltalkã®éçºè ãã¡ã«ãã£ãŠããã«æ®åãã解説ãããã èŠãã°ãããããã«ã2ã€ã®èª¬æã¯å®å šã«ãã¿åããšããããã§ã¯ãªãããããã®å ãšãªãåºæ¬çãªèãã¯æåã«ãªã£ãã
MVPã«åãçµãããã«ã¯ãUIç ç©¶ã®2ã€ã®èŠçŽ ã«ããé倧ãªãã¹ãããã«ã€ããŠèããããšã圹ã«ç«ã€ãšããã£ãã äžæ¹ã§ã¯ãUIèšèšã«ãããäž»æµã®ã¢ãããŒãã ã£ãã®ã¯ãã©ãŒã ãšã³ã³ãããŒã©ã»ã¢ãŒããã¯ãã£ã§ããã仿¹ã§ã¯ãããã¯MVCããã³ãã®æŽŸçç©ã§ããã ãã©ãŒã ãšã³ã³ãããŒã«ã»ã¢ãã«ã¯ãçè§£ããã®ãç°¡åã§ãåå©çšå¯èœãªãŠã£ãžã§ãããšã¢ããªã±ãŒã·ã§ã³åºæã³ãŒããããŸãåé¢ãããããªèšèšãæäŸããã ããã«äžè¶³ãããã®ããããŠMVCã匷åã«æã£ãŠãããã®ã¯ãSeparated Presentationãšãå®ã®ãšãããDomain Modelã䜿ãããã°ã©ãã³ã°ã®ã³ã³ããã¹ãã§ããã ç§ã¯ãMVPãšã¯äž¡æ¹ã®æœ®æµãçµã³ã€ããŠãããšãåããããããšããããã®ã¹ãããã ãšçè§£ããŠããã
Potelã®æåã®æ§æèŠçŽ ã¯ãã¥ãŒããŠã£ãžã§ããã®æ§é ãšã¿ãªãããšããšã§ããããŠã£ãžã§ããã¯ãã©ãŒã ãšã³ã³ãããŒã«ã»ã¢ãã«ã®ã³ã³ãããŒã«ã«å¯Ÿå¿ããã©ããªãã¥ãŒ/ã³ã³ãããŒã©åé¢ã§ãåãé€ãã MVPã®ãã¥ãŒã¯ããããããŠã£ãžã§ããã®æ§é ã§ããã ããã«ã¯ããŠã£ãžã§ããããŠãŒã¶ãŒã»ã€ã³ã¿ã©ã¯ã·ã§ã³ã«åå¿ããæ¹æ³ãèšè¿°ãããããªãµããŸãã¯å šãå«ãŸããªãã
ãŠãŒã¶ãŒã®è¡çºã«å¯ŸããæŽ»çºãªåå¿ã¯ãå¥ã®ãã¬ãŒã³ã¿ãŒã»ãªããžã§ã¯ãã«çœ®ãããã ãŠãŒã¶ãŒã»ãžã§ã¹ãã£ãŒã®åºæ¬çãªãã³ãã©ãŒã¯ãŸã ãŠã£ãžã§ããã«ååšãããããããã®ãã³ãã©ãŒã¯åã«ãã¬ãŒã³ã¿ãŒã«å¶åŸ¡ãæž¡ãã ãã§ããã
ãã¬ãŒã³ã¿ãŒã¯ãç¶ããŠãã€ãã³ãã«åå¿ããæ¹æ³ã決å®ããã Potelã¯äž»ã«ã¢ãã«ã«åãŒãåãã«é¢ããŠãã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãæ€èšããåœä»€ãšéžæã®ã·ã¹ãã ã«ãã£ãŠå®çŸããã ããã§åŒ·èª¿ãã¹ã圹ã«ç«ã€ããšã¯ãã¢ãã«ã®ç·šéããã¹ãŠåœä»€ã§å ãã¢ãããŒãã§ããââããã¯ã¢ã³ãã¥/ããçŽãã®ãµããŸããæäŸããè¯ãåºç€ãæäŸããã
ãã¬ãŒã³ã¿ãŒãã¢ãã«ãæŽæ°ãããšãããã¥ãŒã¯MVCã䜿ãã®ãšåæ§ã®ãªãã¶ãŒããŒåæã¢ãããŒãã«ãã£ãп޿°ãããã
Dolphinã®èª¬æãé¡äŒŒããŠããã ç¹°ãè¿ãã«ãªãããäž»èŠãªé¡äŒŒæ§ã¯ããã¬ãŒã³ã¿ãŒã®ååšã§ããã Dolphinã®èª¬æã§ã¯ãåœä»€ãšéžæãéããŠã¢ãã«ã«äœçšãããã¬ãŒã³ã¿ãŒã®æ§é ã¯ååšããªãã ãã¥ãŒãçŽæ¥æäœãããã¬ãŒã³ã¿ãŒãã¯ã£ããè°è«ãããŠããã Potelã¯ãã¬ãŒã³ã¿ãŒããããã¹ããã©ããã«ã€ããŠè©±ããŠããªãããDolphinã«ãšã£ãŠã¯ãå€åãã£ãŒã«ãã®ããã¹ãã«è²ãã€ããããšãåä»ã«ããŠãããããªApplication Modelã®æ¬ ç¹ã解決ããããã«ãã®èœåã¯å¿ é ã ã£ãã
MVPã®ããšãèããæã®ããªãšãŒã·ã§ã³ã®1ã€ã¯ããã¬ãŒã³ã¿ãŒããã¥ãŒã®ãŠã£ãžã§ãããå¶åŸ¡ãã床åãã§ããã äžæ¹ã§ã¯ããã¹ãŠã®ãã¥ãŒã»ããžãã¯ããã¥ãŒã«æ®ãããã¢ãã«ãæç»ããæ¹æ³ã決å®ããããšã«ãã¬ãŒã³ã¿ãŒãé¢ä¿ããŠããªãã±ãŒã¹ãããã ãã®ã¹ã¿ã€ã«ã¯ãPotelã«ãã£ãŠæç€ºããããã®ã§ããã BowerãšMcGlashanã«ç¶ãæ¹åã¯ç§ãSupervising ControllerãšåŒãã§ãããã®ã ãããã¥ãŒã¯å®£èšçã«èšè¿°ããããã¥ãŒã»ããžãã¯ãå€ãåãæ±ããç¶ããŠãã¬ãŒã³ã¿ãŒããããè€éãªã±ãŒã¹ãåãæ±ãããã«çŸããã
ãã¬ãŒã³ã¿ãŒã«ãŠã£ãžã§ããã®ãã¹ãŠã®æäœããããæ¹åã«ããã£ãšåãããšãã§ããã ãã®ã¹ã¿ã€ã«ã¯ãç§ã¯Passive ViewãšåŒãã§ããããã©ããMVPã®å ã ã®èª¬æã®äžéšã§ã¯ãªãã®ã ãã人ã ããã¹ãå¯èœæ§ã®åé¡ã調æ»ããã«ã€ããŠéçºãããã ãã®ã¹ã¿ã€ã«ã«ã€ããŠã¯åŸã§è©±ãã€ããã ãããã®ã¹ã¿ã€ã«ã¯MVPã®å³ã€ãã®1ã€ã§ããã
åã«æ€èšãããã®ãšMVPãšã察æ¯ããåã«ãããã§æããäž¡æ¹ã®MVPè«æãåãããã«ããŠããââãã ããç§ã®è§£éãšå šãåãã§ã¯ãªãââããšã«ã€ããŠèšåããªããã°ãªããªãã Potelã¯MVCã®ã³ã³ãããŒã©ãå šäœçãªã³ãŒãã£ããŒã¿ãŒã ã£ããšæã«èšãââããã¯ç§ãçè§£ããŠããæ¹æ³ã§ã¯ãªãã Dolphinã¯ãMVCã®åé¡ã«ã€ããŠãããã話ããŠããããMVCãšããèšèã§åœŒããèšã£ãŠãããã®ã¯ãç§ã説æããå€å žçãªMVCãšãããããVisualWorksã®Application Modelèšèšãæå³ããŠããïŒç§ã¯ããã責ãããããªãââçŸåšãå€å žçãªMVCã«é¢ããæ å ±ãåŸãããšããã®ã¯ç°¡åã§ãªããã ããã»ãã£ãŠããããïŒ
ããã§ã¯ããã§ã¡ãã£ãšæ¯èŒããŠã¿ããïŒ
- ãã©ãŒã ãšã³ã³ãããŒã«ïŒMVPã¯ã¢ãã«ãæã£ãŠããããã¬ãŒã³ã¿ãŒã¯ãªãã¶ãŒããŒåæã§ãã®ã¢ãã«ãæäœããç¶ããŠãã¥ãŒãæŽæ°ããããšã«ãªã£ãŠããããŠã£ãžã§ãããžã®çŽæ¥ã®ã¢ã¯ã»ã¹ã¯èš±ãããããããã¯ã¢ãã«ã䜿ãã€ãã§ã§ããã¹ãã§ãæåã®éžæã§ãã£ãŠã¯ãããªãã
- MVCïŒMVPã¯ãã¢ãã«ãæäœããããã«Supervising Controllerã䜿ãããŠã£ãžã§ããã¯ãSupervising Controllerã«ãŠãŒã¶ãŒã»ãžã§ã¹ãã£ãŒãæž¡ãããŠã£ãžã§ããã¯ãã¥ãŒãšã³ã³ãããŒã©ã«åããããŠããªãããã¬ãŒã³ã¿ãŒã¯ãã³ã³ãããŒã©ã®ããã ããã©ãããŠãŒã¶ãŒã»ãžã§ã¹ãã£ãŒã®æåã®åæ±ãããªããã®ãšããŠèããããšãã§ããããããããã¬ãŒã³ã¿ãŒãäžè¬çã«ããŠã£ãžã§ããã»ã¬ãã«ã§ã¯ãªããã©ãŒã ã»ã¬ãã«ã«ããç¹ã«æ³šæããããšãéèŠã§ããââããã¯ããããããã«å€§ããªéãã§ããã
- ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ïŒãã¥ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã»ã¢ãã«ã«ããããã«ããã¬ãŒã³ã¿ãŒã«ã€ãã³ããæž¡ãããããããã¥ãŒã¯ãã¡ã€ã³ã»ã¢ãã«ããçŽæ¥ããèªèº«ãæŽæ°ãããããããªãããã¬ãŒã³ã¿ãŒã¯Presentation Modelãšåãããã«ã¯åããªããããã«ããã¬ãŒã³ã¿ãŒã¯ãªãã¶ãŒããŒåæã«åããªããµããŸãã®ããã«èªç±ã«ãŠã£ãžã§ããã«çŽæ¥ã¢ã¯ã»ã¹ããŠããã
MVPã®ãã¬ãŒã³ã¿ãŒãšMVCã®ã³ã³ãããŒã©ã«ã¯æãããªé¡äŒŒç¹ãããããã¬ãŒã³ã¿ãŒã¯MVCã®ã³ã³ãããŒã©ã®ããã圢ã§ããã ãã®çµæãå€ãã®èšèšã¯MVPã¹ã¿ã€ã«ã«åŸãã ãããããã³ã³ãããŒã©ãããã¬ãŒã³ã¿ãŒã®å矩èªãšããŠäœ¿ãã ããã ãŠãŒã¶ãŒå ¥åãåãæ±ãããšã«ã€ããŠè©±ããŠãããšããã³ã³ãããŒã©ãäžè¬ã«äœ¿ãããšã«å¯Ÿããçã«ããªã£ãè°è«ãããã
å³12ïŒMVPã§å®æž¬å€ãæŽæ°ããã·ãŒã±ã³ã¹å³
ã¢ã€ã¹ã¯ãªãŒã ã»ã¢ãã¿ãŒïŒå³12ïŒã®MVPïŒSupervising ControllerïŒããŒãžã§ã³ãèŠãŠã¿ããã ããã¯å€ãããã©ãŒã ãšã³ã³ãããŒã«çãšåãããã«å§ããââ宿ž¬å€ã®ããã¹ããå€ãããšãã«ãã®ããã¹ãã»ãã£ãŒã«ãã¯ã€ãã³ããèµ·ããããã¬ãŒã³ã¿ãŒã¯ãã®ã€ãã³ããèããŠãã£ãŒã«ãã®æ°ããå€ãåŸãã ããã§ãã¬ãŒã³ã¿ãŒã¯æž¬å®å€ãã¡ã€ã³ã»ãªããžã§ã¯ããæŽæ°ããããããŠãçžéãã£ãŒã«ãã¯ãããç£èŠããŠããã®ããã¹ããæŽæ°ããã æåŸã®éšåã¯è²ãçžéãã£ãŒã«ãã«èšå®ããããšã§ããããããŠãããã¯ãã¬ãŒã³ã¿ãŒã«ãã£ãŠãããã ãã¬ãŒã³ã¿ãŒã¯æž¬å®å€ããè²ã®åé¡ãåŸãŠããããŠçžéãã£ãŒã«ãã®è²ãæŽæ°ããã
ããŠãMVPã®ãµãŠã³ããã€ãã§ããïŒ
- ãŠãŒã¶ãŒã»ãžã§ã¹ãã£ãŒã¯ãŠã£ãžã§ããã«ãã£ãŠSupervising Controllerã«æž¡ãããã
- ãã¬ãŒã³ã¿ãŒã¯ããã¡ã€ã³ã»ã¢ãã«ã®å€æŽã調æŽããã
- MVPã®ããŸããŸãªå€çš®ã¯ãã¥ãŒæŽæ°ã®æ±ããç°ãªãããããã¯ããªãã¶ãŒããŒåæã䜿ã£ãŠãã¬ãŒã³ã¿ãŒã«ãã¹ãŠã®æŽæ°ãå€ãã®çްããªäžéè ãšäžç·ã«ãããããšããã¯éã£ãŠããã
ããæ°å¹Žã¯ãèªå·±ãã¹ãã»ã³ãŒããæžãåŒ·ãæµè¡ããã£ãã æµè¡ã»ã³ã¹ã«ã€ããŠèãã¹ãã§ãªã人ã§ã¯ããã®ã ããããã¯ç§ãå®å šã«æ²¡é ããŠããåãã§ãããç§ã®ååã®å€ãã¯ãxUnitãã¬ãŒã ã¯ãŒã¯ãèªååãããååž°ãã¹ãããã¹ãé§åéçºãç¶ç¶ççµ±åãšãã£ãæµè¡èªã®å€§ãã¡ã³ã§ããã
人ã ãèªå·±ãã¹ãã»ã³ãŒãã«ã€ããŠè©±ããšãããŠãŒã¶ã»ã€ã³ã¿ãã§ãŒã¹ãåé¡ãšããŠããããé ãããããã å€ãã®äººã ããGUIã®ãã¹ãã¯å°é£ãšäžå¯èœã®éã«ãããšæããã ããã¯ãäž»ã«UIãå šäœçãªUIã®ç°å¢ã«ãã€ãçµåããŠããŠãã»ãããŠåã ã«ãã¹ãããã®ãé£ããããã§ããã
ãã®ãã¹ããå°é£ãªæ§è³ªã¯æã èªåŒµãããã ãã°ãã°ããŠã£ãžã§ãããã€ãã£ãŠãã¹ãã»ã³ãŒãã§æäœããããšã«ãã£ãŠãé©ãã»ã©é ããŸã§ãã©ãçãããšãã§ããã ãããããããäžå¯èœãªå ŽåããããéèŠãªã€ã³ã¿ã©ã¯ã·ã§ã³ãéããããã¹ã¬ããã®åé¡ããã£ããããã¹ããããŸãã«é ããŠåãããªãã£ããããã
ãã®çµæããã¹ããã«ãããªããžã§ã¯ãã®ãµããŸããæå°ã«ãããããªæ¹æ³ã§UIãèšèšããå®å®ããéåãã§ãŠããã Michael Feathersã¯ãThe Humble Dialog Boxã§ãã®ã¢ãããŒããå°æ°å³ããèŠçŽããã Gerard Meszarosã¯ãã®æŠå¿µã Humble Object ãšããæŠå¿µã«äžè¬åããââã©ããªãªããžã§ã¯ãã§ããã¹ãããã®ãé£ãããªãæå°ã®ãµããŸããããªããã°ãªããªãã ãã®ããã«ããŠãããããã¹ãã»ã¹ã€ãŒãã«å«ããããšãã§ããªãå Žåã§ããæ°ä»ãããªãã£ã倱æã®å±éºãæå°ã«ããã
Humble Dialog Boxè«æã§ã¯ãã¬ãŒã³ã¿ãŒãå©çšããŠããããå ã ã®MVPããéåžžã«æ·±ãããæ¹ã§å©çšããã ãã¬ãŒã³ã¿ãŒã¯ããŠãŒã¶ãŒã»ã€ãã³ãã«åå¿ããæ¹æ³ã決å®ããã ãã§ãªããUIãŠã£ãžã§ããèªäœã«ããããŒã¿ã®éå£ãåãæ±ããããã ãã®çµæããŠã£ãžã§ããã¯ãã¯ãã¢ãã«ãžã®å¯èŠæ§ãæã£ãŠããããå¿ èŠãšãããªã; ãããã¯Passive Viewã圢æãããã¬ãŒã³ã¿ãŒã«ãã£ãŠæãããã
ããã¯ãUIãæ§ãç®ã«ããå¯äžã®ããæ¹ã§ãªãã ããäžã€ã®ã¢ãããŒãã¯Presentation Modelã䜿ãããšã ãããããããšãŠã£ãžã§ããã«ããå°ããµããŸããå¿ èŠãšããããŠã£ãžã§ãããèªåèªèº«ãPresentation Modelã«å¯Ÿå¿ä»ããæ¹æ³ãç¥ãããšãã§ããã°è¶³ããã
äž¡æ¹ã®ã¢ãããŒãã®éµã¯ããã¬ãŒã³ã¿ãŒããã¹ãããããšã«ãã£ãŠããŸãã¯ããã¬ãŒã³ããŒã·ã§ã³ã»ã¢ãã«ããã¹ãããããšã«ãã£ãŠããã¹ããé£ãããŠã£ãžã§ããã«è§Šããå¿ èŠãªããUIã®å±éºæ§ã®å€§éšåããã¹ããããšããããšã§ããã
Presentation Modelã§ã¯ããªãããå®éã®æææ±ºå®ã®ãã¹ãŠãPresentation Modelã«æãããããšã§å®çŸãããã ãã¹ãŠã®ãŠãŒã¶ãŒã»ã€ãã³ããšè¡šç€ºããžãã¯ã¯Presentation Modelã«éãããããã®ããããŠã£ãžã§ãããããªããã°ãªããªãããšã¯èªåèªèº«ãPresentation Modelã®ããããã£ã«å¯Ÿå¿ä»ããããšã ãã§ããã ããããã°ãã©ããªãŠã£ãžã§ããã衚瀺ããããšãªãPresentation Modelã®å€§éšåã®ãµããŸãããã¹ãããããšãã§ããââå¯äžæ®ãå±éºã¯ãŠã£ãžã§ããã»ãããã³ã°ã«ããã ãããåçŽã§ãããªãã°ãããããã¹ãããªãããšã§çããŠããããšãã§ããã ãã®å Žåãç»é¢ã¯Passive Viewã¢ãããŒãã®æã»ã©æ§ãç®ã§ã¯ãªãããå·®ã¯å°ãªãã
Passive Viewã¯ãŠã£ãžã§ããããã£ããæ§ãç®ã§ã衚瀺ãã察å¿ä»ãããäžèŠã«ããã®ã§ãPassive Viewã¯Presentation Modelã«ããããããªå±éºããé€ãã ãããããã®ã³ã¹ãã¯ããã¹ããåãããŠããéãç»é¢ã®ãµããããTest Doubleãå¿ èŠãšãããšããããšã§ããââããã¯æ§ç¯ããå¿ èŠãããäœåã®æ©æ§ã§ããã
é¡äŒŒãããã¬ãŒããªãããSupervising Controllerã«ååšããã ãã¥ãŒã«åçŽãªãããã³ã°ããããããšã¯ãããããå±éºãæã¡èŸŒãããšã«ãªãããåçŽãªãããã³ã°ã宣èšçã«æå®ããããšãã§ããïŒPresentation Modelãšåæ§ã®ïŒå©ç¹ãããã ããã«è€éãªæŽæ°ãPresentation Modelã§æ±ºå®ãããŠå¯Ÿå¿ä»ããããäžæ¹ã§ãSupervising Controllerã¯è€éãªã±ãŒã¹ã«ãããŠã©ããªå¯Ÿå¿ä»ããå«ãŸãã«ãŠã£ãžã§ãããæäœããã®ã§ãSupervising Controllerã§ã¯Presentation Modelããããããã³ã°ãå°ããåŸåãããã ããã