الگوی Model-View-Control (MVC) ، که در ابتدا در اواخر دهه 1970 تدوین شد ، یک الگوی طراحی یا به عبارتی یک معماری نرم افزاری است که بر اساس جدا نگه داشتن داده ها و بخش های مختلف یک نرم افزار بر پایه روش های تعامل بخش ها و داده ها با یکدیگر ساخته شده است. از نظر تئوری ، یک سیستم MVC که به خوبی توسعه یافته باید بتواند به یک توسعه دهنده وب چه Front-End چه Back-End اجازه دهد تا بر روی همان سیستم کار کنند بدون اینکه مداخله ای در اشتراک یا ویرایش فایل هایی داشته باشند که هر دو طرف روی آن کار می کنند ، ایجاد شود. حتی اگر MVC در ابتدا برای محاسبات شخصی طراحی شده باشد اما به دلیل جلوگیری از درهم ریختگی کدها ( Spaghetti Code ) و بر بطرف کردن دغدغه قابل استفاده بدون مجدد کدها ( Reusability) ، توسط توسعه دهندگان بسیار محبوب شده است. این الگو توسعه سیستم های ماژولار محور را امکان پذیر کرده و به توسعه دهندگان اجازه می دهد تا به سرعت قابلیت ها را به روز ، اضافه یا حتی حذف کنند.
مزایای الگوی MVC
کاهش انعطاف پذیری کدها
قابلیت استفاده مجدد از کدها
مدیریت آسان کدها و پروژه
خوانایی بالاتر کدها
در ادامه توضیحات الگوی MVC را مرور خواهیم کرد و یک تعریف کلی و در عین حال ساده از آن خواهیم داشت این توضیحات قطعا برای هر کسانی که قبلاً با MVC کد نویسی نکرده اند و یا کسانی که می خواهند مهارتهای قبلی خود را در توسعه نرم افزار افزایش دهند مفید خواهد بود.
درک الگوی MVC
الگوی MVC از سه بخش اصلی تشکیل شده است : Model ، View و Controller کاربران یک نرم افزار بر پایه اگوی MVC بخش View یا همان رابط کاربری یک نرم افزار ( وب سایت ) را می بینند و از طریق بخش Controller با نرم افزار ارتباط و تعامل برقرا می کنند. بطور کلی بخش Controller پل ارتباطی نرم افزار می باشد که باعث ایجاد رابطه بین بخش View بخش Model می شود و از دسترسی و ارتباط مستقیم آنها با یکدیگر جلوگیری می کند.حال با این تعریف ساده می پردازیم به معرفی جداگانه هر بخش در الگوی MVC
Model
بطور کلی کار Model ارتباط به دیتابیس است و توسط فرامینی که از controller دریافت می کند به تجزیه و تحلیل نوع درخواست ها پرداخته و تمام عملیاتی که مرتبط با ذخیر,بروزرسانی,حذف و یا فراخوانی دادها از دیتابیس است می پردازد و نتیجه را در اختیار Controller قرار می دهد یکی از جنبه های مهم Model این است که از نظر فنی به اصطلاح کور ( نابینا ) است به بیان ساده تر Model ها هیچ ارتباط و اطلاعی از آنچه برای داده ها هنگام انتقال به اجزای View یا Controller اتفاق می افتد ندارد. نه بخشهای دیگر را فرا خوانی می کنند و نه پاسخی می خواهد. تنها هدف آن پردازش داده ها و آماده سازی آنها برای انتقال به قسمت های دیگر نرم افرار است. با این حال ، مدل به سادگی نمی تواند به عنوان یک پایگاه داده یا دروازه ای به سیستم دیگری که فرآیند داده را کنترل می کند ، خلاصه شود. مدل باید به عنوان یک دروازه بان برای داده ها عمل کند ، هیچ سوالی نپرسد اما همه درخواست هایی را که سر راه آن قرار دارد بپذیرد. Model که اغلب پیچیده ترین قسمت نرم افراهای بر پایه الگوی MVC است ، قلب کل سیستم است زیرا بدون آن هیچ ارتباطی بین Controller و View وجود نخواهد داشت.
View
View جایی است که داده های درخواست شده از مدل مشاهده شده و خروجی نهایی آن تعیین می شود. به طور سنتی در برنامه های وب که با استفاده از MVC ساخته می شوند ، View بخشی از سیستم است که وظیفه آن نمایش رابط کاربری و به زبان ساده تر همان کدهای CSS,HTML است. بطور کلی کابران یک نرم افزار از طریق مشاهده View ترقیب به واکنش می شوند. مثلا کاربر توسط یک دکمه مثل ثبت نام در سایت که در بخش View قرار داده شده کلیک می کند که باعث شروع عملیاتی در Controller می باشد. ( ارسال اطلاعات فرم ثبت نام به controller ) "توجه به این نکته بسیار مهم است که برای اعمال صحیح معماری MVC ، نباید هیچ تعاملی بین Model و View بطور مستقیم وجود داشته باشد و تمام منطق برنامه باید توسط بخش Controller اداره می شود"
Controller
وظیفه Controller رسیدگی به درخواست ها و یا داده هایی است که کاربر وارد و یا ارسال می کند. حیات Controller به کاربر وابسته است . بدون وجود کاربر و بطبع درخواست او Controller هیچ معنا و هدفی ندارد. به بیان ساده تر وظیفه Controller جمع آوری اطلاعات از قبیل گوش دادن به درخواست های کاربر و نشان دادن واکنش مناسب است و در صورت نیاز انتقال آنها به Model برای پردازش داده ها و درخواست ها می باشد ، و منطقی غیر این ندارد. لازم به یادآوری است که Controller فقط وظایفی را انجام انجام می دهد که کاربر ابتدا در View درخواست آن را داشته و هر عملکرد Controller یک محرک است که با تعامل کاربر با View تنظیم و هدف گذاری شده است.
جمع بندی با یک مثال ساده که ما بارها در یک نرم افزا با آن سروکار داشته ایم , ثبت نام در یک نرم افزار
کاربر با پر کردن فرم ثبت نام و فشردن دکمه ثبت نام یه در خواست برای عضویت در سایت ارسال می کند این درخواست توسط controller مربوطه شنیده شده و اطلاعات کاربر را به Model مرتبط با ثبت نام کاربر منتقل کرده و Model فرایند ثبت نام را انجام داده و در صورت نیاز نتیجه عمل ثبت نام را در اختیار Controller قرار داده و سپس Controller نتیجه را به View منتقل می کند که نتیجه آن نمایش پیام ثبت نام شما با موفقیت صورت گرفت برای کاربر می باشد.
حمزه همتی
دانشجوی : دوره تکنیکال و پروژه محور PHP OOP MVC
سلام و عرض ادب خدمت استاد صالحی عزیز،عرض خاصی ندارم فقط راجع به تعویق انتشار دوره ها یکم ضعیف عمل شد گه دلایلشم توی دوره ها بیان کردید،به هز حال ب نظر من اگه این مشکل رفع بسه فک کنم بازخورد بهتری داشته باشه با اینکه من خودم به شخصا راضی یودم از دوره.موفق بتشید استاد عزززیزز
محمد رحمتی
دانشجوی : دوره تکنیکال و پروژه محور PHP OOP MVC
عرض سلام و ادب خدمت استاد عزیز . دوره بسیار عالی با سرفصلهای کامل رو ارائه کردید. برای شما آرزوی موفقیت و سلامتی دارم