MVC چیست؟ این سوال یکی از پرتکرارترین سوالات در دنیای برنامه نویسی است. زیرا زمانی که پا به دنیای برنامه نویسی میگذارید، قطعا اصطلاحات زیادی به گوش شما خواهد خورد که یکی از رایجترین آنها که در میان برنامه نویسان استفاده میشود، MVC است. بنابراین در این مطلب قصد داریم شما را با این اصلاح به صورت کامل و با زبانی ساده آشنا کنیم. پس اگر میخواهید بدانید MVC چیست و چه کاربردی در توسعه نرم افزارها دارد، در ادامه این مطلب همراه ما باشید.
(Model View Controller) MVC یک معماری برنامه نویسی است که نرم افزار را به سه بخش مجزا تقسیم میکند. این بخشها عبارت اند از Model برای ارتباط با پایگاه داده، View برای ایجاد یک رابط کاربری برای نمایش و تغییر در دادههای پایگاه داده و Controller برای پردازش درخواستهای کاربر.
به عنوان مثال فرض کنید در یک رستوران از منوی آنها سفارش یک پیتزا داده اید. گارسون سفارش شما را دریافت میکند. سپس به پیشخوان آشپزخانه رفته، و سفارش شما را به آنها میرساند. پس از آماده شدن غذا، گارسون غذا را از پیشخوان آشپزخانه به میز شما میرساند. در این مثال:
در واقع شما نقش کاربر درخواست کننده اطلاعات را دارید. گارسون به عنوان Controller وظیفه درخواست اطلاعات از آشپزخانه را به عنوان Model و ارسال اطلاعات مدل در قالب سفارش شما یا View را به عهده دارد. به زبان ساده تر:
حال که دیدید MVC چیست بگذارید تا به سراغ یک مثال واقعی برویم. فرض کنید کاربر آدرس https://7learn.com را در مرورگر خود وارد کرده است. در حالت بدون معماری، پس از فشار دکمه Enter یک Request یا درخواست از سمت کاربر به سمت سرور برای دریافت فایل مورد نظر (به عنوان مثال pizza.php) ارسال میشود. تمام عملیات اتصال به پایگاه داده برای دریافت اطلاعات لازم و همینطور پردازش آن ها، احتمالا در همان فایل یا در فایلهای دیگر در کنار و به صورت وابسته به هم انجام میشود.
اگر شما هم به موضوعات برنامه نویسی علاقهمندید و تمایل دارید که این حوزه علم کامپیوتر را یادبگیرید پیشنهاد میکنیم در دوره آموزش برنامه نویسی سون لرن شرکت کنید و از مشاوره رایگان مشاوران ما بهرهمند شوید.
در حالت [ltr]Request ،MVC[/ltr] پس از ارسال به سرور به Router یا مسیریاب برنامه تحویل داده میشود. Router هر درخواست را به Controller مربوط به خود ارسال میکند. Controller اطلاعاتی که لازم است از پایگاه داده گرفته شود از Model درخواست میکند. Model اطلاعات را از پایگاه داده دریافت کرده و به Controller ارسال میکند. در پایان Controller اطلاعات دریافت شده را به View چسبانده و برای نمایش به سمت کاربر میفرستد.
تصور کنید وبسایتی داریم که قرار است پس از دریافت شماره پیتزای مورد نظر از URL اطلاعات پیتزای متناسب با آن را از جدول pizza_table پایگاه داده دریافت کرده و در صفحه نمایش دهد. کد زیر این کار را با روش بدون MVC انجام میدهد:
<?php $index = $_GET['index']; getPizza($index); function getPizza($index) { global $connection; $pizza = $connection->get('pizza_table' , $index); print_r($pizza) } ?>
برنامه ابتدا کد یا شماره پیتزای مورد نظر را از URL دریافت میکند. سپس فانکشن getPizza در همین صفحه فراخوانی میشود. در فانکشن getPizza اطلاعات پیتزای درخواست شده در متغیر $pizza قرار میگیرد و پیتزا در صفحه نمایش داده میشود. در این حالت کدهای شما در هم تنیده هستند. این به آن معنی است که اگر تصمیم بگیرید ظاهر برنامه یا View را تغییر دهید مجبور به تغییر و بازنویسی کل برنامه هستید. همینطور اگر روش اتصال به پایگاه داده تغییر کند و یا حتی بخواهید روش جدیدی برای دریافت اطلاعات و پردازش آنها تعیین کنید!
پس از ارسال Request به Controller مناسب برای صفحه نمایش پیتزا، Controller اطلاعات پیتزا را از متد getPizza در Model در خواست میکند. سپس با فراخوانی تابع view که وظیفه نمایش فایل View مناسب و چسباندن اطلاعات دریافت شده از پایگاه داده به آن را دارد، نمایش پیتزا را از View درخواست میکند:
class Controller { public function getPizza($index) { $model = new Model(); $pizza = $model->getPizza($index); return view('pizza.php' , $pizza); } }
در قسمت Model پس از فراخوانی متد getPizza توسط Controller، اطلاعات پیتزا از جدول Pizza_table پایگاه داده دریافت شده و به Controller پاس داده میشود:
class Model { public function getPizza($index) { global $connection; return $connection->get('pizza_table' , $index); } }
تابع view در Controller پس از فراخوانی و دریافت متغیر پیتزای مورد نظر، آن را به فایل pizza.php ارسال کرده و نمایش میدهد:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <p> <?php print $pizza; ?> </p> </body> </html>
در این حالت، در صورتی که قصد داشته باشید view را تغییر دهید میتوانید به راحتی این کار را از طریق ایجاد تغییر در فایل pizza.php انجام دهید. ایجاد تغییر در روش پردازش اطلاعات پیتزا و درخواست از Model و همینطور طریقه دریافت اطلاعات از پایگاه داده در Model نیز به همان سادگی است.
در مجموع ممکن است الگوی MVC در ابتدا کمی پیچیده و مشکل به نظر برسد و ترجیح دهید بدون استفاده از این الگو پروژههای خود را پیش ببرید اما اگر قصد انجام پروژههای بزرگ که نیازمند کار تیمی هستند را دارید هرگز از این الگو غافل نشوید. زیرا همانطور که در بالا توضیح داده شد این الگو با جداسازی View ، Model و Control امکان کار جداگانه بر روی هر یک از بخشها را فراهم میکند.
به عنوان مثال متخصص UI میتواند به صورت مستقل بر روی ظاهر تمرکز و کار کند، بدون اینکه توجهی به مسائل منطقی و باگهای برنامه داشته باشد. از دیگر مزایای استفاده از الگوهای معماری میتوان به استفاده دوباره از کدها اشاره کرد. ما در مجموعه سون لرن در جلسه 27 دوره آموزش PHP به این موضوع پرداخته ایم و طراحی و پیاده سازی وبلاگ (CMS) با معماری MVC را به شما آموزش داده ایم.