Posts tagged Flex framework

An experienced with Cairngorm Framework

ไหนๆ ก็ไหนๆ วันนี้ได้กลับมาทำ prototype แรกของ Montana ผมก็วิ่งเข้าไปในเว็บ คิดว่า Cairngorm นี่แหละ จะเป็นแกนหลักในการพัฒนา เพราะ Montana นั้นออกแบบมาให้ทำงานกับ ระบบ enterprise เป็นหลัก หลังจากลงใช้ (เน้นว่าลงใช้นะครับ เพราะลองมาหลายหนแล้ว :) ) ทำมาเรื่อยๆ ก็พบเลยว่า มันเป็นอะไรที่มีทั้ง Good news และ Bad news เหมือนๆ กับที่ฝรั่งเขาเรียกกันว่า Pros กับ Cons หล่ะครับ เพราะจากการใช้เจ้า Cairngorm Framework มาหลายครั้งแล้ว ทำให้ผมจับใจความเน้นๆ ได้ว่า

Good news (for developer)

  • มีความเป็น design pattern สูง (ประกอบไปด้วย MVC, delegate, และ singleton)
  • การทำงานแบ่งแยกออกเป็นส่วนๆ อย่างชัดเจน ทำให้ง่ายต่อการแก้ไข

ฺBad news (for developer)

  • ฺBoiler plate code ต้มครับ หม้อใหญ่ด้วย เพราะถ้าใช้งานกันจริงๆ การที่จะเพิ่ม หนึ่ง function นี่ น้องๆ นิ้ว ต้องออกกำลังกายกันเยอะหน่อย (แต่ว่าความยากลำบากนี้จะหายไปใน Flash Builder 4 นะครับ โดยเขาเอาเข้าไปรวมกับตัว IDE เป็น code generator ให้เลย)
  • พอทำงานไปสักระยะ ถ้าไม่มีการประยุกต์เอาความรู้ของเราๆ เรื่อง Design pattern เข้าไปร่วมด้วยนี่ จะทำให้เกิดชุมชน class แออัดครับ โดยแนะนำให้ประยุกต์เข้ากับขนาดของ application เราดีกว่า ที่จะตามเขาหมด ไม่งั้น class ใน project จะยุ่บยั่บไปหมด

นั่นแหละครับ ความรู้สึกลึกๆ นี้ บอกผมว่า Cairngorm เหมือนกุหลาบ อุดมด้วยหนามแหลม หยิบดีๆ ก็หอมชื่นใจ แต่ปักไว้นานๆ ไม่ดูแลคอยแต่งดีๆ ละก็ อึ๋ยยยย

What lie beneath “useWeakReference”


I just read the most surprise secret of addEventListener workflow, wrote by Ted. He explained the process if we have use the default value of ‘useWeakReference’ ( fault by default ). The garbage collector will not remove its in almost situation. This result can be raise more unexpected performance for our application.

In the other hand, if we set this argument with ‘true’ value, the garbage collector will found its, then remove it as fast as it’s possible (this will not break common rule of object-oriented programming language)

You can read more about Ted’s exposing here.

ความจริงที่น่าตกใจก็คือ เมื่อใดก็ตามที่พวกเรา ได้ทำการ addEventListener แล้วไม่ได้ set ค่าอะไรให้กับ argument ที่ชื่อ useWeakReference (ซึ่งค่า default ของมันคือ false) นั่นหมายความว่า instance ของ object ที่เรานำมา subscribe หรือในอีกทางหนึ่ง เรียกว่า การนำ functionของ instance นั้นมา เป็น listener นั่นเอง ดังตัวอย่างด้านล่าง

   1:  this.addEventListener( Event.EventName, foo.fooFunction );

อย่างนี้ล่ะครับที่จะมีการ garbage collect ใดๆ ทั้งสิ้น แต่ถ้าหากเราเปลี่ยนเป็น

   1:  this.addEventListener( Event.EventName, foo.fooFunction , true );


อย่างนี้ล่ะครับนาย garbage collector จะเฝ้ามอง reference ของ foo จากมุมมืด มีโอกาสเมื่อไหร่จัดการทันที