Context
ในการพัฒนา software ที่เกี่ยวข้องกับการแสดงผลของข้อมูล ไม่ว่าจะเป็น window base / web base / mobile base (อันนี้เรียกเอง) ปัญหาที่พบมากคือส่วนแสดงผลผู้ใช้ (User Interface) มักไม่อยู่นิ่ง ยิ่งเป็นพวกทำ personalize หรือ multilingual ด้วยแล้ว หากไม่ได้มีการออกแบบให้รองรับแต่แรก มันจะเป็นอะไรที่น่าปวดหัวมากProblem
ปัญหาก็คือจะทำยังไงให้แต่ละส่วนมันแยกกัน (decoupling) เพื่อที่หากมีการเปลี่ยนแปลงในส่วนหนึ่งส่วนใด มันจะได้ง่ายแก่การแก้ไขและกระทบส่วนอื่นให้น้อยที่สุดForces
หากดูจาก Java Blue Print (http://www.oracle.com/technetwork/java/mvc-detailed-136062.html) มันจะอลังการมาก คือมีการพูดถึง software ที่ค่อนข้างจะใหญ่ มีความต้องการนำเอาข้อมูลไปแสดงผลหลายแบบ มีทั้ง HTML, WML, JSF, Swing, Web Services etc. แต่ถ้ามาดูใน software ที่ขนาดเล็กลงมาหน่อย สิ่งที่ผลักดันให้เกิดการแก้ปัญหาดังกล่าวมาจาก
- ส่วนแสดงผลผู้ใช้ (User Interface) มักจะมีการเปลี่ยนแปลงบ่อยกว่าส่วนประมวลผล (Business Logic) หากมันรวมอยู่ด้วยกัน เมื่อมีการแก้ไขส่วนแสดงผลผู้ใช้อาจเกิดข้อผิดพลาดที่ไม่ได้ตั้งใจขึ้นกับส่วนประมวลผลได้
- ส่วนแสดงผลผู้ใช้มีรูปแบบหลากหลาย แต่มาจากข้อมูลเดียวกัน
- ส่วนแสดงผลผู้ใช้และส่วนประมวลผลมักจะต้องใช้ developer ที่มี skill แตกต่างกัน จึงดีกว่าหากสามารถแยกทั้งสองส่วนมาพัฒนาโดย developer ที่ชำนาญด้านนั้น
Solutions
MVC (Model-View-Controller) จึงเป็นทางเลือกหนึ่งในการออกแบบ software โดยไม่ได้จำกัดที่ภาษาใดหรือ platform ใด ใน java ก็สามารถเอา MVC ไปใช้ได้ทั้ง JEE และ JSE (http://www.oracle.com/technetwork/articles/javase/index-142890.html) เพียงแต่ใน JEE มีการทำ application framework ที่ implement ตาม MVC มาให้เรียกใช้ แต่ใน JSE ต้อง implement เอง (อาจไม่ update เนื่องจากไม่ได้ติดตามในส่วน thick client มานานแล้ว ที่เคยทำมาก็สมัย swing - -") ก่อนจะงงว่าบ่นอะไร มาดูความหมายของแต่ละส่วนใน MVCModel - เป็นส่วนเก็บข้อมูลที่จะต้องนำมาแสดงผลและข้อมูลที่รับมาจากผู้ใช้ รวมถึงการประมวลผลข้อมูล (business logic) ทั้งนี้ขึ้นกับความซับซ้อนของ software อาจเป็น single tier, two tier, three tier หรือ multi tier ก็ได้
View - เป็นส่วนที่นำ Model มาแสดงผล (display) ให้กับผู้ใช้
Controller - เป็นส่วนสร้าง Model และควบคุม Model และ View ให้ทำงานร่วมกัน ตาม user input
No comments:
Post a Comment