MVC ที่ผมจะพูดถึงนี้ ย่อมาจาก Model-View-Controller ครับ เป็นรูปแบบการออกแบบระบบ โดยหลักการคือ จะแบ่งระบบที่เราออกแบบเป็น 3 ส่วนประกอบหลัก ๆ คือ Model, View และ Controller โดยที่แต่ละส่วนจะมีความสำคัญดังนี้
- Model จะหมายถึง Object ที่แทนข้อมูล หรือกิจกรรมต่าง ๆ ในระบบ เช่น ตารางใน database หรือจะเป็นโพรเซสงานหนึ่ง ๆ ก็ได้ครับ เราจะไม่นับข้อมูลดิบในระบบเป็น Model เพราะข้อมูลเหล่านั้นจะถูกครอบ (Encapsulated) ด้วย Model นั่นเองครับ ถ้าใครเคยเรียน Object Oriented มาน่าจะพอเข้าใจได้ดีนะครับ
- View จะหมายถึงการแสดงผลข้อมูลต่าง ๆ ที่ได้รับมาจาก Model ครับ ไม่ว่าจะอยู่ในรูปแบบของรูปภาพกราฟิคต่าง ๆ หรือข้อความก็ตาม นอกจากนี้เรายังสามารถแสดงผลที่ได้รับจาก Model หนึ่ง ๆ ได้หลายรูปแบบอีกด้วย
- Controller จะหมายถึง กิจกรรม การกระทำ หรือการตอบสนองต่อเหตุการณ์ต่าง ๆ ที่เกิดขึ้น โดยอาจจะมีผลทำให้ข้อมูลใน Model เปลี่ยนสถานะไปได้ครับ
รูปภาพด้านบนจะแสดงให้เห็นถึงความสัมพันธ์ระหว่าง 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
เอกสารอ้างอิง

สวัสดีครับ
ผมอยากเรียนถามว่า ตัวไหนที่นิยมใช้กันมากครับ
แล้วตัวไหนดี.. ไม่ดีอย่างไร.. ขอคำชี้แนะด้วยครับ
ก็ที่เห็นมีคนใช้กันเยอะ ๆ ก็ CakePHP ครับ แล้วก็มีทีมที่ทำงานอีกทีมเค้าใช้ CodeIgniter ครับ แต่เท่าที่รู้ CakePHP ก็ได้รับความนิยมไม่น้อยครับ
ถ้าจะลอง ก็น่าจะลองตัวที่มี Usergroup ใหญ่ ๆ น่าจะดีครับ เพราะมันจะได้มีการพัฒนาอย่างต่อเนื่อง รวมถึงเราสามารถหาแหล่งข้อมูลได้ง่ายครับ
jQuery ต่างจาก Scriptaculous (http://script.aculo.us/) ยังไงเหรอครับ
แล้วการใช้งานนี่ต่างกันป่าว
ผมเคยใช้ Scriptaculous มาบ้างนิดหน่อย แต่ไม่เคยใช้ jQuery น่ะครับ
ผมเข้าใจว่า Scriptaculous จะเป็นเรื่องการทำ effect ในขณะที่ jQuery จะครอบคลุมทุกส่วน คือ เรื่องของ control flow ซึ่งเป็น basic ในการเขียนโปรแกรม และ Ajax รวมถึง Effect ต่าง ๆ ด้วยครับ
prototype อีกตัวที่น่าใช้เหมือนกัน
เดิมทีผมก็ใช้ prototype ครับ มีความสามารถที่ค่อนข้างจำกัดครับ พอได้รู้จักกับ jQuery ก็หลงเข้าหัวปักหัวปำครับ เหตุผลที่ผมชอบ jQuery ลองดูในบทความนี้ครับ jQuery พาชีวีเบิกบาน
ตอนนี้ ผมกำลังศึกษา PHP MVC Framework อยู่ 3 ตัว เพื่อที่จะนำมา apply ใช้ กับระบบของบริษัท :
1. CodeIgniter
2. Zend Framework
3. Symfony Framwork
ผมอยากถามผู้รู้ / คนที่เคยนำ Framework ทั้ง 3 ไปใช้ ว่า
1. แต่ละ Framework ต่างกันยังไง
2. ข้อดี-ข้อเสีย ของแต่ละ Framework
3. แต่ละ Framework เหมาะที่นำไป implement กับ ระบบงานลักษณะใด
ขอบคุณมากคับ
ส่วนตัวแล้ว ผมยังไม่เคยลองทั้ง 3 frameworks ที่เคยลองก็เห็นจะมีแต่ CakePHP ครับ
ส่วนตัวผมมองว่า ปัจจัยในการเลือก Framework ที่จะนำมาใช้งานนั้น learning curve ต้องไม่มากเกินไป รวมถึง usergroup ที่ใหญ่เพียงพอ
สองปัจจัยนี้ สำคัญสำหรับการพัฒนาระบบในระยะยาว
ผมขอโทษด้วยที่ผมไม่สามารถให้คำตอบทั้ง 3 ข้อที่คุณถามมาได้เลยครับ แต่ผมเข้าใจว่า MVC Framework ทุกค่าย ตั้งเป้าหมายในการใช้งานไม่แตกต่างกัน
ข้อสังเกตของ Symfony และ Zend คือ พัฒนามาจากแนวคิดของ ROR (Ruby on Rails)
ทางที่ดีลองเข้าไปดู Demo หรือ Tutorial ของแต่ละ Framework ที่คุณสนใจ และลองดู usergroup ที่จะเป็นผู้ช่วยคุณในยามคับขันได้ว่ามีมากเพียงพอต่อความต้องการหรือเปล่า น่าจะเป็นตัวช่วยได้ในระดับหนึ่งครับ
ถึง K.Chonla,
ขอบคุณคับ สำหรับคำตอบดีๆ
ยังไงผมก้อจะลอง ศึกษาดูนะคับ
ด้วยความยินดีครับ
จะรบกวนถาม ผู้รู้เรื่องการสร้าง model ของ symfony ค่ะ เนื่องจากสร้างผ่าน commnd และมันไม่ผ่านค่ะ
ลองสอบถามไปที่ผู้ที่ใช้งานโดยตรงน่าจะดีครับ
ผมหามาให้ 2 ท่านครับ
http://moohooooo.exteen.com/category/Symfony-Tutorial
http://www.styleyee.com/2009/02/25/start-a-new-life-with-symfony-framework/
ตอนนี้ผมใช้ CodeIgniter อยู่ครับ
ใช้ extension Module (HMVC) ทำให้เขียนง่ายขึ้นเยอะเลย
แต่หาวิธีเขียนกับ Smarty ไม่ได้เลยอ่ะครับ