สถาปัตยกรรม MVC

สถาปัรยกรรม Model , View และ Controller (MVC)

MVC มีไว้เพื่อเป็นแบบแผนการสร้าง GUI Application โดยแยกสิ่งต่างๆ ในแอปพลิเคชัี่นออกจากกันให้แต่ละส่วนทำงานเฉพาะเพื่อให้สามารถเพขียนโค้ดและปรับปรุงแอปพลิเคชั่นได้ง่ายขึ้น
การพัฒนาซอฟต์แวร์ใมนยุดแรกๆ ผู้พัฒนามักจะเขียนโปรแกรมส่วนการแสดงผล ส่วนการติดต่อฐานข้อมูล เงื่อนไขและการควยคุมเหตุการ์ต่างๆ ไว้รวมกันในที่เดียยว และหลังจากนั้นเมื่อ 20 ปีก่อนจนปัจจุบันได้มีผู้เริ่มทดลองสถาปัตยกรรมของแว็บแอปพลิเคชั่นตามแนวคิดของ MVC ขึ้นมา โดยผลลัทธ์ที่ได้จากการทดลองดังกล่าวถูกสร้างขึ้นเป็น Framework ต่างๆ ได้แก่ Webobject , Strut และ Javascript Frace ซึ่งอยู่บนฐากฐานแนวความคิดของ MVC ทั้งหมด
Ruby on Rails (RoR) เป็น MVC Framework หนั่งโดย Rails จะควบคุมโครงสร้างของแอปพลิเคชั่นในการพัฒนา Model,View,Controller ซึ่งเหมือนกับการแยกกลุ่มของหน้าที่ ออกจากกัน และสามารุถรวมสิ่งที่ถูกแยกออกจากกันได้อย่างอัรโนมัติโดยที่ไม่ต้องเขียนอะไรเพิ่มเติม ดังตัวอย่างทฤษฏีของ rails ซึ่งเป็นหลักการเกี่ยวกับกการสิ่งต่างๆ โดยที่ไม่ต้องกำนหดคุณสมบัติเพิ่มเติม หรือเรียกว่า Convention over Contiguration


Active Record: Rails Model Support
สิ่งสำคัญของการพัฒนาพัฒนาเว็บแอปพลิเคชั่น คือ ต้องการให้เว็บแอปพลิเคชั่นสามารถจัดเก็บข้อมูลลงฐานข้อมูลได้ เช่น เว็บขายสินค้าที่ต้องการจัดเก็บรายการสินค้า รายการสินค้า รายการสั่งซื้อ และข้อมูลลูกค้า เป็นต้น หรือแม้แต่แอปพลิเคชึ่นที่เป็น Text ธรรมดา เช่น Webblog และเว็บข่าวสาร ยังต้องใช้ฐานข้อมูลจัดเก็บข้อมูลเช่นกัน
แม้ว่าจะไม่สามารถใช้ SQL เข้าถึงฐานข้อมูลเชิงสัมพันธ์ ได้โดยตรง เนื่องจากฐานข้อมูลเชิงสัมพันธ์ที่ใช้อยู่ในปัจจุบันออกแบบมาจากทฤษฏีทางคณิตศาสตร์ซึ่งเป็นแนวคิดที่ดี แก่ยากต่อการะรหว่างฐานข้อมูลเชิงสัมพันธ์กับ Object-Oriented Programming Language โดย Object เป็นทั้งข้อมูล Operation และฐานข้อมูลซึ่งเป็นชุดของข้อมูลทั้งหมด ว่ายต่อการแสดงเป็นแบบ Relation แต่บางครั้งก็ยากต่อการโค้ดในแบบ Object-Oriented
เหตุผลข้างต้น ส่งผลให้เกิดการรวบรวมมุมมอง Relational และ Objection-Orented เข้าด้วยกัน จึงเกิด 2 แนวทางคือ การมองว่าฐานข้อมูลเป็นจุดศูนย์กลางและการมองว่าโปรแกรมที่สร้างเป็นจุดศูนย์กลาง

การโปรแกรมโดยมองฐานข้อมูลเป็นจุดศูนย์กลาง
เป็นการเขียนโปรแกรมตรงข้ามกับการโปรแกรมฐานข้อมูลเชิงสัมพันธ์ในภาษาแบบ Procedural เช่น C และ COBOL ที่จะต้องเขียนคำสั่ง SQL เพิ่มไปยังโค้ดซึ่งจะต้องมีการแปลง SQL ในโค้ดไปยังระดับที่ต่ำกว่าเพื่อเรียก Database Engine เป็นการเขียนโค้ดที่ยุ่งยากและมีจำนวนมาก เหมาะกับการเขียนแอปพลิเคชั่นขนาดเล็ก อย่างไรก็ตามจากการรวม Business Logic และ Database Access เข้าด้วยกัน อาจเกิดปัญหาเมื่อต้องการบำรุงรักษาหรือเพิ่มเติมแอปพลิเคชั่นในอยสตนแลบะจำเป็นจะต้องศึกษาภาษา SQL เพื่อเริ่มการเขียนโปรแกรมในแอปพลิเคชั่น
การเขียนโปรแกรมแบบ Object-Oriented ได้ใช้หลักการ Encapsulation แก้ไขปัญหาดังกล่าว โดยการห่อหุ้ม ข้อมูลต่างๆ ไว้ในคลาส ซึ่งเมื่อต้องการปรับปรุงหรือเปลี่ยนแปลงสามารถแก้ไขได้ในที่เดียว แนวความคิดดังกล่าวได้นำมาใช้ใน Database Programming โดยห่อหุ้มการเข้าถึงฐานข้อมูลไว้ในคลาสโดยไม่ต้องเชื่อมต่อกับฐานข้อมูลโดยตรง เป็น Encaspulate Schema-Specific Stuff ไปยัง Single Layer และแยกโค้ดออกจากการเข้าถึงฐานข้อมูลระดับ Low-Level
แนวคิดดังกล่าว Implement ยากกว่าการเขื่อมต่อตารางฐานข้อมูลโดยตรง เนื่องจากเป็น Object ทำให้การพัฒนามีความยุ่งยากซับซ้อน จึงเกิด Object/Relation Mapping (ORM) ขึ้นเพื่อแก้ไขปัญหาดังกล่าว

Object/Relational Mapping
ORM เป็น Library ที่จับคู่ (MAP) ตารางในฐานข้อมูลไปยังคลาส เช่น ถ้าตารางในฐานข้อมูลชื่อ "orders" จะมีคลาสชื่อ "Order" เกิดขึ้น Row ในตารางจะกลายเป็น Object ของคลาส Column จะกลายเป็น Attribute ของ Object และภายในคลาสจะประกอบด้วย Method เพื่อเรียกดูแบะจัดการกับข้อมูบภายในคลาส เช่น ในคลาส Order มี Method ที่คำนวณภาษี และรวมยอดสั่งซื้อ เป็นต้น

Active Record
Active Record ใน Rails คือชั้นของ ORM (ORM Layer) ลักษณะเหมือนกับมาตรฐานของ ORM ได้แก่ การ Map ตารางไปยังคลาส ,แถวไปยัง Object และ Map Column ไปยัง Attribute ของ Object แต่ต่างกันที่วิธีการ Comfig ORM Library โดยอาศัยรูปแบบและเริ่มต้นด้วยการ Config ส่วนที่จำเป็นของ Active Record ก่อน ดังตัวอย่างเป็นโปรแกรมที่ใช้ Active Record เพื่อห่อหุ้มตาราง orders

Action Pack:View และ Controller
View และ Controller เป็นส่วนหนึ่งของ MVC โดย Controller ทำหน้าที่ส่งข้อมูลไปยัง View และรับเหตุการณ์ที่จะเกิดขึ้นจากเพจที่ถูฏสร้างโดย View จะเห็นว่า View และ Controoler จะมีการติดต่อกันเสมอจังถูกให้รวมอยู่ใน Component
"Action Pack" ดังนั้นจึงไม่ต้องกังวลเกี่ยวกับการเขียนโค้ดข้ามกันระหว่าง View และ Controller เนื่องจาก Rails รองรับให้สามารถแยกการเขียนเว็บแแอปพลิเคชั่นเพื่อเขียนโค้ดในส่วนควยคุมและส่วนนำเสนอออกอย่างชัดเจน

View Support
View ใช้สำหรับสร้างเพจเพื่อแสดงผลใน Browser สามารถแสดงผลที่ง่ายๆ เช่น แสดงผล Text จากการเขียนโค้ด HTML หรือถ้าต้องการเพิ่มเนื้อหาที่สามารถเปลี่ยนแปลงได้ (Dynamic Content) สามารถสร้างได้โดยใช้ Method "action"
ใน Controller
การสร้าง Dynamic Content ทำได้โดยใช้ Template มี 2 วิธี วิธีแรกคือ การฝัง (Embed) โด้ดบางส่วนไว้ในส่วนแสดงผลของ HTML ด้วยการใช้เครื่องมือของ Ruby ที่เรียกกว่า ERb(Embedded Ruby) วิธีนี้มีความยืดหยุ่นมากแต่ขัดแย้งกับ MVC โดยการฝังโค้ดไว้ใน View ซึ่งเป็ฯการเสี่ยงต่อการเพิ่ม logic ที่ควรจะอยู่ใน Model หรือ CXontroller
อีกวิธีหนึ่งคือ การใช้ Builder-Style Views จะช่วยสร้างเอกสาร XML ด้วยการใช้โค้ดของ Ruby ซึ่งเป็นการสร้าง XML ที่จะทำตามโค้ดคำสั่งโดยอัคโนมัติ

Controller
controller เป็นศูนย์กลางการควยคุมของแอปพลิเคชั่น ทำหน้าที่ประสานการทำงานระหว่าง User,View และ Model โดยการเขียนโค้ด และรวมไปไว้ตามหน้าที่ของแอปพลิเคชั่นแต่ละระดับ การสร้าง Controoler ดังกล่าวจะช่วยให้ง่ายต่อการพัฒนาและบำรุงรักษาระบบ
บริการอื่นๆ ที่สำคัญของ Controller ได้แก่ จัดการ Request,จัดการ Cache จัดการตัวช่วย (Helper Module) และจัดการ Session

0 ความคิดเห็น:

ขอบคุณนะครับ ที่แวะมาเยี่ยมกัน

ติดต่อผมได้ที่ en42chart@gmail.com หรือออนเอ็มคุยกันที่ en42chart@hotmail.com