Skip to main content

Posts

Showing posts from January, 2009

[Flex] Cairngorm v.s. pureMVC

跟 Cairngorm and pureMVC 相處過一陣子之後,在這邊與大家分享一下使用它們在 Flex 中的開發經驗(也許有錯誤的理解,請多指正囉!)

Cairngorm :
喜歡的部份:
架在 Flex framework 上使用中央 Event (CairngormEventDispatcher )機制,UI 開發簡單 (因為容易理解...)
ModelLocator 採用 Flex 綁定機制,UI 顯示資料無煩惱由於上面兩項,所以使用 Module 開發專案不會很痛苦討厭的部份:
主要的東西都是 Singleton design pattern, 如果專案很大的話,又統一在一起開發,那個 ModelLocator 到後來應該會很奇怪...
綁太多細節在 UI component 內,如 UI component 一定要認識 ModelLocator 還可以直接操作或修改它...@@
Event 跟 Command 比多的...重點跟 pureMVC 的 command 比起來它的亂多了...專案越大越亂...
pureMVC:
喜歡的部份:
大家的職責切分的很乾淨...棒 (這個只能意會不能言傳啊...XD 快去研究它吧!)寫在 UI (MXML)內的程式開發起來比使用 Cairngorm 的乾淨好幾倍(因為邏輯層被切分到 Mediator 了)
Notification & Command 果然是好物...雖然一開始感覺很囉唆,但是跟它熟了之後發現真是好用...Proxy 比 ModelLocator 更加好用...因為不需要的 Proxy 要清掉也很容易...所以在資料的增減上,pureMVC 架構彈性比較高簡而言之就是乾淨乾淨乾淨~~~
討厭的部份:
它的架構比較像仙人一樣超脫於 Flex framework 之上,所以想要整合 Flex 的優點要花點腦袋想(結果這個也是優點...@@)
很多語法都是要繼承並 override 寫起來不夠爽...快,這點 Cairngorm 大量的使用 interface 就棒多了。
由於 Facade 的存在如果要使用 Module 與 MultiCore 版本來開發的話,還需要撰寫連接的元素,或者直接參考 pureMVC網站上的 Utility - AS3 / Pipes 來應用...不過我覺得加上 Pipes 的 UI comp…

[LEGO] How to make an "Unique Random Number" my Block

這篇是答應某人要公開分享的教學...這兩天終於湊出時間來寫...

Erin 分享的原則通常都秉持著 "給你魚吃,到不如教你釣魚" 的想法在寫,所以如果沒有附上原始檔也請不用詢問了呦...意思就是我已經提供很多可以讓你"開始學"釣魚的概念囉!

這是去年三月在台北舉辦的 Flex&AIR AUG 網聚上使用的 lotto-bot 中的取得唯一亂數號碼 myBlock,可以用在樂透遊戲或者是亂數只給出現一次的程式應用。它的邏輯很簡單,只是要改成 NXT-G 的 myBlock 花了些時間連連看...XD

開始製作之前請先注意看看你的 NXT-G 有沒有安裝過 Dynamic Block Update ,安裝完成後可以在下拉式功能表中找到 "Block Import and Export Wizard"。接下來請下載及 import Simple Array Block,在下載的時候請記得點一下畫面中的google AD 感謝 Simple Array 的作者 Steve Hassenplug 提供了很多很棒的NXT-G Blocks 給大家使用。

由於 NXT-G 的變數是全域變數,所以在組合 myBlock 要小心變數命名,取得唯一亂數號碼需要兩個 myBlock ,一個負責初始化相關參數,一個負責輸出唯一號碼:
initUniqueRandom myBlock:
var uniq_total:Number = total;
Simple Array Block : clear
Add a value(e.g. 100) to index 0 in Simple Array Block, coz we don't use index 0. If you need it to count from 0, just ignore this step.

如圖:


接下來就麻煩了...很長一串...

getUniqueRandom myBlock:
這段要用程式表示囉...不然寫的好累...冏...
var Logic 1 : Logic = false;
//Logic Switch
if(uniq_total == uniq_legth){
//Logic Switch Conditions : True
Logic 1 = t…

[Flex] pureMVC 練習筆記啪兔

由於 pureMVC Standard and MultiCore 兩個版本寫法幾乎沒啥差別,開發的專案都統一使用彈性比較大的 MultiCore 版本來實作。跟 pureMVC 相處了一陣子後,漸漸地對它也沒有什麼特別的不爽...快,所以 Cairngorm and pureMVC 的選擇,也就由 pureMVC 勝出了(當然是有惡勢力的...冏)。

以下的範例還是使用 pureMVC Standard 來實作喔!這個範例應該能更容易理解 Mediator, Command and Proxy 合作的模式。


1. 由 DataProxy 開始寫
這次的 DataProxy 負責的是將 input textfield 中的文字儲存起來也提供清除的方法。 DataProxy 並不認識任何 Mediator。
package com.mvc.model
{
import mx.collections.ArrayCollection;
import org.puremvc.as3.patterns.proxy.Proxy;

public class DataProxy extends Proxy
{
public static const NAME:String = 'dataProxy';
public static const DATA_UPDATED:String ="data_updated";
public static const SAVE_DATA:String = 'save_data';
public static const CLEAR_DATA:String = 'clear_data';
public function DataProxy()
{
super(NAME, new ArrayCollection);
}
public function save(obj:Object):void{
list.addItem(list.length+" : "+obj);
sendNotification( DATA_UPDATED, data );
}
public function clear():void{
setData(new…