Sunday, June 12, 2005

Tapestry Engine Service

เจ้าตัว tapestry engine service
เป็นตัวที่ผมหลบเลี่ยงไม่ยอมอ่านมานานมากแล้ว
ตอนนี้คงถึงเวลาที่จะทำความเข้าใจเสียที

เนื่องจาก Tapestry ใช้ servlet ตัวเดียว
ในการ handle incoming request ทั้งหมด
ดังนั้นต้องมีการ encode/decode URL ที่เกิดขึ้น
โดยจะต้องมีการ encode ในตอน render response
และมีการ decode ในตอนรับ request
เพื่อที่จะรู้ว่าจะต้องทำ operation อะไร
กับ component/page ไหน โดยมี
parameter อะไรบ้าง

เนื่องจาก request ที่เข้ามานั้นแบ่งออกเป็นหลายประเภท
เช่นเป็นพวก form submit, เป็นพวก link
หรือเป็นพวก event ที่เกิดจาก form element ต่างๆ
(เช่น onchange ของ listbox)
request แต่ละประเภทก็มีการทำ operation ที่ไม่เหมือนกัน
ดังนั้น tapestry จึงออกแบบให้มี object
ที่รับผิดชอบ request แต่ละประเภท
แยกจากกันไปเลย ซึ่งเราเรียกว่า service

โดย tapestry มี build in service
อยู่ 9 แบบ และยังเปิดโอกาสให้เรา
implement service เพิ่มเติมเข้าไปได้เองด้วย

ปัญหาที่ผู้ใช้ tapestry บ่นกันบ่อยๆก็คือ
ตัว url ที่ encode นั้นดูไม่เป็นธรรมชาติเลย
จึงเกิด patch ที่เรียกว่า friendly URL patch
เพื่อใช้สำหรับแก้ไขให้ tapestry gen url
ออกมาสวยงามขึ้น
ยกตัวอย่างเช่น กรณี page service
จากของเดิม
http://localhost/app?service=page/mylisting

ก็จะเปลี่ยนเป็น
http://localhost/path/mylisting.htm

ซึ่ง patch ที่ได้ก็พอกล้อมแกล้มได้ระดับหนึ่ง
แต่เนื่องจาก framework ที่มีลักษณะเป็น component model
ทำให้บาง request ยังคงมีความซับซ้อนเหมือนเดิม
ยกตัวอย่างเช่น direct service
ของเดิม
http://localhost/app?service=direct/1/mydetail/$DirectLink&sp=21

เปลี่ยนเป็น
http://localhost/path/mydetail.htm?service=direct&service=1&service=$DirectLink&sp=21

ซึ่งดูแล้ว ก็ไม่ได้แตกต่างกันเท่าไรเลย

Related link from Roti

No comments: