äžéšã®ååã¯ã Mateãå®éã«äœ¿çšããããšã®è©³çŽ°ãšãã¥ã¢ã³ã¹ãåžžã«èŠã€ããããšåªåããŠããããã®ç¹ã§ãå®éã®ã¢ããªã±ãŒã·ã§ã³ã®ã¢ãã«ã«åºã¥ããå žåçãªã¢ãŒããã¯ãã£ãœãªã¥ãŒã·ã§ã³ã®äŸã説æããããšã«ããŸããã ãã¬ãŒã ã¯ãŒã¯ãµã€ãã®äŸã«äŒŒãŠããŸããããã¹ãŠã®ã¬ãã«ã§ç¹å®ã®æšå¥šäºé ã段éçã«æãããŠããŸãã
ããã§ãå ¥æå¯èœãªãœãŒã¹ã䜿çšããŠã Google Codeã§ãããžã§ã¯ãã® æ©äŒ ïŒããã°ãéåžžã«ææïŒãæºåããŸããã ãŸãã ãªã³ã©ã€ã³ã§æ€èšããŠãã ããïŒ
åãšã³ãã£ãã£ãåå¥ã®ãã©ãŒã ã§ç·šéããæ°ãããšã³ãã£ãã£ãè¿œå ããæ©èœãæã€ãšã³ãã£ãã£ã®ãªã¹ãããããŸã-ããã¯ç°¡åãªããšã§ã¯ãããŸããã 次ã®ãœãªã¥ãŒã·ã§ã³ã¯ããã®ãããªäŸã§ã¯ãã€ãäžåçã«è€éã«æããŸãããã¢ã¯ã·ã§ã³ã¹ã¯ãªããã®25è¡ã§äŸãæžãã®ã§ã¯ãªãã Mateã«æ £ãããšããã¿ã¹ã¯ã«çŽé¢ããããšã¯å¿ããããŸããã
ç§ã¯ããããããã¢ãã«ãšã€ã³ãžã§ã¯ã·ã§ã³ã«ããåæ¹åéä¿¡ãã¹ããŒã ã䜿çšããŠããŸãããã¬ãŒã ã¯ãŒã¯ã®Webãµã€ãã«ã¯ããã®ææ³ãä»ã®ææ³ã®åªããå³ããããŸãã
äŸã®ã¯ã©ã¹ã«åºã¥ããŠããã€ã¢ã°ã©ã ã®åèŠçŽ ãèããŠã¿ãŸãããã ãµãŒããŒãžã®ã¢ã¯ã»ã¹ã«ã¯ã ServiceBaseããç¶æ¿ããOpportunitiesMockServiceã®ç¹å¥ãªã¯ã©ã¹ã䜿çšããããã æ¡é 3ãé€å€ããŸãã
ã¢ãã«
3ã€ã®ã¢ãã«ã¯ã©ã¹ãå®çŸ©ããŸããã OpportunityVOãªã¹ãã¢ã€ãã ã®æãåºæ¬çãªãã¥ãŒåºæã®ã¯ã©ã¹ã 2çªç®ã®ã¯ã©ã¹OpportunitiesDataProviderã¯OpportunityVOã®ã€ã³ã¹ã¿ã³ã¹ã®ãªã¹ãã§ããããµãŒããŒã¡ãœããã®åŒã³åºããã«ãã»ã«åãã䟿å®äžArrayCollectionããç¶æ¿ããŸãã ããã«ãããFlexãã¬ãŒã ã¯ãŒã¯ã®ã»ãšãã©ã®ãªã¹ãã³ã³ããŒãã³ãã®ããŒã¿ãããã€ããŒãšããŠäœ¿çšã§ããŸãã
3çªç®ã¯OpportunityDataProviderã§ããªã¹ãããç¹å®ã®ç·šéå¯èœãªOpportunityVOãšé£æºããããã«èšèšãããŠããŸãã ãããªãã¯ããããã£ã®æ©äŒãš ããããæäœããã¡ãœããããããŸãã ãã®ã¯ã©ã¹ã¯ãDataProviderEventã¿ã€ãã®æ©äŒäœæã€ãã³ããšæ©äŒä¿åã€ãã³ãããã£ã¹ãããããŸãããããã®ã€ãã³ãã¯ãæ©äŒåŠçã®å®äºãéç¥ããŸãïŒãããã®ã¢ã¯ã·ã§ã³ã¯ãµãŒããŒã¡ãœããã®åŒã³åºãã«é¢é£ä»ããããããšãå€ããããã¯ã©ã¹ã¡ãœããåŒã³åºãã¹ããªãŒã ã§åæçã«å®è¡ãããããšã¯æåŸ ã§ããŸããïŒã ã¯ã©ã¹ã®å®è£ ã¯éåžžã«åçŽã§ãããå®éã«ã¯ããã¬ãŒã³ããŒã·ã§ã³ã®ããžãã¯ã«é¢ä¿ã®ãªããèŠçŽ ã®ãã¹ãŠã®å€æãåæåãããã³ãã®ä»ã®ããã·ãŒãžã£ããã®äžã«é 眮ããå¿ èŠããããéåžžã«ç°¡åã«åé¢ã§ããŸãã
ãŸãããã¥ãŒã«çŸåšè¡šç€ºãããŠãããã©ãŒã ã«é¢ããæ å ±ãæ ŒçŽããããã«äœ¿çšãããè£å©ã¯ã©ã¹OpportunityViewStateããããŸãã Mateã®ã³ãã¥ãã±ãŒã·ã§ã³ã®ãã¥ã¢ã³ã¹ã解決ããããã«ããã®ãããªã¯ã©ã¹ãäœæããå¿ èŠããããŸãã次ã«ããããã詳现ã«èª¬æããŸãã
衚瀺ãã
ãã¬ãŒã³ããŒã·ã§ã³çšã«3ã€ã®ã¯ã©ã¹ãå®çŸ©ãããŠããŸããæåã®ã¯ã©ã¹ã¯ãã¢ã€ãã ã®ãªã¹ãã衚瀺ããOpportunitiesListViewã§ãã 1ã€ã®ãããªãã¯ããããã£dataProviderããã ãOpportunityEventã¿ã€ãã®2ã€ã®createOpportunity ã€ãã³ããšeditOpportunityã€ãã³ããéåºããŸã ã
OpportunityEditViewã®2çªç®ã®ã¯ã©ã¹ã¯ãOpportunityVOç·šéãªããžã§ã¯ããçŽæ¥å²ãåœãŠãå¿ èŠãããæ©äŒããããã£ã«ãã£ãŠå®çŸ©ãããããã«OpportunityEventã¿ã€ãã®ä»ã®2ã€ã®ã€ãã³ãsaveOpportunityããã³closeOpportunityããã£ã¹ãããããŸãã
3çªç®- ã€ã³ããã¯ã¹ã¯ãåã®ãã®ã®æ§æã§ãã selectedIndexããããã£ã䜿çšã§ããçŸåšã®è¡šç€ºãã©ãŒã ã決å®ããŸãã
ãããç§ãã¡ã®èŠè§£ã§ãã ã芧ã®ãšããããã®ã¯ã©ã¹ã¯æšæºã®Flexãã¬ãŒã ã¯ãŒã¯ã³ã³ãããŒããç¶æ¿ãããã¢ãã«ããŒã¿ãããã€ããŒã«äŸåãããååçã§ãåå©çšã®ããã®ããªãèªçµŠèªè¶³ã®ã³ã³ããŒãã³ãã®ããã«èŠããŸãããããå¿ èŠãªãã®ã§ãã
åèŽã€ãã³ãããã
ã¢ãã«ãšãã¥ãŒããªã³ã¯ããMateã®åœ¹å²ã«çŽæ¥ç§»åããŸãããã ãã®ãã¬ãŒã ã¯ãŒã¯ã®ãã¹ãŠã®å®£èšã¯ããããããã€ãã³ãããããã§èª¬æãããŠããŸã ã ãããã¯ããã€ã³ããŒãšFlex Builderã®ãã®ä»ãã¹ãŠã®äŸ¿å©ãããµããŒãããMXMLãã¡ã€ã«ã§ãã ãããžã§ã¯ããæ¡å€§ããã«ã€ããŠããããã®ã«ãŒãã¯éåžžã«å€§ããæ¡å€§ããŠãããããããŸããŸãªã³ãã¥ãã±ãŒã·ã§ã³ã°ã«ãŒãã«å¯ŸããŠåå¥ã®ãã¡ã€ã«ãååŸããŸãã ãã®äŸã«ã¯4ã€ãããŸãã
ãããã®1ã€ã§ããDataInjectionMapã¯ããã¥ãŒãšã¢ãã«ã®éã®é¢ä¿ãèšè¿°ããã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«äžåºŠã ãå®è¡ãããŸãã ããã¯IoCïŒå¶åŸ¡ã®å転ïŒãã¿ãŒã³ã®éšåçãªå®è£ ã§ãããéåžžãšã¯ç°ãªãæ¹æ³ã§åäœããŸãïŒå¿ èŠã«å¿ããŠãã¢ãã«ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã®ã¿ãäœæãããã¥ãŒã®äœææã«èŠªã¢ããªã±ãŒã·ã§ã³ã®ã€ãã³ãããªãã¹ã³ãã説æããããã€ã³ãã£ã³ã°ãå®è¡ããŸãã Injectorsããã³PropertyInjectorã¿ã°ã䜿çšããå žåçãªè¡šèšæ³ïŒ
<Injectors target="{OpportunitiesListView}"> <PropertyInjector targetKey="dataProvider" source="{OpportunitiesDataProvider}" /> </Injectors>
ããã§ã¯ãããŒã¿ãDataGridã«æ ŒçŽãããdataProviderããããã£ã䜿çšããŠãOpportunitiesListViewãšOpportunitiesDataProviderã®éã®ãã€ã³ãã£ã³ã°ããŒã¹ã®é¢ä¿ãå®çŸ©ããŸãã
æ®ãïŒ OpportunitiesEventMap ã DataProviderEventMap ã NavigationEventMapã¯ããã¥ãŒã¯ã©ã¹ãšã¢ãã«ã¯ã©ã¹ã®äž¡æ¹ãããã¥ãŒã®ã¡ã€ãïŒã€ãã³ããã¹ïŒãã£ãŒã«ãã§ã€ãã³ããçºçãããšãã«çºçããã¢ã¯ã·ã§ã³ãçŽæ¥èšè¿°ããŸãã ããšãã°ãEventHandlersãMethodInvokerãããã³EventAnnouncerã¿ã°ã䜿çšããè¡šèšæ³ïŒ
<EventHandlers type="{OpportunityEvent.EDIT_OPPORTUNITY}"> <MethodInvoker generator="{OpportunityDataProvider}" method="editOpportunity" arguments="{[event.data]}"/> <EventAnnouncer type="{NavigationEvent.NAVIGATE_EDIT_VIEW}" generator="{NavigationEvent}"/> </EventHandlers>
ãã®åŒã¯æ¬¡ã®ããã«ãªããŸãïŒãã¥ãŒãeditOpportunityã€ãã³ããéåºããç¬éïŒå®éã«ã¯ãç·šéãã¿ã³ãæŒãïŒãOpportunityDataProviderã¢ãã«ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯ãã€ãã³ãããã¢ã¯ã»ã¹å¯èœãªOpportunityVOã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã®ç·šéæäœãéå§ããå¿ èŠããããŸãã
ãŸããç¹å¥ãªNavigationEventã€ãã³ããéä¿¡ããããã®çµæããã¥ãŒã¯ç·šéã¢ãŒãã«åãæ¿ãããŸãã OpportunityDataProviderã¯ã©ã¹å ã§ããµãŒããŒã¡ãœãããåŒã³åºããŠãèŠçŽ ã®æåŸã®ç¶æ ã§OpportunityVOã€ã³ã¹ã¿ã³ã¹ãååŸããå¿ èŠããããŸãïŒãã ãããã®äŸã§ã¯ãã¹ããŒã ãåçŽåããã¢ãã«ã®æ©äŒããããã£ã«ã¢ãã«ãä¿åããŸããïŒã ããã«ãæ©äŒããããã£ã«ãã£ãŠOpportunityEditViewãšOpportunityDataProviderã®éã®DataInjectionMapã§æ³šå ¥ãæå®ãããããç·šéãããã¢ã€ãã ã¯ãã¥ãŒã§äœ¿çšã§ããŸãã
äžèšã®ã¿ã°ã®ãžã§ãã¬ãŒã¿ãŒãŸãã¯ãœãŒã¹ããããã£ã§ã¯ããã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ã¯ãªããã¢ãã«ã¯ã©ã¹ã瀺ããŸãã Mateã¯é©åãªã¿ã€ãã³ã°ã§ã€ã³ã¹ã¿ã³ã¹ãèªåçã«äœæããããã©ã«ãã§ã¯1åã ãäœæããŸãã ãã¬ãŒã ã¯ãŒã¯ã«ã¯ãããããçš®é¡ã®ã¢ãã«ã€ã³ã¹ã¿ã³ã¹ãŸãã¯ã€ãã³ãçšã®å éšãã£ãã·ã¥ããããåå©çšã®ããã«å¿ èŠãªãªããžã§ã¯ããæ€çŽ¢ããŸãã ãã®ã¹ããŒã ã¯ã·ã³ã°ã«ãã³ãã¿ãŒã³ã«äŒŒãŠããŸããã ãlonersãã䜿çšãããšãã«é¿ããããªãã·ã¹ãã ãšã³ãã£ãã£éã«äžå¿ èŠãªãã€ã³ãããªããããã¯ããã«å®çšçã§ãïŒã¡ãªã¿ã«ã CairngormãPureMVCãªã©ã®ä»ã®ãã¬ãŒã ã¯ãŒã¯ã«ã¯ããªã匷ãæ¬ ç¹ããããŸã ïŒã
æåŸã«ãNavigationEventã€ãã³ããžã®å¿çã説æããNavigationEventMapãããã®è©³çŽ°ãæ€èšããŸãã äžè¬ã«ããã¥ãŒã¢ãŒãã®åãæ¿ãã¯ããã®äžã«çŽæ¥å®è£ ã§ããŸãã ããããå®è·µã瀺ããŠããããã«ã倧èŠæš¡ãªãããžã§ã¯ãã§ã¯ããã¬ãŒã³ããŒã·ã§ã³ã®å€éšå¶åŸ¡ã®ã¢ãããŒããèŠèŠçã«ç°¡åã«å¶åŸ¡ã§ããŸãã ããšãã°ã ãã£ãŒããªã³ã¯ ïŒãã©ãŠã¶ã®ã¢ãã¬ã¹ããŒã®å€æŽã®ãµããŒãïŒãæå¹ã«ããå¿ èŠãããå Žåã Mateãããã§æ¢è£œã®ã¢ã¯ã·ã§ã³ãªã¹ãã䜿çšããBrowserNavigationEventã€ãã³ãã®å¥ã®ã¿ã€ããå°å ¥ããŸãã è¡šèšæ³ã¯æ¬¡ã®ãšããã§ãã
<EventHandlers type="{NavigationEvent.NAVIGATE_EDIT_VIEW}"> <MethodInvoker generator="{OpportunityViewState}" method="setSelectedIndex" arguments="{[1]}" /> </EventHandlers>
navigateEditViewã€ãã³ããMateã«ããããããšãOpportunityViewStateã¢ãã«ã®è£å©ã¯ã©ã¹ã®ã¡ãœããïŒãããã·ïŒãåŒã³åºãããŸãã ãããã®ç®çã®ããã«ãã®ã¯ã©ã¹ãå°å ¥ããããããŸããããIndexãã¥ãŒã¯ã©ã¹ã§çŽæ¥selectedIndexã«å€ãå²ãåœãŠãŸãããMethodInvokerã¿ã°ã®ãžã§ãã¬ãŒã¿ãŒããããã£ã§ããžã¥ã¢ã«ã³ã³ããŒãã³ãã®ã¯ã©ã¹ãæå®ããããšã¯ã§ããŸããïŒä»ã®ãã¹ãŠã®ã¿ã°ãšåæ§ïŒãã¬ãŒã ã¯ãŒã¯ã¯èª°ã«ãã¢ã¯ã»ã¹ã§ããªãã€ã³ã¹ã¿ã³ã¹ãäœæãããããééã£ãŠããŸãïŒã äžçªäžã®è¡ã¯ãäžã§æžããããã«ã Mateã¯ããžã¥ã¢ã«ã³ã³ããŒãã³ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããïŒMXMLã¯è©Šè¡ããŸããïŒãã¢ããªã±ãŒã·ã§ã³å šäœã®ã€ãã³ãããªãã¹ã³ããã³ã³ããŒãã³ãã Flash Playerã®è¡šç€ºãªã¹ãã«å ¥ããšããã¬ãŒã ã¯ãŒã¯ãããããšé£æºãå§ããŸãã ãïŒå€ãã®å ŽåãïŒ ã€ã³ãžã§ã¯ã·ã§ã³ ïŒäŸåé¢ä¿ã決å®ããããïŒã ãã¬ãŒã ã¯ãŒã¯èªäœã«ãã£ãŠäœæããããã¹ãŠã®ã¯ã©ã¹ã®å éšãã£ãã·ã¥ãšãFlash Playerã管çãã亀差ããªãã³ã³ããŒãã³ãã®åå¥ã®ãªã¹ããããããšãããããŸãã
以äžã§ãã å©çšå¯èœãªãã¹ãŠã®ãã¬ãŒã ã¯ãŒã¯ã¿ã°ã«é¢ããæ å ±ã¯ã Mate Webãµã€ãã®ããã¥ã¡ã³ãã«èšèŒãããŠããŸã ã 説æãããŸãã«ãæ··ä¹±ããªãããã«ããããšæããŸãã ãããã¯ã«é¢ããé¢é£ãããã¹ãŠã®è³ªåã«åçãããŠããã ããŸãã
PSãšããã§ã å æ¥ ã MateããŒãžã§ã³0.8.7ã®æŽæ°ããããŸããããã®ããŒãžã§ã³ã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹éã®æ¥ç¶ïŒ ã€ã³ãžã§ã¯ã·ã§ã³ ïŒãèšå®ã§ããããã«ãªããŸããã