MVC چیست؟ این سوال یکی از پرتکرارترین سوالات در دنیای برنامه نویسی است. زیرا زمانی که پا به دنیای برنامه نویسی میگذارید، قطعا اصطلاحات زیادی به گوش شما خواهد خورد که یکی از رایجترین آنها که در میان برنامه نویسان استفاده میشود، MVC است. بنابراین در این مطلب قصد داریم شما را با این اصلاح به صورت کامل و با زبانی ساده آشنا کنیم. پس اگر میخواهید بدانید MVC چیست و چه کاربردی در توسعه نرم افزارها دارد، در ادامه این مطلب همراه ما باشید.
MVC چیست؟
(Model View Controller) MVC یک معماری برنامه نویسی است که نرم افزار را به سه بخش مجزا تقسیم میکند. این بخشها عبارت اند از Model برای ارتباط با پایگاه داده، View برای ایجاد یک رابط کاربری برای نمایش و تغییر در دادههای پایگاه داده و Controller برای پردازش درخواستهای کاربر.
به عنوان مثال فرض کنید در یک رستوران از منوی آنها سفارش یک پیتزا داده اید. گارسون سفارش شما را دریافت میکند. سپس به پیشخوان آشپزخانه رفته، و سفارش شما را به آنها میرساند. پس از آماده شدن غذا، گارسون غذا را از پیشخوان آشپزخانه به میز شما میرساند. در این مثال:
- آشپزخانه به میز شما وابسته نیست.
- آشپزخانه به گارسن وابسته نیست.
- گارسن از طریق دریافت سفارش تمام غذاهای منو و ارسال آنها به میز شما آگاه است.
- شما از روش آماده سازی غذا اطلاع ندارید.
در واقع شما نقش کاربر درخواست کننده اطلاعات را دارید. گارسون به عنوان Controller وظیفه درخواست اطلاعات از آشپزخانه را به عنوان Model و ارسال اطلاعات مدل در قالب سفارش شما یا View را به عهده دارد. به زبان ساده تر:
- شما یک User هستید.
- گارسون Controller است.
- آشپزخانه Model است.
- غذایی که سفارش داده اید View است.
مثالی از MVC
حال که دیدید MVC چیست بگذارید تا به سراغ یک مثال واقعی برویم. فرض کنید کاربر آدرس https://7learn.com را در مرورگر خود وارد کرده است. در حالت بدون معماری، پس از فشار دکمه Enter یک Request یا درخواست از سمت کاربر به سمت سرور برای دریافت فایل مورد نظر (به عنوان مثال pizza.php) ارسال میشود. تمام عملیات اتصال به پایگاه داده برای دریافت اطلاعات لازم و همینطور پردازش آن ها، احتمالا در همان فایل یا در فایلهای دیگر در کنار و به صورت وابسته به هم انجام میشود.
در حالت Request ،MVC پس از ارسال به سرور به Router یا مسیریاب برنامه تحویل داده میشود. Router هر درخواست را به Controller مربوط به خود ارسال میکند. Controller اطلاعاتی که لازم است از پایگاه داده گرفته شود از Model درخواست میکند. Model اطلاعات را از پایگاه داده دریافت کرده و به Controller ارسال میکند. در پایان Controller اطلاعات دریافت شده را به View چسبانده و برای نمایش به سمت کاربر میفرستد.
حالت بدون MVC
تصور کنید وبسایتی داریم که قرار است پس از دریافت شماره پیتزای مورد نظر از 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 را تغییر دهید مجبور به تغییر و بازنویسی کل برنامه هستید. همینطور اگر روش اتصال به پایگاه داده تغییر کند و یا حتی بخواهید روش جدیدی برای دریافت اطلاعات و پردازش آنها تعیین کنید!
حالت MVC
پس از ارسال 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 را به شما آموزش داده ایم.
چه امتیازی به این مقاله می دید؟
1 2 3 4 5
نویسنده