Tuesday 24 July 2007

ตอนที่ 1 Struts และ MVC


Struts คืออะไร?
Struts Framework คือการ implement model-view-controller MVC design pattern สำหรับ enterprise application ด้วย java (java ee) struts เป็นส่วนหนึ่งของ Apache Jakarta project และเป็น open source ดังนั้นคุณจึงสามารถ download library struts มาใช้งานได้ฟรีๆ Struts Framework เป็นเหมือนชุดการพัฒนา web application ซึ่งเหมาะกับหลายๆขนาด

ก่อนอื่นเราต้องเข้าใจก่อนว่า Model-View-Controlller คืออะไร?
Model-View-Controller เป็นสถาปัตยกรรมที่แบ่งส่วนต่างๆของการพัฒนา application ออกเป็น 3 ส่วนซึ่งประกอบด้วย
Model component, View component และ Controller component ซึ่งในแต่ละ component สามารถพัมนา application โดยไม่ขึ้นกับ componentใด component หนึ่ง หมายความว่า เมื่อมีการเปลี่ยนแปลง component ใด component หนึ่ง จะไม่กระทบกับ component อื่นๆ

Model ทำหน้าที่
1. รับผิดชอบการจัดการนำข้อมูลขึ้นมาจาก Database และเก็บข้อมูลไว้
2. รับผิดชอบในส่วนของ business logic ก็อยู่ใน Model เช่น การเข้าถึงข้อมูล, การยืนยันความถูกต้องของข้อมูล และ logic การเก็บข้อมูล เป็นต้น หรือบาง framework อาจจะมีในส่วนของ Business Service ด้วยอันนี้ขึ้นอยู่กับมุมมองครับ

View ทำหน้าที่แสดงผล Graphic User Interface GUI เพื่อให้ user สามารถโต้ตอบกับ application ที่เราพัฒนาขึ้นมาได้ และทำหน้าที่รับ input จาก user view ที่พูดถึงถ้าอิงกับการพัฒนา web application ก็อาจเป็นได้ทั้ง HTML, JSP

Controller เป็นตัวสื่อกลางที่ทำงานประสานกันระหว่าง Model และ View Controller ทำหน้าที่ส่ง request ที่ได้จาก Client แล้วดูว่า request นี้จะส่งไปให้ Model ตัวใด และเมื่อได้ผลลัพธ์จาก Model แล้วก็จะดูต่อว่า response ที่ได้จะส่งไปให้ View ตัวใดแสดงผล ถ้าดูตาม Struts Framework ส่วน Controller ก็คือส่วนของ ActionServlet, Action, ActionForm และ struts-config.xml

ดังที่กล่าวมาแล้วทั้งหมดจะมีหลักการทำงานคร่าวๆดังนี้คือ เมื่อ client มีการส่ง request ไปหา server request นั้นจะถูกส่งไปที่ controller จากนั้น controller จะเป็นตัวดูว่า request ทีได้นั้นจะไปเรียก model ตัวใดให้ทำงาน แล้วเมื่อ model ทำงานเสร็จจะส่ง response กลับมาที่ controller และ controller จะเป็นตัวควบคุมอีกทีว่า response นี้จะให้ view ตัวไหนแสดงผลลัพธ์ออกมาพร้อมกับข้อมุลที่ได้มาจากชั้นของ model

ถามว่าทำไมต้องออกแบบ application ตาม MVC ด้วยละ?
ตอบ ผมขอยกตัวอย่างง่าย เนื่องจากว่าการทำ enterprise application นั้นจะมีความซับซ้อนมาก สมมุติหากเราไม่ใช้ MVC เกิดเราต้องการแก้ไข view ซักหนึ่งตัวมันก็จะมีผลกระทบกับส่วนอื่นๆตามมาเช่นการดึงข้อมูล, validation data เป็นต้น แต่ถ้าเราออกแบบ application ตามแบบของ MVC การแก้ไข view แต่ละครั้งจะไม่มีผลกระทบกับส่วนอื่นๆเลย

ที่ผมพูดถึงมันหมายถึงการพัฒนา application ขนาดใหญ่ทั้งนั้น แต่ถ้าเราพัฒนา application ขนาดเล็กๆอาจจะไม่จำเป็นตัวออกแบบตามแบบของ
MVC ก็ได้ อันนี้ขึ้นอยู่กับปัจจัยอื่นๆด้วย

ทำไมต้อง Struts ด้วย?
ตอบ ผมมองว่ามันมีความยุ่งยากน้อยและเข้าใจง่าย แล้วถ้าเข้าใจ concept แล้วยังเป็นพื้นฐานกับการเข้าใจ framework ตัวอื่นๆอีกด้วยเช่น JSF ซึ่งบทความเกี่ยวกับ JSF จะมีการ update อยู่ตลอดอยู่แล้ว ถึงแม้ว่าในปัจจุบันการใช้งาน Struts Framework เริ่มที่จะหมดความนิยมแต่ถ้าเทียบกับการ learning curve ที่เข้าใจง่ายและเป็นพื้นให้กับ framework ตัวอื่นๆได้ด้วยก็นับว่าน่าสนใจที่จะเรียนรู้กับมัน

เพื่อความเข้าใจที่ลึกซึ้งขอให้อ่าน reference เพิ่มเติมเรื่อง MVC ที่ sun เขียนไว้ : http://java.sun.com/blueprints/patterns/MVC-detailed.html

ที่พูดมาทั้งหมดยังไม่ค่อยเข้าเรื่อง struts framework เลยงั้นเดี๋ยวผมจะขอต่อในตอนหน้าครับ

ปล. แอบหนีงานมาเขียน blog ~.~

บทความที่เกี่ยวข้อง

6 comments:

Anonymous said...

วันก่อนเจอรุ่นพี่ว่าโม้ให้ฟังว่ากำลังใช้ strut2
strut1 ยังไม่ทันแตกฉาน, strut2 ก็ออกมาเสียแล้ว

Anonymous said...

น่าสนใจๆ ผมขอถามความเห็นหน่อยนะครับ

ถ้าผมเลือกใช้ทำ Web Application หรือ Web Service ถ้าให้เลือก Java กะ PHP อันไหนเขียนง่ายกว่ากันครับ ?? (แบบใช้ Framework ก็ได้นะครับ โดยส่วนตัวมาสาย Opensource เลยอยากได้คำแนะนำจากพี่ๆหน่อยครับ) ขอแบบที่ต่อยอดได้ง่ายๆอะครับ... (ผมชอบการเขียนแบบ Java นะแต่เดียวนี้ PHP มันก็ OO ได้แล้วเลย ลังเลใจ)

Unknown said...

จิงๆผมว่า php เขียนง่ายกว่านะ แต่ว่าพอจะกลับมาจัดการ หรือแก้ปัญหาอะไรบางอย่างรู้สึกว่ายุ่งยากเพราะ view กับ model อยู่ที่เดียวกันเลย แต่ว่าตอนนี้ php ก็มี framework เหมือนกันนะ เช่น Cakephp หรือเข้าไปที่นี้ก้ได้เห็นมีจัดลำดับไว้อยู่ http://www.mustap.com/phpzone_post_73_top-10-php-mvc-frameworks
ส่วนจะจับภาษาไหนก็ขึ้นอยู่กับว่าเราชอบภาษาไหนด้วยส่วนหนึ่ง แล้วก็ดูแนวโน้มว่าภาษาไหนน่าจะรุ่งกว่า ตอนนี้เห็น php ชักแผ่วๆลงไป

Anonymous said...

เข้ามา ทำให้มีความรู้ขึ้นอีกเป็นกอง ยังไงก็ขอบคุณที่เอาความรู้ดีๆมาแชร์กัน

Anonymous said...

ตอนนี้กำลังทำProjectจบใช้ strutsทำอยู่ เข้ามาอ่านแล้วได้รู้อะไรๆมากขึ้น ขอบคุณมากสำหรับข้อมูล(สู้เว้ย ไม่งั้นไม่จบ 555)

Anonymous said...

ได้ความรู้ เยอะจริงๆครับ

ขอบคุณมากน่ะครับ ที่เขียนบทความดีๆแบบนี้ ให้พวกเราได้อ่านกัน

เป็นกำลังใจให้ครับ