วันอังคารที่ 1 กุมภาพันธ์ พ.ศ. 2554

POJO ต่างจาก JavaBeans อย่างไร?

POJO ตามชื่อของมัน ก็คือ Java object ธรรมดา .. ที่ไม่ได้ extend class หรือ implement interface พิเศษเฉพาะของ container หรือ framework (อย่างพวก EJB หรือ Servlet class ไม่นับเป็น POJO)
แต่ ไม่ได้หมายความว่า ห้าม implement หรือ extend อะไรเลย ... class ที่ implement พวก interface พื้นฐานของ Java ก็น่าจะยังนับว่าเป็น POJO ได้ครับ (เช่น data model classs อาจจะ implement java.io.Serializable หรือ java.lang.Comparable)
ผมคิดว่า ประเด็นของ POJO อยู่ที่ dependency ครับ (ไม่มี dependency กับ container/framework specific class/interface) ... ส่วนเรื่องความซับซ้อนของตัว class ไม่น่าจะเป็นประเด็นครับ

JavaBeans ผมมองว่ามันมี 2 ระดับครับ ระดับแรก คือในระดับ pattern ... class ที่จะเป็นไปตาม pattern นี้จะต้องมี getter/setter method สำหรับแต่ละ property ของตัวมันเอง .. เท่านั้นเอง (ซึ่งก็เป็นแค่ pattern ของชื่อ method ที่เป็น accessor/mutator)
ส่วนอีกระดับคือเป็น component specification ... class ที่เขียน(และ packaging) เป็นไปตาม specification นี้ จะเป็น JavaBeans component ซึ่งสามารถนำไปใช้ได้ใน container ซึ่ง support JavaBeans ... ตัวอย่างที่ชัดเจน คือ พวก GUI tool ซึ่งสามารถ drag drop UI component ได้ ... ตัว UI component เหล่านั้นก็คือ JavaBeans ซึ่งถูก manage โดยตัว container (ตัว tool นั่นแหละ) ... โดยตัว JavaBeans component ก็จะมีคุณสมบัติ ต่างจาก object ธรรมดาหลายๆ อย่าง เช่น property สามารถ persistence ได้ .. สามารถ handle event ได้ .. สามารถแสดง property ของตัวเองได้ (ส่วนใหญ่เป็นคุณสมบัติของ UI component เพราะตอนแรก JavaBeans ถูกออกแบบมาเพื่อหน้าที่หลักทางนี้)
ซึ่งตัว JavaBeans component จะต้องถูก implement ตามสิ่งที่ specification กำหนด จึงจะทำงานใน container ได้

Credit : คุณ Topgun แห่ง narisa.com