MVC در PHP قسمت اول :: معرفی

شهریور ۱۳, ۱۳۹۲ توسط : سعید

سلام

امیدوارم که حالتون خوب باشه . از اینکه در آپدیت سایت تاخیر داریم عذرخواهی میکنم.بعد از این چند وقت به پیشنهاد یکی از دوستان تصمیم گرفتم در مورد MVC در php توضیح بدم.MVC موضوعیه که دو سه سالی توی ایران رونق بیشتری گرفته و به یکی از بحث های اول کاربران تبدیل شده.

توی این سری از مقالات ابتد به مفهوم معماری سه لایه MVC میپردازیم.این رو هم بگم که معماری سه لایه فقط MVC نیست و مدل دیگه این معماری MVP نام داره که الان باهاش هیچ کاری نداریم.

برای اینکه این سری از مقالات رو دنبال کنید بهتره که شیء گرایی رو در PHP مسلط باشید و یا حداقل با مفاهیم شیء گرایی آشنایی داشته باشید .

MVC چیست ؟

اولین سوالی که پیش میاد اینه که MVC چیه و چه کاربردی داره؟

MVC یک معماری سه لایه است که در سال ۱۹۷۰ ایجاد شد.این معماری ابتدا برای زبان smalltalk ایجاد شد. هدف از ایجاد این معماری این بود که قسمت کد نویسی یا منطق برنامه رو از قسمت طراحی اون جدا کنن. مزایایی که این کار در بر داشت این بود که نگهداری و تغییر در کدها در آینده بسیار راحت بود ، کدهایی که نوشته میشدن قابل استفاده مجدد بودن و مهمترین قابلیت این بود که یک طراح و یک برنامه نویس میتونستن روی یک پروژه در آن واحد کار کنن بدون اینکه اختلالی توی کار هم به وجود بیارن.

با فراگیر تر شدن وب برنامه نویسان وب تصمیم به استفاده از این معماری در طراحی و برنامه نویسی وب کردند.

معماری سه لایه از سه قسمت Model , View , Controller تشکیل میشه. که در زیر به شرح مختصری در مورد هر کدوم از لایه ها میپردازیم.

لایه Model

” این لایه برای ارتباط با دیتابیس استفاده میشه. این لایه باید اجازه دسترسی ، تغییر یا اضافه کردن داده ها رو بده . این لایه در واقع یک پل بین لایه View و لایه Controller ـه. یکی از مهمترین خاصیت های این لایه اینه که ” نابیناست ” به این معنی که مدل نمیدونه وقتی که داد هارو به View یا کنترلر ارسال کرد قرار چه اتفاقی براشون بیافته و به دنبال پاسخی از Controller یا View نیست.تنها هدفش اینه که داده هارو ذخیره کنه یا زمانی که درخواستی از بقیه لایه ها ارسال شد تغییرشون بده. ” (منبع)

در خیلی از جاها گفته شده که لایه مدل نباید با لایه ویو ارتباط داشته و فقط و فقط باید با لایه کنترلر در ارتباط باشه.ولی چیزی که در مورد این لایه مهمه اینه که این لایه مسئول ارتباط با دیتابیسه . حذف ، اضافه و ویرایش داده های دیتابیس توی این لایه انجام میشه.

لایه View

 این لایه جاییه که داده ها از مدل گرفته میشن و به صورت خروجی به کاربر نمایش داده میشن.در برنامه های وب این لایه جاییه که کدهای HTML ساخته و نمایش داده میشن.توی این لایه ارتباط با کاربر انجام میشه و با کنترلر درخواست کاربر رو انجام میده.به عنوان مثال یک button رو درنظر بگیرید که وقتی روش کلیک شد یکی از action های کنترلر رو صدا میزنه.

یک سری تصورات غلط در مورد این لایه در برنامه نویسان وب وجود داره . یکی از این تصورات اشتباه اینه که لایه View نباید هیچ ارتباطی با لایه Model داشته باشه و باید همه اطلاعات رو از لایه Controller بگیره.مثلا در فریم ورک Cakephp و اکثر فریم ورکهای PHP این اشتباه وجود داره. در واقع این تفکر نادیده گرفتن کامل تئوریه پشت معماری سه لایه است.

قسمت بالا از Callum Hopkins  بود که در سایت sitepoint  مقاله معماری سه لایه رو نوشته بود. دراین مقاله ذکر شده که لایه مدل و ویو میتونن باهم ارتباط داشته باشن و درواقع لایه Model یک پل بین لایه ویو و کنترلره . در همین سایت و در این مقاله ذکر شده که :

این نکته خیلی مهمه که توجه داشته باشید برای پیاده سازی درست معماری MVC لایه View نباید با لایه Model ارتباط داشته باشه و منطق برنامه باید فقط در لایه Controller انجام بشه.

از اونجا که بین علما اختلاف نظر وجود داره تحقیق بشتری کردم و در این مقاله   به نقل از گروه Gang of four در مورد معماری MVC اینطور نوشته :

 MVC شامل مدل ها و ویو هاییه که میتونن با هم ارتباط داشته باشن. یک View باید مطمئن باشه که ظاهری که الان میخواد به خودش بگیره باید حالتی از model باشه.هر وقت که دیتا در لایه model تغییر کرد یک پیغام به ویو میفرسته که بسته به اون تغییر کنه.

بازم چیزی که در مورد این لایه مهمه اینه که این لایه وظیفه نمایش داده ها و گرفتن و ارسال اون رو به لایه Controller داره.ما هم زیاد سخت نمیگیریم و هر طوری که راحتیم فریم ورک خودمون رو مینویسم چون قرار نیست کسی به خاطر اینکه آیا این دولایه باید باهم ارتباط داشته باشن یا نه ، مارو مجازات کنه.

لایه Controller

این لایه منطق برنامه رو کنترل میکنه.این لایه ورودی ها رو میگیره و درخواست های کاربر رو انجام میده ، اگر نیاز باشه از دیتابیس مقادیری برای کاربر ارسال بشه رو از لایه Model میگیره و به لایه View ارسال میکنه.

به هر حال در باره کارکرد این سه لایه باهم نقل قول های زیادی شده که هر کی هرجور دلش خواسته باهاش بخورد کرده.شما با هر کدوم راحت ترید کار کنید ولی اینو بدونید که اصل موضوع چیه.

خب این سه لایه رو به شکل مختصر توضیح دادیم بریم ببنیم این معماری چطوری کار میکنه.

ایده این معماری بسیار ساده است.شما یک فایل اصلی دارین مثلا index.php که تمام درخواست های کاربر به اون فرستاده میشه.بعد از اینکه درخواست رو ازکاربر دریافت کرد کلاس ها و توابع مورد نظر رو اجرا میکنه و View مورد نظر رو به کاربر نمایش میده.

برای درخواست زیر :

index.php?page=user&action=delete&param=2,3,5

مثلا این کدها اجرا میشن :

if(isset($_GET['page'])){
	$page = $_GET['page'];
}else
{
	$page = 'index';
}

include "lib/$page.php";
if(isset($_GET['action'])){
	$action = $_GET['action'];
}else{
	$action = 'default';
}

if(isset($_GET['param'])){
	$param = explode(',',$_GET['param']);
}else{
	$param = array();
}
$obj = new $page();
$obj->$action($param);

کدهای بالا مستقیم در فایل index.php اجرا میشن. اگه میبینید سرو ته نداره نگران نباشید این فقط یک مثال بود.

توی این مقاله سعی میکنم تا با معماری سه لایه که در فریم ورکهای PHP مثل : Zend , cakePHP , Yii , Laravel و … پیاده سازی شده توضیح بدم و در کنارش سعی میکنیم باهم یک فریم ورک ساده رو پیاده سازی کنیم تا با نحوه کار این فریم ورکها آشنا بشیم و اگر دوست داشتید بعدا از یکیشون استفاده کنید !!

به امید خدا توی قسمتهای بعدی در مورد پیاده سازی یک فریم ورک بحث میکنیم

موفق باشید

بازدید : ۲۳۰۲۸

شهریور ۱۴, ۱۳۹۲ @ ۱۲:۱۰ ب.ظ

ضمن تشکر از این مقاله خوب ، مشتقانه منتظر ادامه این مبحث کاربردی هستیم. ارادتمند

پاسخ دادن
شهریور ۱۴, ۱۳۹۲ @ ۳:۳۰ ب.ظ

سلام،
دمت گرم … منتظر قسمت های بعدیم 🙂

پاسخ دادن
شهریور ۱۴, ۱۳۹۲ @ ۵:۵۹ ب.ظ

سلام ، مقاله ی خوبی بود بی صبرانه منتظر قسمت های بعدی هستیم.ممون

پاسخ دادن
شهریور ۱۴, ۱۳۹۲ @ ۷:۵۴ ب.ظ

سلام، خسته نباشید عالی بود

پاسخ دادن
شهریور ۱۵, ۱۳۹۲ @ ۱:۳۲ ب.ظ

سلام چرا یه دکمه Donate! توی سایت قرار نمیدین.

پاسخ دادن
    سعید
    شهریور ۱۶, ۱۳۹۲ @ ۱:۳۷ ب.ظ

    همین حرف شما و نظرات بقیه دوستان از ۱۰۰ تا Donate برای من ارزشش بیشتره.

    پاسخ دادن
شهریور ۲۹, ۱۳۹۲ @ ۶:۰۳ ب.ظ

سلام و خسته نباشید ، دست شما درد نکنه ، شدیدا منتظر ادامه پست ها هستم

پاسخ دادن
آبان ۲۷, ۱۳۹۲ @ ۱۱:۳۷ ب.ظ

خیلی خوبه کار با فریم ورک yii رو هم لطفا آموزش بدین. مرسی عالی بود

پاسخ دادن
آذر ۱۵, ۱۳۹۲ @ ۳:۲۴ ب.ظ

سلام
توی برخی قسمتها توضیحات اشتباهه و همچین تصویر هم مورد داره لطفا اصلاح کنید

پاسخ دادن
    سعید
    دی ۲, ۱۳۹۲ @ ۱:۰۷ ب.ظ

    سلام
    ممنون میشم جاهایی که اشتباه داره رو بگید تا بررسی کنم.
    موفق باشید

    پاسخ دادن
دی ۶, ۱۳۹۲ @ ۱۱:۲۹ ق.ظ

دستتون درد نکنه!

پاسخ دادن
اردیبهشت ۱۷, ۱۳۹۳ @ ۱۱:۴۶ ب.ظ

سلام. مقاله بسیار عالی و روانی بود. خسته نباشید.

پاسخ دادن
احسان
خرداد ۶, ۱۳۹۳ @ ۱۰:۰۱ ق.ظ

مرسی

مرسی

مرسی

مرسی

خدا قوت.لطفا نحوه استفاده از این فریم ورک ها رو هم آموزش بدید. در ضمن اگه برای سایت یه تقویم آموزشی بگزارید که چه مطالبی رو توچه تاریخی میزارید سایتتون خیلی بهتر می شه.

پاسخ دادن
روزبه
تیر ۱۹, ۱۳۹۳ @ ۱۱:۴۳ ب.ظ

سلام خیلی عالی بود تمام ابهاماتی که تو زهنم بود رو برطرف کرد
مرسیییی

پاسخ دادن
مصطفی
فروردین ۱۵, ۱۳۹۴ @ ۱:۳۰ ق.ظ

با سلام
یک سوال برام پیش اومده و اون اینه که ما اگر از یک فریم ورک بخواهیم توی طراحی سایتمون استفاده کنیم،لازم هست که موقع آپلود کل فایل های مربوط به اون فریم ورک رو نیز آپلود کنیم.عمدتا فریم ورک ها چه مزایایی دارند./
ممنون

پاسخ دادن
کامبیز
فروردین ۱۸, ۱۳۹۵ @ ۱۱:۰۴ ق.ظ

ممنون از توضیحات خوبتون

پاسخ دادن
وحید
خرداد ۲۴, ۱۳۹۵ @ ۱:۳۸ ب.ظ

دایرکشن نوشته ها با موبایل مشکل داره متاسفانه.

پاسخ دادن

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


*