2008/12/3

Cairngform vs. Puremvc

Cairngorm

Cairngorm是Adobe官方提供的一個MVC Framework,要瞭解它,可以直接閱讀Adobe Developer Center裡面,收錄的Develop Flex RIAs with Cairngorm microarchitecture六篇文章,在閱讀時,要配合第一篇文章提供的範例程式Cairngorm Store對照來看,會比較清楚,我是使用Cairngorm Store (non J2EE Container version)。只要讀者有J2EE Patterns的基礎,就能夠瞭解Cairngorm,因為Cairngorm的設計沿襲了部份的J2EE Patterns,再加上它自己的一些設計。

雖然我看過J2EE Patterns,但是閱讀這六篇文章還是花了不少力氣,原因在於RIA介面的複雜性。在Web-Based的J2EE裡面,網頁的元件跟後端程式的互動,都是靠Front Controller來處理,所以後端只要用一個Servlet就可以作為前端發送到後端命令與參數的入口(可再配合Command來將互動的指令分類處理),單一的入口簡化了前後端的互動,資料傳送到前端後,整個畫面都是重新產生的,資料流很單純地只有一條路徑。

到了Flex就不一樣了,因為都是產畫面上的元件後,再將資料餵進去的,所以一個地方的元件資料異動,可能會同時影響到其他地方的資料(像是AJAX的網頁也有類似的問題),所以在後端傳送資料回去到前端時,元件互動的處理就非常麻煩了,所以Flex才有了Bindable這種東西。

Cairngorm已經存在了兩年了,又是官方的產品,很多專案都是使用這個framework,但它的複雜,也讓開發人員誤認為,flex actionscript是很難以親近的一種語言,雖然Cairngorm身為MVC框架的正規軍,部份設計理念也來自於J2EE,但它也繼承了J2EE複雜。

Puremvc

另一個MVC Framework: Puremvc,它定位自己為一個純粹地,與語言無關的輕量級MVC Framework,很多人都推崇這樣一個設計單純的框架,但是在官方網站上能找到的文件,除了一個看起來像天書的Best Practice,一個Conceptual Diagram與一個UML設計圖,就沒有了,找不到很簡單的tutorial或是step by step的說明。

在瀏覽過文件跟一些blog的說明後,我發現,我得用另一種更有效率的方法來瞭解Puremvc,就是從PureMVC Standard for AS3的Demos,直接從程式碼來了解應該怎麼使用它。

在trace過AppSkeleton、CafeTownsend、Slacker、EmployeeAdmin、StartupAsOrdered之後,我才算是比較瞭解Puremvc了,例如:(1) 畫面切割後,以ViewStack來切換 (2) 畫面上的動作,先產生flash.event.Event之後,在初始化Mediator的時候addEventListener,處理完該動作後,就sendNotification (3) 每一個ViewComponent都對應了一個Mediator專責處理 (4) ApplicationFacade裡面要 initializeController,並在裡面registercommand,StartupCommand裡面要 registerProxy 與 registerMediator (5) Notification sender有 Command、Mediator、Proxy,receiver有 Command與Mediator

除了標準版外,還有Multicore版本,差別在於,Multicore的Facade裡面有一個HashMap,所以必須要以key為參數,取得Facade,也就是return instanceMap[key] as ApplicationFacade。目前並不是非常瞭解Multicore版本要用在哪裡,但網站裡提供了Pipes、Startup Manager與State Machine這幾個Utilities,Startup Manager是用來處理動態載入資源的過程,透過它可以取得載入的狀態與進度,Pipes看起來像是處理模組之間的訊息,但實際上的用途,我還沒看懂。

Cairngorm vs. Puremvc

Why I think you shouldn't use Cairngorm提出了五點說明,希望大家審慎評估要不要使用Cairngorm。我在看過之後,真的是覺得Cairngorm非常的複雜,但是已經存在了兩年了,又是官方的產品,如果要進入這個世界,對整個team來說,負擔很大,並不是每一個人都能讀懂J2EE Patterns之後,再讀懂Cairngorm。

結果當然是採用Puremvc,跟Cairngorm比較起來,package跟class都變少了,只要有按照固定的邏輯撰寫程式,程式變得比較容易讀了。一個簡潔的框架,才能適當地幫助Programmer減輕負擔,而不是一個龐大的框架,成堆的專有名詞,讓人沒辦法很快地進入狀況。

用了一陣子之後,發現了2個問題,第一個是我們發現很少用到Command,大都是Facade、Mediator、Proxy跟Notification就可以把整個AP做完,至於Command到底應該用在哪裡比較恰當,這個我還在思考中。另外還有個問題是,Constants並沒有固定的位置,範例大都是寫在ApplicationFacade裡面,但似乎切割獨立成一個單獨的class會比較恰當,或者應該把Naming convention的規則記錄下來,這樣對於專案來說或許會比較健康一些。


thoughts about Cairngorm (again…)

想飛 by 游錢桂

這是幼稚園懇親座談會送給家長的書,書本的內容部份篇幅,以實例告訴大家,錯誤的教育方法造成的後果,描述最多的,是分數主義及過大的壓力,造就一個無法生產回饋社會的人,或者影響一個人,養成一些特殊的生活習慣,甚至是輕生自殺。另外一部分,則是作者自己跟孩子的相處經驗。教育該作到的,是幫助每一個孩子,找到他最適當的位置,在社會中佔有一席之地,因為每一個人脫離家庭與學校教育後,最終都得要進入社會,20多年的教育,換來的是一個人在社會上立足50年的時間。

該用什麼方式對待孩子?

回想自己的小時候,到現在一直無法忘記的,就是媽媽要我們去國語日報補習作文,這件事,我還記得當時一直說不想去,因為自己覺得一點用處都沒有,但是媽媽聽從朋友的建議,覺得補習並沒有什麼壞處,我得自己搭公車到台北,寫篇作文然後回家。後來發生了一些事,她才沒讓我繼續補習下去。

其實後來上了大學後,也常常跟媽媽提起這件事,總是告訴她不應該一直要我去補習,應該讓我們多閱讀才對。但現在我已經不會這樣想了,其實媽媽也是聽了別人的建議,希望自己的孩子能夠多學點東西,到時候聯考的作文會好一些。只唸到國中的媽媽,如果真的那麼瞭解讀書,那麼她應該不會隨便地聽從朋友的意見,她的出發點是善意的,只是她不知道該用什麼方法。

現在已經當爸爸了,雖然我盡力地買繪本,唸書給他聽,陪他玩遊戲,但是有時候也常常想知道,唸書的時候一直問東問西的,問他懂不懂,他會不會覺得我很煩。到底該用什麼樣的方式對待他,才是最好的?如果沒有稍微地施加一點壓力,讓他聽故事的時候能專心一些,他能不能聽得懂故事的內容?對待孩子,教育孩子的時候,該用什麼樣的態度才是最恰當的,老實說,我根本不敢肯定。

該處罰嗎?

在他3~4歲的時候,他會因為說謊,或吃飯吃得太慢(超過一個小時),或作了一些我們反覆告訴他不該做的事,而被要求面牆罰站,雖然現在6歲了,我們已經不再用這樣的方式處罰他了,但是他卻養成了一個習慣,常常會問我們,他可不可以怎麼樣,能不能做什麼,雖然這樣子做,多少保護了他不會受傷,但相反地,他卻失去了「犯規」的權利,創造的能力。

因此現在我就修改成,當他問我的時候,反過來告訴他,請你自己決定該不該做,請你自己決定要怎麼辦,當然不是每一次都這樣處理,而是我認為他能夠自己判斷的事情才這樣做。

有時候會覺得,就算是同一種教育方法,也會教出不一樣的人,人是一種複雜的動物,同樣的一種方式,卻可能得到完全不一樣的結果。那麼我不應該那麼在意,到底要用什麼樣的教育方法,應該要用什麼方式對待他呢?我想這就跟媽媽那時候的心情一樣,希望孩子能夠得到一些幫助,但又不曉得什麼樣的方式比較恰當。

生活上的確有很多時候,會有發生意外的潛在可能,例如在沙發上跳來跳去,在家裡亂衝,吃到好吃的東西一直吃,看電視的坐姿不佳,也有一些屬於品格的養成,例如打破東西、打翻水卻不承認,在孩子剛懂事那時候,如果沒有用比較激烈的方式,讓他瞭解這些是錯誤的,那麼是不是放任他可以犯錯?該用什麼樣的處罰才是恰當的,老實說,我不知道。

有些時候,我會問他,你覺得沒有作到的話,應該要怎麼辦,要他自己想個處罰的方式,這樣的作法或許比直接叫他罰站要好得多。

該怎麼教?

買書、念故事書給孩子聽,這是我的工作。中文的故事書,他應該都能瞭解,但是英文的就不一定了,幾天前拿出一本4歲時唸過的A Kiss For Litter Bear,我才發現,故事書裡面的動詞時態,他根本完全都搞不清楚,為甚麼run是跑步,ran也是跑步,come in是進來,came in也是。

語言教學,是個難題,不管是英語或是台語,因為平常比較少用,對小朋友來說,學習這樣的語言要怎麼轉化到日常生活上?但就算有那樣的環境,也不一定能保證有用,例如阿公阿媽都是講台語的,但是小朋友也是跟他們講國語,因為他們可以聽得懂國語。

有人說先把母語學好比學第二或第三外國語重要,也有人說,3~6歲是語言發展的黃金時期,要好好把握這個時間,究竟哪一種方式比較好,我沒有答案。現在只有唯一一種作法,就是孩子能接受的方式就做,他想聽故事我就講,不想聽我也不強求,其他的就靠他自己,聽天由命了。

要怎麼認識孩子?

興趣跟天份對於一個人來說,是非常重要的,認識自己更是關鍵,一個人要能夠認識自己的長處,才能知道怎麼發揮自己的優勢。但是我問我自己,我認識自己嗎?其實沒有,在還沒有嘗試過之前,誰知道自己有沒有興趣,有沒有能力做好。

既然我自己都不認識了,我要怎麼認識孩子呢?這個問題我也沒有解答,現在除了幼稚園的課程以外,另外還讓他上了一堂一個小時的畫畫課,我們也沒有期待他會有興趣,或有什麼成就,就單純要讓他去玩而已。

尊重

他常常會大聲講話,動作太大揮到我們,這時候,我們通常說請他尊重我們,要說對不起,或是坐好不要亂動。結果現在有時我們不小心撞到他,他也會跟我們說,「請你說對不起!」我們也該謹守尊重的原則,以同等的方式對待他。希望未來能夠在這樣的原則下,繼續相處下去。