Servlet+JSP and MVC : Model-View-Controller

พูดถึงการเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming หรือ OOP) ก็คงต้องรู้จักสถาปัตยกรรมของ MVC (Model-View-Controller Architecture) ด้วย เพราะว่าการเขียนโปรแกรมเชิงวัตถุ จะเหมาะกับการพัฒนาโปรแกรมที่มีขนาดค่อนข้างใหญ่ที่ประกอบไปด้วยส่วนต่างๆ มากมาย โดยแต่ละส่วนจะมีการจัดสรรให้อยู่ในสถาปัตยกรรม MVC 

ในบทความนี้ผมก็จะอธิบายถึง MVC ในการทำงานของ Java Servlet และ JSP (Java Servlet คืออะไร?) ซึ่งเป็นการพัฒนาเว็บรูปแบบหนึ่ง ที่ดูจะมีความเป็นเชิงวัตถุมากกว่า PHP อยู่มาก จากที่เคยมีประสบการณ์มาทั้ง 2 ภาษา ถึงแม้ว่า PHP จะสามารถเขียนได้ง่ายกว่าก็จริงอยู่ หรืออาจจะพยายามเขียนให้เป็น OOP ก็เถอะ ยังไม่ด้านนี้ก็เทียบ Java ไม่ได้แน่นอน ^^

จริงๆ แล้วข้อมูลเรื่อง MVC สามารถหาได้จาก Google ไม่ยาก แต่เพื่อให้เห็นภาพมากขึ้น เพื่อให้นักพัฒนา Java Servlet มือใหม่สามารถทำงานได้อย่างมีประสิทธิภาพมากขึ้น ก็เลยเขียนขึ้นมาใหม่ เผื่อจะอ่านแล้วเข้าใจกว่าครับ (รึเปล่า ฮ่าๆ)




จากรูปนะครับ การทำงานของ client-server ทั่วไปก็คือ client ส่ง request เข้า server จากนั้น server ก็จะส่ง response กลับไปให้ client ครับ นึกถึงเราเล่นเว็บปกตินั่นแหละครับ ช่วงที่เราทำอะไรซักอย่างแล้วรอมันโหลด นั่นแหละครับ คือการส่ง request และรอ response แต่เบื้องหลังการทำงานนั้นมันมีอะไรอยู่เยอะพอสมควรครับ ขอไล่ลำดับตามภาพเลยนะครับ

1. ในกรณีที่หน้าเว็บของเราถูกแสดงอยู่แล้วบน Web Browser เมื่อมีการทำ event ต่างๆ ลงบนหน้าเว็บ เช่น ให้กรอก Username และ Password แล้ว submit เมื่อเราคลิก submit ก็จะมีการส่ง request ไปยัง Servlet พร้อมด้วยค่าที่เรา submit มา

2. เมื่อ Servlet ได้รับค่ามาแล้ว สมมุติให้มีการตรวจสอบกับ Database ว่าจะอนุญาติให้เข้าสู่ระบบได้หรือไม่ เราต้อง query จาก Database เพื่อตรวจสอบข้อมูล เพื่อความปลอดภัยจึงควรมี middleware ระหว่าง Database กับตัว Servlet ด้วย 

3. middleware ระหว่าง Java Servlet กับ Database จะเป็น Java Object ตัวหนึ่งที่จะคอยแลกเปลี่ยนข้อมูลไปมาเท่านั้น ไม่จำเป็นจะต้องตรวจสอบความถูกต้องใดๆ

4. Java Beans ตรงนี้จะทำหน้าที่เป็น Model เหมือน Java Object คือรับค่ามาแล้วส่งออกไป เท่าที่ผมเคยเห็นมา ส่วนมากก็จะเป็น set(), get() อะไรพวกนี้ คือ Model จะไม่ยุ่งกับ Function ใน View หรือ Controller เลย

5. ในส่วนนี้ Java Beans จะ set ค่าพร้อมใช้งานมาให้เรียบร้อยแล้ว หน้าที่ที่เหลือสำหรับส่วนนี้ก็คือ get ค่ามาแสดงผลในรูปแบบที่ต้องการ เช่น แสดงหน้าเว็บ Welcome สำหรับการเข้าสู่ระบบสำเร็จ หรือเรียกหน้าเดิมเมื่อไม่สำเร็จ แน่นอนว่า JSP ซึ่งเป็นภาษา HTML + Java ดังนั้น ก็สามารถแทรก Javascript หรือ CSS ร่วมในการแสดงผลได้เช่นเดียวกัน จากนั้นผลลัพธ์ก็จะถูกส่งเป็น response กลับไปที่ Web Browser ของผู้ใช้งาน และก็จะกลับเข้าสู่ข้อที่ 1 ใหม่อีกครั้งครับ 

สรุปแล้ว
M (Model) จะเป็นเสมือน Middleware ระหว่าง View กับ Controller ครับ ถึงแม้ว่าทั้ง 2 ส่วนนี้จะติดต่อกันโดยตรงก็ได้ แต่เพื่อคง concept OOP และสถาปัตยกรรมแบบ MVC ไว้ ก็ควรจะแยกครับ
V (View) เป็นส่วนแสดงผลครับ โชว์หน้าตาอย่างเดียว คำนวณให้น้อยที่สุดเท่าที่จะทำได้ครับ
C (Controller) เป็นส่วนการทำงานหลักของโปรแกรมเลยก็ว่าได้ครับ เปรียบเสมือน processor ของคอมเรานั่นแหละครับ

การดัดแปลง MVC ที่ต่างไปจากนี้ก็มีเยอะครับ อาจมีการใช้ framework อื่นๆเข้ามาอีก หรือบางส่วนก็ถูกเปลี่ยนไป แต่ยังไงก็ตาม ก็ยังคง concept OOP ไว้ครับ เพราะภาษา Java ถูกสร้างมาเพื่อสิ่งนี้ 



ข้อมูลนี้เป็นการเขียนโดยประสบการณ์ตรง อาจมีพิมพ์ผิดบ้าง ขออภัยด้วย หากมีคำแนะนำโพสไว้ได้นะครับ ^^
แหล่งข้อมูลเพิ่มเติม :
http://www.narisa.com/forums/index.php?showtopic=1036

Facebook Comment

Popular post of 7 days

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ