Skip to content


MVC Design Pattern (MVC ไม่ได้ย่อจากการ์ตูน Mavel Comic นะเฟ้ย)

MVC ที่ผมจะพูดถึงนี้ ย่อมาจาก Model-View-Controller ครับ เป็นรูปแบบการออกแบบระบบ โดยหลักการคือ จะแบ่งระบบที่เราออกแบบเป็น 3 ส่วนประกอบหลัก ๆ คือ Model, View และ Controller โดยที่แต่ละส่วนจะมีความสำคัญดังนี้

  1. Model  จะหมายถึง Object ที่แทนข้อมูล หรือกิจกรรมต่าง ๆ ในระบบ เช่น ตารางใน database หรือจะเป็นโพรเซสงานหนึ่ง ๆ ก็ได้ครับ เราจะไม่นับข้อมูลดิบในระบบเป็น Model เพราะข้อมูลเหล่านั้นจะถูกครอบ (Encapsulated) ด้วย Model นั่นเองครับ ถ้าใครเคยเรียน Object Oriented มาน่าจะพอเข้าใจได้ดีนะครับ
  2. View จะหมายถึงการแสดงผลข้อมูลต่าง ๆ ที่ได้รับมาจาก Model ครับ ไม่ว่าจะอยู่ในรูปแบบของรูปภาพกราฟิคต่าง ๆ หรือข้อความก็ตาม นอกจากนี้เรายังสามารถแสดงผลที่ได้รับจาก Model หนึ่ง ๆ ได้หลายรูปแบบอีกด้วย
  3. Controller จะหมายถึง กิจกรรม การกระทำ หรือการตอบสนองต่อเหตุการณ์ต่าง ๆ ที่เกิดขึ้น โดยอาจจะมีผลทำให้ข้อมูลใน Model เปลี่ยนสถานะไปได้ครับ
MVC diagram

MVC diagram

รูปภาพด้านบนจะแสดงให้เห็นถึงความสัมพันธ์ระหว่าง Model, View และ Controller ในรูปแบบ Diagram (ขอบคุณภาพจาก http://www.tonymarston.net/php-mysql/model-view-controller.html ด้วยครับ)

ข้อดีของการออกแบบระบบด้วย MVC Pattern

  • การออกแบบที่ชัดเจน เมื่อเรากำหนดให้ Model อยู่ในรูปแบบของ Object ในระบบ ส่งผลให้เราสามารถมองภาพระบบโดยรวมได้ชัดเจนมากขึ้นว่า Model ใด สัมพันธ์กับ Model ใดในลักษณะใด รวมไปถึงคำสั่งต่าง ๆ ใน Object ที่เราสามารถเรียกใช้งานได้ จะทำให้เรามองเห็นภาพของพฤติกรรมของ Model นั้น ๆ อีกด้วย
  • การปรับปรุง/แก้ไขได้โดยง่าย เมื่อเราออกแบบตาม MVC Pattern ทำให้เราสามารถปรับปรุง แก้ไขส่วนใด ๆ ได้อย่างง่ายดายโดยที่ไม่กระทบกับส่วนที่เหลือ เนื่องจากทั้ง 3 ส่วนต่างอิสระต่อกัน เพียงเรากำหนด Interface ของแต่ละส่วนให้ชัดเจน และทำการพัฒนา แก้ไข หรือปรับปรุงภายใต้ Interface ที่กำหนดเท่านั้น
  • View ที่หลากหลาย หลังจากที่เราแยก View กับ Model ออกจากกัน ทำให้เราสามารถออกแบบ View ได้หลายรูปแบบ เปรียบเทียบได้กับ Model หนึ่งที่คอย Generate XML Data รายงานดัชนีหุ้น และมี View ที่นำข้อมูล XML ไปใช้สร้างเป็นกราฟ หรือตารางนั้นเอง
  • Maintain ระบบได้ง่าย เพราะเราได้ออกแบบระบบที่มีโครงสร้างชัดเจน ทำให้ยืดหยุ่นต่อการเพิ่มเติม รวมไปถึงการนำส่วนใด ๆ กลับมาใช้ซ้ำได้อีกด้วย (Reusability)

แล้วข้อเสียล่ะ?

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

นอกจากนี้แล้ว

นอกจากนี้แล้ว ทางฝั่งภาษา PHP เองก็มี Framework ที่สนับสนุนการพัฒนาระบบที่มีพื้นฐาน MVC design pattern อยู่หลายตัวครับ ผมขออนุญาตลอกมาจาก Wiki ให้ดูกัน (http://en.wikipedia.org/wiki/Model-view-controller#PHP)

  • Akelos PHP Framework – a Ruby on Rails port to PHP4/5.
  • CakePHP – webapplication framework modeled after the concepts of Ruby on Rails.
  • CodeIgniter – A PHP MVC framework.
  • FUSE – A powerful but easy-to-use PHP 5 Framework for MVC development modeled after the concepts of Ruby on Rails.
  • Jelix (web framework)
  • Jaws – is a Framework and Content Management System for building dynamic web sites.
  • Joomla v1.5.x – is an open source Content Management System that employs the MVC model for its extensions, called components and modules.
  • Kohana – is an open source MVC oriented framework, originally forked from CodeIgniter.
  • LISA MVC – is an open source object oriented web application framework.
  • Odin Assemble – Small footprint PHP based MVC Framework.
  • Orinoco Framework – is a full-stack yet lightweight framework written in PHP5. It implements the Model 2 design paradigm.
  • PHPonTrax – A PHP 5 MVC framework modeled after Ruby on Rails.
  • phpXCore – A MVC design pattern based PHP content management framework compatible with PHP4 and PHP5.
  • Prado – A PHP 5 MVC framework modeled after ASP.NET web forms.
  • Qcodo – is an open-source PHP 5 web application framework
  • SilverStripe – contains a fully fledged PHP 5.2 ORM/MVC Framework focused on building websites. Much like Ruby on Rails.
  • Solar
  • Switch board (framework) – with Routing PHP 5 MVC Framework with Routing.
  • Symfony Framework- PHP 5 MVC Framework modeled after the concepts of Ruby on Rails.
  • Zend Framework – A PHP 5-based MVC framework modeled after the concepts of Ruby on Rails.
  • ZNF – PHP5 MVC framework for enterprise web applications
  • Zoop – Framework A Mature PHP 4/5 MVC framework.
  • PureMVC – Framework for PHP

เอกสารอ้างอิง 

Share

Posted in MVC, Object Oriented, PHP, Software Engineering, Uncategorized.

Tagged with , , , , .


13 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Nop says

    สวัสดีครับ
    ผมอยากเรียนถามว่า ตัวไหนที่นิยมใช้กันมากครับ
    แล้วตัวไหนดี.. ไม่ดีอย่างไร.. ขอคำชี้แนะด้วยครับ

  2. chonla says

    ก็ที่เห็นมีคนใช้กันเยอะ ๆ ก็ CakePHP ครับ แล้วก็มีทีมที่ทำงานอีกทีมเค้าใช้ CodeIgniter ครับ แต่เท่าที่รู้ CakePHP ก็ได้รับความนิยมไม่น้อยครับ

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

  3. toi says

    jQuery ต่างจาก Scriptaculous (http://script.aculo.us/) ยังไงเหรอครับ
    แล้วการใช้งานนี่ต่างกันป่าว
    ผมเคยใช้ Scriptaculous มาบ้างนิดหน่อย แต่ไม่เคยใช้ jQuery น่ะครับ

  4. chonla says

    ผมเข้าใจว่า Scriptaculous จะเป็นเรื่องการทำ effect ในขณะที่ jQuery จะครอบคลุมทุกส่วน คือ เรื่องของ control flow ซึ่งเป็น basic ในการเขียนโปรแกรม และ Ajax รวมถึง Effect ต่าง ๆ ด้วยครับ

  5. peak says

    prototype อีกตัวที่น่าใช้เหมือนกัน

  6. chonla says

    เดิมทีผมก็ใช้ prototype ครับ มีความสามารถที่ค่อนข้างจำกัดครับ พอได้รู้จักกับ jQuery ก็หลงเข้าหัวปักหัวปำครับ เหตุผลที่ผมชอบ jQuery ลองดูในบทความนี้ครับ jQuery พาชีวีเบิกบาน

  7. Pakin says

    ตอนนี้ ผมกำลังศึกษา PHP MVC Framework อยู่ 3 ตัว เพื่อที่จะนำมา apply ใช้ กับระบบของบริษัท :
    1. CodeIgniter
    2. Zend Framework
    3. Symfony Framwork

    ผมอยากถามผู้รู้ / คนที่เคยนำ Framework ทั้ง 3 ไปใช้ ว่า
    1. แต่ละ Framework ต่างกันยังไง
    2. ข้อดี-ข้อเสีย ของแต่ละ Framework
    3. แต่ละ Framework เหมาะที่นำไป implement กับ ระบบงานลักษณะใด

    ขอบคุณมากคับ

  8. chonla says

    ส่วนตัวแล้ว ผมยังไม่เคยลองทั้ง 3 frameworks ที่เคยลองก็เห็นจะมีแต่ CakePHP ครับ

    ส่วนตัวผมมองว่า ปัจจัยในการเลือก Framework ที่จะนำมาใช้งานนั้น learning curve ต้องไม่มากเกินไป รวมถึง usergroup ที่ใหญ่เพียงพอ

    สองปัจจัยนี้ สำคัญสำหรับการพัฒนาระบบในระยะยาว

    ผมขอโทษด้วยที่ผมไม่สามารถให้คำตอบทั้ง 3 ข้อที่คุณถามมาได้เลยครับ แต่ผมเข้าใจว่า MVC Framework ทุกค่าย ตั้งเป้าหมายในการใช้งานไม่แตกต่างกัน

    ข้อสังเกตของ Symfony และ Zend คือ พัฒนามาจากแนวคิดของ ROR (Ruby on Rails)

    ทางที่ดีลองเข้าไปดู Demo หรือ Tutorial ของแต่ละ Framework ที่คุณสนใจ และลองดู usergroup ที่จะเป็นผู้ช่วยคุณในยามคับขันได้ว่ามีมากเพียงพอต่อความต้องการหรือเปล่า น่าจะเป็นตัวช่วยได้ในระดับหนึ่งครับ

  9. Pakin says

    ถึง K.Chonla,

    ขอบคุณคับ สำหรับคำตอบดีๆ

    ยังไงผมก้อจะลอง ศึกษาดูนะคับ

  10. chonla says

    ด้วยความยินดีครับ

  11. fern says

    จะรบกวนถาม ผู้รู้เรื่องการสร้าง model ของ symfony ค่ะ เนื่องจากสร้างผ่าน commnd และมันไม่ผ่านค่ะ

  12. chonla says

    ลองสอบถามไปที่ผู้ที่ใช้งานโดยตรงน่าจะดีครับ

    ผมหามาให้ 2 ท่านครับ
    http://moohooooo.exteen.com/category/Symfony-Tutorial
    http://www.styleyee.com/2009/02/25/start-a-new-life-with-symfony-framework/

  13. Genetic says

    ตอนนี้ผมใช้ CodeIgniter อยู่ครับ

    ใช้ extension Module (HMVC) ทำให้เขียนง่ายขึ้นเยอะเลย

    แต่หาวิธีเขียนกับ Smarty ไม่ได้เลยอ่ะครับ



Some HTML is OK

or, reply to this post via trackback.

*