1、ButtonMediator中發送消息時,仍然采用寫死的方式,将消息内容寫死在代碼中:
這顯然不是一個好的設計,不夠靈活
2、我們一直在說puremvc是一個mvc架構,至今為止 controller(即Command)、view(即Mediator)都已經出現過了,但是model層還是不見蹤影,puremvc中的model層在哪裡?
在asp.net mvc中,model層通常是定義資料實體的部分,可以選用的技術有很多,比如linq to sql,linq to entity ,nhibernate之類,這個概念在puremvc中仍然是相通的,隻不過換了個名字,我們稱之為Proxy!
先來定義一個AppProxy類吧(放到mvc.model包中),代碼如下:
這裡,我們用xml做為資料源來提供資料,data.xml放到根目錄下,内容如下:
ok,這一步做好後,老問題又來了:如何讓它跟puremvc環境中的facade執行個體挂上勾?類似上一篇的處理,還是放到AppCommand中來處理
注意加注釋的部分facade.registerProxy(new AppProxy());這樣就ok了,這一步執行後,puremvc環境中就已經有data.xml的資料了
現在就可以把原來ButtonMediator中寫死的部分去掉了,改成下面這樣:
即:view層隻發送消息(類型),通知puvrmvc環境--“CHANGE_TEXT消息我已經發出去了!”,至于資料在哪,誰去處理,關我P事!
OK,有人發了消息,自動就要有人處理,接下來折騰ChangeTextCommand.as
這裡,我們把原來的方法注釋掉了,改成用Proxy的getData擷取剛才data.xml中的資料,然後該資料指派為TextMediator相關聯的文本框.
至此,M(proxy)-V(mediator)-C(command)全都登場了,互相之間也實作了完全解耦!
最後再從頭回顧一下主要的處理細節:
1、man.mxml中通過 AppFacade.getInstance().startup(this) 啟動puvemvc環境
2、而AppFacade又通過this.registerCommand(START_UP, AppCommand) 注冊AppCommand
3、AppCommand中又通過
把mediator、proxy以及消息CHANGE_TEXT相關的ChangeTextCommand給扯進來
4、然後ButtonMediator中又通過sendNotification(AppFacade.CHANGE_TEXT)來發送自己感興趣的消息
5、最後CHANGE_TEXT消息被與之關聯的ChangeTextCommand得到,并在execute方法中處理以更新UI界面。