PHP Framework
Framework มีอะไรดี
Framework ก็คือ
กรอบของการทำงาน แปลตรงตัวเลยครับ Frame + work แต่ถ้ามองในแง่โปรแกรม
ก็จะเป็น ข้อกำหนดหรือขอบเขตในการเขียนโปรแกรมให้เป็นไปในรูปแบบเดียวกัน
และสามารถนำไปเขียนเพิ่มเพื่อตอบสนองความต้องการอย่างใดอย่างหนึ่งได้ ดังนั้น CakePHP
framework ก็จะมี class และ function ต่างๆ ให้เราได้เรียกใช้ โดยที่เราไม่ต้องไปเสียเวลาเขียนขึ้นมาเอง
ซึ่งจะทำให้เกิดความรวดเร็วในการพัฒนา Web Application
MVC
คืออะไร (MVC for Concept)
MVC เป็นเฟรมเวิร์คที่เกิดขึ้นมาในสมัย Smalltalk-80
เมื่อกว่ายี่สิบปีมาแล้ว โดยแยกออปเจคที่เก็บข้อมูล (model) ออปเจคที่แสดงข้อมูล (view) และออปเจคที่ติดต่อกับผู้ใช้
(controller) ออกจากกันอย่างชัดเจน
การสื่อสารระหว่างออปเจ็คจะใช้ Observer pattern นั่นหมายความว่าตัวออปเจคที่ถูก
observe จะแจ้งการเปลี่ยนแปลงที่เกิดขึ้นในตัวมันให้แก่ตัว observer
ทุกตัวโดยไม่จำเป็นต้องรู้ว่าตัว observer แต่ละตัวเป็นใครหรือเป็นออปเจ็คของคลาสไหน
ตราบใดที่คลาสนั้นimplement observer (หรือ listener)
interface
การแยกออปเจคเหล่านี้ออกจากกันจะทำให้ง่ายต่อการแก้ไขโปรแกรม
เช่น เราสามารถเปลี่ยน view จาก GUI เป็น
HTML (รวมทั้ง jsp, aspx, php), WML หรือ
text mode ได้โดยไม่ต้องแก้โมเดล
หรือเราจะสนับสนุนหลายๆวิวพร้อมๆกัน เช่น
ลูกค้าตลาดหุ้นแต่ละคนจะมีหน้าจอดูราคาหุ้นในตลาดหลักทรัพย์ แต่ละคนจะมีวิวของตัวเองและจะแสดงข้อมูลหลักทรัพย์เฉพาะที่ตัวเองสนใจ
ในขณะที่ออปเจคโมเดลคือหลักทรัพย์ทั้งหมดในตลาด เป็นต้น

หลักการสำคัญ ก็คือ
โมเดลจะไม่สามารถเรียกเมดธอดของวิวหรือคอนโทรลเลอร์โดยตรง
เนื่องจากมันจะไม่มีตัวแปรเก็บออปเจคที่เป็นวิวหรือคอนโทรลเลอร์ โมเดลมีเพียงแต่ list
ของออปเจคชนิด observer (วิวหรือคอนโทรลเลอร์ที่
implement observer interface) ที่เฝ้าสังเกตุการเปลี่ยนแปลงอยู่
ตัวโมเดลจะแจ้งการเปลี่ยนแปลงด้วยการส่ง event notification message ไปให้ observer ทุกๆตัว ถ้า observer นั้นเป็นวิวก็จะอัพเดปหน้าจอด้วยขอมูลใหม่ เป็นต้น
ในทำนองเดียวกันตัววิวเองก็มองไม่เห็นคอนโทรลเลอร์ ไม่สามารถเรียกเมดธอดของคอนโทรลเลอร์ได้โดยตรง
นอกจากจะส่ง event ไปให้คอนโทรลเลอร์ที่เป็น observer
ของวิวนั้นๆ
อาจแล้วอาจจะสงสัยว่าแล้วทำไมไม่ให้โมเดลเก็บตัวแปรวิวและคอนโทรลเลอร์โดยตรงไปเลย
ไม่ต้องติดต่อกับผ่าน event notification เหตุผลก็อย่างที่บอกไว้ข้างต้น
ว่าเราต้องการแยกการแสดงผลและการจัดการข้อมูลจากผู้ใช้ออกจากตัวข้อมูลที่เก็บในโมเด
ล
ทำให้สามารถเปลี่ยนวิวหรือคอนโทรลเลอร์ได้โดยไม่ต้องแก้ไขโมเดล
หรือสนับสนุนวิวหลายๆตัวพร้อมกัน หรือสนับสนุนการเขียนโปรแกรมระดับ N-tier เป็นต้น
มีผู้ดัดแปลง MVC ไปใช้หลายรูปแบบ เช่น Swing เรียก MVC2 บางรายใช้ Model-View-Presenter หรือไม่ก็ Model-User
Interface แต่หลักการก็ยังคล้ายๆเดิม
เพียงแตกต่างที่การติดต่อระหว่างโมเดล วิว คอนโทรลเลอร์
ว่าใครเป็นผู้แจ้งหรือตอบรับการเปลี่ยนแปลงเหตุการณ์ (event notification) หรือการรวม view กับ controller เข้าด้วยกัน รายละเอียดเพิ่มเติม รวมทั้งวิธีการเขียนโปรแกรมตามหลัก MVC
คงต้องไปดูลิงค์ข้างล่างครับ
Case2
1 MVC เป็นหลักการไม่ขึ้นกับภาษา ดังนั้น ภาษาอะไรก็ MVC ได้
2 การเขียน code แบบ MVC จะพยายาม แบ่งcode เป็น
3ส่วน
คือ V=view C= control M=model
3 V=view หมายถึง Interface คือ code ที่ใช้ gen หน้าจอ
ไม่ว่าจะเป็น win app หรือ web
ถ้าเทียบกับ ASP.NET V=view ตือ file *.aspx เท่านั้น
4 C= control หมายถึง code ที่ทำหน้าที่ Control การทำงาน (flow) ซึ่งถ้าจะบอกว่า *.cs ที่ติดมากับ
*.aspx เป็น controlก็ได้
5 M = model (นี้คือจุดที่เป็นปัญหาของคนเขียน
asp.net)
model จริงๆๆแล้วมันคือ Object
ถ้าเขียน Program แบบ OOP มันก็จะมี Object มากมาย
แต่เนืองจาก asp.net ในบ้างเรา (ตามหนังสือ)ไม่ได้เขียนแบบ OO เลย
จึงทำให้ภาพของ Object นั้นไม่มี
คนเขียน asp.net มักจะใช้ dataset ถ้าจะมองdataset เป็น model ก็เกือบได้ แต่ไม่ใช่
คำถามที่น่าสนใจ คือ ASP.NET เป็น MVC ไหม ถ้าว่ากันตรงๆๆแล้วไม่เป็นครับ .net
จึง ออก ASP.NET MVC ขึ้นมา(แต่ผมกลับไม่สนใจเลย)
คำถามคือ เขียน asp.net ยังไงให้เป็น MVC
อย่างแรกครับ
1 ต้องมี MODEL ทาง.net
มักเรียกว่า POCO อาจมี BLL หรือไม่มีก็ได้ตามความนิยม
คนส่วนมาก เขียนasp.net ไม่มี model มันเลยไม่สามารถเป็น MVC ได้
2 file *.aspx ต้องมี code ที่ทำงานด้านการ gen interface เท่านั้น
ถ้ามือใหม่ หรือหนังสือสอน *.aspx
บ้างที่ยังมีคำสั่ง sql อยู่เลย
แล้วทำไม คำสั่ง SQL ถึงไม่ควรอยู่บนview คุณต้องลองไปศึกษาว่า ข้อดีของ MVC
คืออะไรเพื่ออะไรแล้วจะเข้าใจครับ
3 *.cs ที่ติดมากับ *.aspx ต้องทำหน้าที่ เป็น control เท่านั้น ห้ามมี BLL
หรือ sql หรือ connection
แต่มันก็ไม่สามารถเป็น control
ที่สมบูรณ์บางคนเลยเรียก ASP.Net ว่า MVC
กระเทย เกือบเป็นแต่ไม่เป็น
เพราะ *.cs ที่ติดมากับ
*.aspx มันผูกติดกับ *.aspxแบบ1-1
ซึ่ง 1C อาจต่อ ได้หลาย V
สุดท้าย ถ้าคุณอยากเขียน MVC คุณมาถูกทางแล้ว เพราะคุณควรจะรู้จัก การแบ่งcode ทำตามหน้าที่ตามlayer
ของมัน
ผมขอฝากภาพนี้

ภาพ นี้ไม่ได้ อธิบาย MVC แต่ อธิบายการแบ่ง layer
3 ชั้น จากภาพแล้ว
asp.net เป็น V และ
C
ส่วนBLL เป็น model
ส่วน DAL เป็นส่วนที่
model เรียกเพื่อ access dataครับ
และตอนนี้ Architect ของ .net พัฒนาไปมาก ผมขอบอกว่า Architect นั้นดีมาก แล้วตอนนี้มี LINQ ผมยิ่งรักมันไปใหญ่
(JAVA ผมก็ไม่ทิ้งนะครับ)
Case3
MVC เป็นหนึ่งในหลายๆ pattern ของ
Design pattern ซึ่งเป็น Model
หรือรูปแบบในการวางโครงสร้างโปรแกรมทำให้แยกกันระหว่าง
M=Model V=View C=Coltroller
1.Model เป็นการตัดสินใจในนการเข้าถึงและใช้งานข้อมูล(Data)
2.View เป็นส่วนของการนำข้อมูลที่ได้จาก Model มาแสดงผลให้ผู้ใช้ได้ทราบข้อมูลผ่านทางส่วนติดต่อกับผู้ใช้งาน
(User Interface)
3.Controller เป็นส่วนที่ตอบรับและโต้ตอบการทำงานของผู้ใช้(Client) โดยจะเป็นตัวกระตุ้นให้ Model และ View ทำงานไปในทิศทางเดียวกัน
รูป. พื้นฐานการทำงานของ MVC
จากรูป
จะเห็นได้ว่า เวลาที่ Client เรียก หรือร้องขอ(Request)
เข้ามาจะไปที่ Control ก่อนเพื่อแยกแยะว่าจะต้องทำอะไร
แล้วค่อยไปหา Model แล้วสร้าง View ส่งกลับไปให้
Client จะเห็นได้ว่า
การทำงานของโปรแกรมจะแบ่งแยกหน้าที่กันอย่างชัดเจนทำให้เราสามารถปรับเปรี่ยนแก้ไข
หรือ พัฒนาเพิ่มเติมได้โดยที่ไม่มีผลกระทบต่อการทำงานในส่วนอื่นๆ
ซึ่งผมจะยกตัวอย่างการทำงานของ Hardware เพื่อให้เห็นภาพการทำงานมากขึ้น
เช่น คอมพิวเตอร์ 1 เครื่องนั้น
ถ้าต้องการให้คอมพิวเตอร์นั้นประมวลผลเร็วขึ้นก็สามารถที่จะถอด CPU ตัวเก่า แล้วนำ CPU ตัวใหม่มาเสียบ
แล้วใช้ต่อได้เร็วกว่าเดิม ต้องการให้การแสดงผลที่ดีขึ้นก็เปลี่ยนการ์ดจอ
แต่ขอบเขตคือต้องอยู่ในสิ่งที่ mainboard รับได้ด้วย
เราจะทำยังไง ซึ่งเป้นอะไรที่ยากมากเพราะจะต้องใช้สถาปัตยกรรมหรือแนวคิดของ Software
ที่ดีด้วยซึ่ง MVC ก็ทำได้ เช่น ถ้าเราต้องการ
Control ใหม่ให้ได้ผลลัพท์เหมือนเดิม แล้วเอาไปเสียบที่เดิม
ก็เสร็จ ทำให้ไม่ต้องมาสนใจ View และ Model เป็นต้น
Model-View-Controller (MVC) คือ สถาปัตยกรรมซอฟแวร์ (software architecture) ที่มีการแบ่งแยกระบบออกเป็น 3 ส่วนหลักๆ
ได้แก่ data model, user interface, and
control logic
MVC architecture
Controller
•เป็นส่วนที่ทำงานเป็นอันดับแรกเมื่อมีโปรแกรมถูกเรียก จาก Web
browser
•เป็นส่วนที่ติดต่อการทำงานระหว่างผู้ใช้และโปรแกรม
•มีการติดต่อกับ Database(ฐานข้อมูล) ด้วย Model
และแสดงผลข้อมูลผ่านทาง View
•เป็นส่วนที่มีการประมวลผลหลัก ของโปรแกรม
Model
ใน object oriented การใช้เว็บ database-driven จะเป็นแบบ MVC ซึ่ง Model จะประกอบด้วย
class ที่เชื่อมต่อกับ RDBMS ใน Ruby
On Rails class model จะถูกจัดการผ่านทาง Active Record (เป็นตัวเข้าถึงข้อมูลในฐานข้อมูล) ซึ่งโปรแกรมเมอร์ทุกคนควร ต้องทำเป็น subclass
คือ ActiveRecord?::Base class และโปรแกรมจะเข้าใจอัตโนมัติว่าจะใช้ตาราง
RDBMS อันไหน และเรียกคอลัมภ์ต่างๆในตารางเอง
ใน Model มีการติดต่อกับ Active Record
เพื่อช่วยจัดการงานด้าน Database เช่น
•ดูแลในเรื่องของการติดต่อสื่อสารระหว่าง Object
และ Database โดยที่ผู้พัฒนาไม่ต้องยุ่งยากกับการใช้
SQL command
•เป็นงานด้านการตรวจสอบความสัมพันธ์ของข้อมูล มีผลกับฐานข้อมูล
•Handles validation(ตรวจสอบความถูกต้อง), association(ความสัมพันธ์ระหว่างฐานข้อมูล), transactions, and more…
View
•เป็นส่วนที่ต้องแสดงผลผ่าน web browser
•เขียนด้วยพื้นฐานของ HTML(.rhtml), แทรกด้วย script
ของ ruby คล้าย PHP,JSP,ASP
•การทำงานสัมพันธ์อยู่กับ controller
•นำ component มาใช้ใหม่ได้ (Reusable)
•สนับสนุน Ajax
•View เป็นการแสดงผลทาง logic หรือ
การทำอย่างไรให้ข้อมูลจาก Controller class ถูกแสดงผล วิธีการใน
Rails จะใช้ Embedded Ruby (ไฟล์นามสกุล
.rhtml) ซึ่งก็เป็นพื้นฐานจาก HTML และด้วยไวยากรณ์
(syntax) ที่คล้าย JSP นอกจากนี้ด้วยยังสนับสนุนการใช้
HTML และ XML
•สำหรับ method ที่อยู่ใน class ของ controller หากต้องการที่จะแสดงผลแก่ผู้ใช้
จึงจำเป็นต้องเขียน code ย่อยขึ้นมา และเก็บในโฟลเดอร์ของ view
นี้เอง โดยจะต้องตั้งชื่อไฟล์นี้ เป็นชื่อเดียวกันกับ method
ใน controller ที่ต้องการให้มี output ในการแสดงผล เช่น
◦ใน controller mysite มีการกำหนด method
ที่มีชื่อว่า index,home,contact เป็นต้น
โดยทั้ง 3 method ต้องมีการแสดงผลต่างกัน ดังนั้น
โปรแกรมเมอร์ต้องเขียนไฟล์ในการแสดงผลใน โฟลเดอร์ view 3 ไฟล์
ได้แก่ index.rhtml , home.rhtml , contact.rhtml เป็นต้น
◦นอกจากนี้ยังสามารถกำหนด stysheet และ template
เพื่อให้งานเว็บแอพลิเคชั่นนั้นมีมาตรฐานเดียวกันทั้งหมด ในกรณี template
จะสร้างไฟล์ ที่เป็นตัวกำหนด header, content, footer ไว้ที่โฟลเดอร์ layout ภายใต้โฟลเดอร์ view ซึ่งลักษณะการทำงานของไฟล์นี้ จะถูกเรียกใช้ในการแสดงผลทุกครั้ง เป็นต้น
โครงสร้าง MVC ใน Ruby On Rails
เลือกใช้ CakePHP ในการทำงาน
1.
มีลิขสิทธิ์ยืดหยุ่น
2.
ใช้ MVC
3.
มี Helper ช่วยให้พัฒนาได้ง่ายและรวดเร็ว เช่น AJAX Javascript HTML Forms และอ่น ๆ
4.
มีความปลอดภัยในเรื่องของ Email , cookie
Security Session รองรัการทำงานในรูปแบบ Components
พูดตามประสา
จริง ๆ แล้ว Framework
มันเหมาะสำหรับทำงานขนาดกลาง
ถึงขนาดใหญ่ หรือมีคนมากกว่า 2
คนมาทำงานร่วมกัน โดย Framework จะมีรูปแบบ (Pattern)
ที่เป็นมาตรฐาน
ตายตัว Code ไม่มั่ว ไม่ใช่ Cowboy Coding
ไม่งั้นมานั่งงม code กันตาเหลือก
คำถามเดิม ๆ ก็จะไปหมด “เขียนใหม่ง่ายกว่านั่ง แกะ code”
อีกอย่างที่เห็นได้ชัด
คือ การใช้สถาปัตยกรรมแบบ MVC
(Model – View - Controller) มาใช้งาน มันจะทำให้แยกส่วนการทำงานในแต่ละส่วนออกจากกัน
ไม่ต้องห่วงพะวง ว่าเอ๊ะ มันจะไปกระทบ Function นี้หรือเปล่า จุดนี้มันมันเชื่อมกับส่วนไหน Programmer
กับ Designner สามารถแบ่งกันทำง่ายได้อย่างชัดเจนและง่ายมาก
ไม่ต้องพอให้ตรงนี้เสร็จแล้วค่อยมาเชื่อม แล้วค่อยมาแก้ และที่สำคัญ มันทำให้งานเสร็จเร็วขึ้น 60
– 70%
ขอบคุณข้อมูลจาก : www.narisa.com (ขอโทษครับจำ Link ไม่ได้)