<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jQuery, Ajax, PHP, JSON, XML, Web Technologies &#187; Software Engineering</title>
	<atom:link href="http://blog.chonla.com/category/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chonla.com</link>
	<description>คุยกันเรื่อง jQuery, Ajax, PHP, JSON, XML และ Web Technologies เป็นภาษาไทยกันดีกว่า</description>
	<lastBuildDate>Wed, 08 Sep 2010 19:28:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>MVC Design Pattern (MVC ไม่ได้ย่อจากการ์ตูน Mavel Comic นะเฟ้ย)</title>
		<link>http://blog.chonla.com/2009/01/mvc-design-pattern-%e0%b9%84%e0%b8%a1%e0%b9%88%e0%b9%83%e0%b8%8a%e0%b9%88%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b9%8c%e0%b8%95%e0%b8%b9%e0%b8%99-mavel-comic-%e0%b8%99%e0%b8%b0%e0%b9%80%e0%b8%9f%e0%b9%89/</link>
		<comments>http://blog.chonla.com/2009/01/mvc-design-pattern-%e0%b9%84%e0%b8%a1%e0%b9%88%e0%b9%83%e0%b8%8a%e0%b9%88%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b9%8c%e0%b8%95%e0%b8%b9%e0%b8%99-mavel-comic-%e0%b8%99%e0%b8%b0%e0%b9%80%e0%b8%9f%e0%b9%89/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 16:10:41 +0000</pubDate>
		<dc:creator>chonla</dc:creator>
				<category><![CDATA[MVC]]></category>
		<category><![CDATA[Object Oriented]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Design Pattern]]></category>

		<guid isPermaLink="false">http://blog.chonla.com/?p=142</guid>
		<description><![CDATA[MVC ที่ผมจะพูดถึงนี้ ย่อมาจาก Model-View-Controller ครับ เป็นรูปแบบการออกแบบระบบ โดยหลักการคือ จะแบ่งระบบที่เราออกแบบเป็น 3 ส่วนประกอบหลัก ๆ คือ Model, View และ Controller โดยที่แต่ละส่วนจะมีความสำคัญดังนี้ Model  จะหมายถึง Object ที่แทนข้อมูล หรือกิจกรรมต่าง ๆ ในระบบ เช่น ตารางใน database หรือจะเป็นโพรเซสงานหนึ่ง ๆ ก็ได้ครับ เราจะไม่นับข้อมูลดิบในระบบเป็น Model เพราะข้อมูลเหล่านั้นจะถูกครอบ (Encapsulated) ด้วย Model นั่นเองครับ ถ้าใครเคยเรียน Object Oriented มาน่าจะพอเข้าใจได้ดีนะครับ View จะหมายถึงการแสดงผลข้อมูลต่าง ๆ ที่ได้รับมาจาก Model ครับ ไม่ว่าจะอยู่ในรูปแบบของรูปภาพกราฟิคต่าง ๆ หรือข้อความก็ตาม นอกจากนี้เรายังสามารถแสดงผลที่ได้รับจาก Model หนึ่ง ๆ ได้หลายรูปแบบอีกด้วย Controller จะหมายถึง [...]]]></description>
			<content:encoded><![CDATA[<p>MVC ที่ผมจะพูดถึงนี้ ย่อมาจาก Model-View-Controller ครับ เป็นรูปแบบการออกแบบระบบ โดยหลักการคือ จะแบ่งระบบที่เราออกแบบเป็น 3 ส่วนประกอบหลัก ๆ คือ Model, View และ Controller โดยที่แต่ละส่วนจะมีความสำคัญดังนี้</p>
<p><span id="more-142"></span></p>
<ol>
<li>Model  จะหมายถึง Object ที่แทนข้อมูล หรือกิจกรรมต่าง ๆ ในระบบ เช่น ตารางใน database หรือจะเป็นโพรเซสงานหนึ่ง ๆ ก็ได้ครับ เราจะไม่นับข้อมูลดิบในระบบเป็น Model เพราะข้อมูลเหล่านั้นจะถูกครอบ (Encapsulated) ด้วย Model นั่นเองครับ ถ้าใครเคยเรียน Object Oriented มาน่าจะพอเข้าใจได้ดีนะครับ</li>
<li>View จะหมายถึงการแสดงผลข้อมูลต่าง ๆ ที่ได้รับมาจาก Model ครับ ไม่ว่าจะอยู่ในรูปแบบของรูปภาพกราฟิคต่าง ๆ หรือข้อความก็ตาม นอกจากนี้เรายังสามารถแสดงผลที่ได้รับจาก Model หนึ่ง ๆ ได้หลายรูปแบบอีกด้วย</li>
<li>Controller จะหมายถึง กิจกรรม การกระทำ หรือการตอบสนองต่อเหตุการณ์ต่าง ๆ ที่เกิดขึ้น โดยอาจจะมีผลทำให้ข้อมูลใน Model เปลี่ยนสถานะไปได้ครับ</li>
</ol>
<div id="attachment_144" class="wp-caption aligncenter" style="width: 294px"><a href="http://blog.chonla.com/wp-content/uploads/2009/01/model-view-controller-01.png"><img class="size-full wp-image-144" title="model-view-controller-01" src="http://blog.chonla.com/wp-content/uploads/2009/01/model-view-controller-01.png" alt="MVC diagram" width="284" height="340" /></a><p class="wp-caption-text">MVC diagram</p></div>
<p>รูปภาพด้านบนจะแสดงให้เห็นถึงความสัมพันธ์ระหว่าง Model, View และ Controller ในรูปแบบ Diagram (ขอบคุณภาพจาก <a href="http://www.tonymarston.net/php-mysql/model-view-controller.html">http://www.tonymarston.net/php-mysql/model-view-controller.html</a> ด้วยครับ)</p>
<p><strong>ข้อดีของการออกแบบระบบด้วย MVC Pattern</strong></p>
<ul>
<li><strong>การออกแบบที่ชัดเจน</strong> เมื่อเรากำหนดให้ Model อยู่ในรูปแบบของ Object ในระบบ ส่งผลให้เราสามารถมองภาพระบบโดยรวมได้ชัดเจนมากขึ้นว่า Model ใด สัมพันธ์กับ Model ใดในลักษณะใด รวมไปถึงคำสั่งต่าง ๆ ใน Object ที่เราสามารถเรียกใช้งานได้ จะทำให้เรามองเห็นภาพของพฤติกรรมของ Model นั้น ๆ อีกด้วย</li>
<li><strong>การปรับปรุง/แก้ไขได้โดยง่าย</strong> เมื่อเราออกแบบตาม MVC Pattern ทำให้เราสามารถปรับปรุง แก้ไขส่วนใด ๆ ได้อย่างง่ายดายโดยที่ไม่กระทบกับส่วนที่เหลือ เนื่องจากทั้ง 3 ส่วนต่างอิสระต่อกัน เพียงเรากำหนด Interface ของแต่ละส่วนให้ชัดเจน และทำการพัฒนา แก้ไข หรือปรับปรุงภายใต้ Interface ที่กำหนดเท่านั้น</li>
<li><strong>View ที่หลากหลาย</strong> หลังจากที่เราแยก View กับ Model ออกจากกัน ทำให้เราสามารถออกแบบ View ได้หลายรูปแบบ เปรียบเทียบได้กับ Model หนึ่งที่คอย Generate XML Data รายงานดัชนีหุ้น และมี View ที่นำข้อมูล XML ไปใช้สร้างเป็นกราฟ หรือตารางนั้นเอง</li>
<li><strong>Maintain ระบบได้ง่าย</strong> เพราะเราได้ออกแบบระบบที่มีโครงสร้างชัดเจน ทำให้ยืดหยุ่นต่อการเพิ่มเติม รวมไปถึงการนำส่วนใด ๆ กลับมาใช้ซ้ำได้อีกด้วย (Reusability)</li>
</ul>
<p><strong>แล้วข้อเสียล่ะ?</strong></p>
<p>เมื่อพูดถึงข้อดีแล้ว ต่อไปเราก็มาพูดถึงข้อเสียกันบ้าง ข้อเสียหนึ่งที่เห็นได้ชัดเลยคือ มันซับซ้อนเกินไป ถ้าเราจะนำมาใช้กับระบบขนาดเล็ก เทียบง่าย ๆ มันก็คงไม่ต่างจากภาษิตที่ว่า ขี่ช้างจับตั๊กแตน นั่นเองครับ</p>
<p><strong>นอกจากนี้แล้ว</strong></p>
<p>นอกจากนี้แล้ว ทางฝั่งภาษา PHP เองก็มี Framework ที่สนับสนุนการพัฒนาระบบที่มีพื้นฐาน MVC design pattern อยู่หลายตัวครับ ผมขออนุญาตลอกมาจาก Wiki ให้ดูกัน (<a href="http://en.wikipedia.org/wiki/Model-view-controller#PHP">http://en.wikipedia.org/wiki/Model-view-controller#PHP)</a></p>
<ul>
<li></li>
<li>Akelos PHP Framework &#8211; a Ruby on Rails port to PHP4/5.</li>
<li>CakePHP &#8211; webapplication framework modeled after the concepts of Ruby on Rails.</li>
<li>CodeIgniter &#8211; A PHP MVC framework.</li>
<li>FUSE &#8211; A powerful but easy-to-use PHP 5 Framework for MVC development modeled after the concepts of Ruby on Rails.</li>
<li>Jelix (web framework)</li>
<li>Jaws &#8211; is a Framework and Content Management System for building dynamic web sites.</li>
<li>Joomla v1.5.x &#8211; is an open source Content Management System that employs the MVC model for its extensions, called components and modules.</li>
<li>Kohana &#8211; is an open source MVC oriented framework, originally forked from CodeIgniter.</li>
<li>LISA MVC &#8211; is an open source object oriented web application framework.</li>
<li>Odin Assemble &#8211; Small footprint PHP based MVC Framework.</li>
<li>Orinoco Framework &#8211; is a full-stack yet lightweight framework written in PHP5. It implements the Model 2 design paradigm.</li>
<li>PHPonTrax &#8211; A PHP 5 MVC framework modeled after Ruby on Rails.</li>
<li>phpXCore &#8211; A MVC design pattern based PHP content management framework compatible with PHP4 and PHP5.</li>
<li>Prado &#8211; A PHP 5 MVC framework modeled after ASP.NET web forms.</li>
<li>Qcodo &#8211; is an open-source PHP 5 web application framework</li>
<li>SilverStripe &#8211; contains a fully fledged PHP 5.2 ORM/MVC Framework focused on building websites. Much like Ruby on Rails.</li>
<li>Solar</li>
<li>Switch board (framework) &#8211; with Routing PHP 5 MVC Framework with Routing.</li>
<li>Symfony Framework- PHP 5 MVC Framework modeled after the concepts of Ruby on Rails.</li>
<li>Zend Framework &#8211; A PHP 5-based MVC framework modeled after the concepts of Ruby on Rails.</li>
<li>ZNF &#8211; PHP5 MVC framework for enterprise web applications</li>
<li>Zoop &#8211; Framework A Mature PHP 4/5 MVC framework.</li>
<li>PureMVC &#8211; Framework for PHP</li>
</ul>
<p><strong>เอกสารอ้างอิง</strong> </p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Model-view-controller">http://en.wikipedia.org/wiki/Model-view-controller</a></li>
<li><a href="http://www.tonymarston.net/php-mysql/model-view-controller.html">http://www.tonymarston.net/php-mysql/model-view-controller.html</a></li>
<li><a href="http://cristobal.baray.com/indiana/projects/mvc.html">http://cristobal.baray.com/indiana/projects/mvc.html</a></li>
<li><a href="http://aspalliance.com/1562_Implementing_the_MVC_Design_Pattern_in_ASPNET.1">http://aspalliance.com/1562_Implementing_the_MVC_Design_Pattern_in_ASPNET.1</a></li>
</ul>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.chonla.com/wp-content/plugins/add-to-any/share_save_171_16.gif" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.chonla.com/2009/01/mvc-design-pattern-%e0%b9%84%e0%b8%a1%e0%b9%88%e0%b9%83%e0%b8%8a%e0%b9%88%e0%b8%81%e0%b8%b2%e0%b8%a3%e0%b9%8c%e0%b8%95%e0%b8%b9%e0%b8%99-mavel-comic-%e0%b8%99%e0%b8%b0%e0%b9%80%e0%b8%9f%e0%b9%89/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>
