云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          這一段時(shí)間在 Cairngorm上搭建了一個(gè)小項(xiàng)目, 順便小結(jié)一下開發(fā)過程:
          1. 首先規(guī)劃構(gòu)建View, 將一個(gè)應(yīng)用的界面, 分成適當(dāng)?shù)腗xml Component
          2. view中必然涉及的需要數(shù)據(jù)的綁定, 將組件需要的數(shù)據(jù)都集中到ModelLocator中.
          3. 設(shè)計(jì)事件(CairngormEvent), 也就是與用戶交互的過程中以及系統(tǒng)運(yùn)轉(zhuǎn)的過程中會(huì)需要派發(fā)哪些事件,
          需要注意的一點(diǎn)是, Cairngorm中Flex事件也需要轉(zhuǎn)化成CairngormEvent
          4. 設(shè)計(jì)事件的處理函數(shù), 也就是命令. 在FrontControl中對(duì)事件和命令進(jìn)行注冊(cè).
          5. 命令中通過代理去調(diào)用服務(wù).
          5. 設(shè)計(jì)代理類, 在代理類中調(diào)用服務(wù)
          5. 設(shè)計(jì)命令中涉及的服務(wù)(最可能的是與數(shù)據(jù)庫的交互), 并添加相應(yīng)的配置
          6. 設(shè)計(jì)服務(wù)中需要使用的ValueObject
          7. 命令中如果需要對(duì)視圖組件數(shù)據(jù)進(jìn)行存取, 需要通過ViewHelper來完成, 設(shè)計(jì)相應(yīng)的ViewHelper.
          同時(shí)在mxml中對(duì)viewHelper進(jìn)行注冊(cè).

          補(bǔ)充說明: 事件的產(chǎn)生不一定全部是與用戶交互的結(jié)果, 也就是說不全是由View產(chǎn)生的.
          當(dāng)然大部分的事件(比如用戶點(diǎn)擊了保存按鈕)是這樣產(chǎn)生的.
          在命令中也可以產(chǎn)生命令, 典型的就是SequenceCommand, 應(yīng)用中可以把一個(gè)事件的處理分成幾個(gè)步驟來完成,
          完成第1個(gè)步驟后怎么通知第2個(gè)步驟開始呢, 當(dāng)然還是繼續(xù)派發(fā)事件啦. 在SequenceCommand在類中,
          把派發(fā)事件封裝了一下, 給出了一個(gè)executeNextCommand()可以直接調(diào)用.
          不過在這里我也遇到了一個(gè)問題, 直接使用SequenceCommand的executeNextCommand()并不管用.
          好象dispatchEvent并沒有效果, 我后來是自己修改了代碼, 使用Application.application.dispatchEvent才解決問題的.

          Cairngorm的優(yōu)點(diǎn):
          一. 實(shí)現(xiàn)了比較徹底的解耦
          1. 事件機(jī)制, 對(duì)用戶的響應(yīng)(比如點(diǎn)擊保存按鈕), 并不是直接從View中抓取數(shù)據(jù), 然后New一個(gè)類, 調(diào)用這個(gè)類的某個(gè)方法,
          將數(shù)據(jù)保存到數(shù)據(jù)庫中, 而只是簡單地派發(fā)一個(gè)事件, 具體事件由誰來響應(yīng), 如何處理對(duì)他來說是透明不可見的.
          2. Locator模式, Cairngorm中service, view, model的獲取都是通過Locator的,
          也就是說系統(tǒng)其他部分對(duì)于service, view, model只需要知道其ID就夠了, 其內(nèi)部實(shí)現(xiàn)等待細(xì)節(jié)都是不需要知道的.
          舉個(gè)例子, 傳統(tǒng)的方法: 你要找一個(gè)叫張三的人幫你干一件事, 你需要知道張三長什么樣,
          然后在一個(gè)坐著10個(gè)人的大辦公室里找到他, 告訴他你的要求.
          而現(xiàn)在在這個(gè)大辦公室的門口多了一個(gè)前臺(tái)小姐, 你只需要告訴這個(gè)小姐,我要找張三, 然后她會(huì)幫你去找,
          你根本不需要知道張三的模樣.

          RIA的優(yōu)點(diǎn): 由于Flex的原因, 系統(tǒng)處理是異步的.
          比如, 你請(qǐng)求了一個(gè)比較耗時(shí)的數(shù)據(jù)庫讀取操作, 請(qǐng)求發(fā)出后, 你就可以進(jìn)行其他操作了, 服務(wù)結(jié)束會(huì)產(chǎn)生相應(yīng)事件,
          然后由Command進(jìn)行后續(xù)處理, 最后引發(fā)頁面數(shù)據(jù)更新.



          主站蜘蛛池模板: 新宾| 定日县| 崇义县| 昌图县| 安仁县| 天台县| 锡林郭勒盟| 丹寨县| 昔阳县| 昌乐县| 汝城县| 巩义市| 浠水县| 卫辉市| 庆安县| 界首市| 樟树市| 抚松县| 舞钢市| 南宫市| 温宿县| 屏山县| 铜山县| 曲松县| 宝丰县| 东乡族自治县| 正镶白旗| 民和| 安宁市| 淄博市| 西宁市| 长汀县| 岑巩县| 福海县| 阳曲县| 运城市| 扎兰屯市| 苍山县| 江门市| 新兴县| 腾冲县|