عضویت در خبرنامه

با عضویت در خبرنامه از آخرین مقالات اطلس ساختار داده باخبر شوید

عضویت
arrow_backward بازگشت

MVC چیست؟ (قسمت اول)

الگوی معماری نرم افزار MVC از این تفکر الهام گرفته که ارائه اطلاعات باید از دستکاری اطلاعات جدا باشد. در تئوری یک سیستم نرم افزاری  MVC باید فضایی فراهم کند که برنامه نویس قرانت اند و برنامه نویس بک اند بتوانند بدون تداخل با هم روی پروژه کار کنند.

ام وی سی در ابتدا برای برنامه های دسکتاپ ابداع شد، اما به سرعت وارد دنیای برنامه نویسان وب شد چون این معماری باعث میشد تقسیم وظایف انجام شود و به کدها قابلیت استفاده مجدد میداد(reusable code). این الگو برای کار با سیستم های ماژولار بسیار مفید بود و به برنامه نویسان اجازه میداد به سرعت عملکرد برنامه های خود را به روز رسانی، اضافه و یا کم کنند.
در این مقاله به سراغ مقدمات MVC میروم، اصول اولیه را توضیح میدهم و یک مثال ساده در مورد MVC براتون میزنم. این مقاله برای همه برنامه نویسانی که چیزی از ام وی سی نمی دانند و یا میخواهند دانش خودشون رو در مورد این معماری افزایش بدند بسیار مفید خواهد بود.

مفهوم MVC

اسم این الگو برگرفته از حروف ابتدایی سه کلمه Model ، View و Controller است. شمای کلی الگوی MVC به خوبی با شکل زیر قابل فهم است.


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

Model

مدل اسمیه که به محل دائمی نگهداری اطلاعات در سیستم MVC داده میشه. مدل باید طوری ایجاد بشه که دسترسی برای خواندن، جمع آوری و نوشتن اطلاعات رو فراهم کنه. مدل پلی هست میان View و Controller .
نکته قابل توجه در مورد مدل اینه که به لحاظ تکنیکی نابیناست! منظورم اینه که مدل به خودی خود هیچ اطلاعی در مورد سرنوشت اطلاعاتی که برای View میفرسته و یا از Controller میگیره نداره. مدل هیچ درخواستی از قسمت های دیگه نداره و تنها وظیفه ش اینه که اطلاعات رو به محل نگهداری دائمی اطلاعات منتقل کنه و یا اطلاعات درخواستی دیگر قسمت ها رو براشون آماده کنه و بفرسته.
 دقت کنید که مدل به معنای بانک اطلاعاتی (Data Base) و یا یک دروازه به سیستم پردازش اطلاعات نیست. مدل را باید به عنوان یک مسئول اطلاعات در نظر گرفت که چیزی نمیپرسه و فقط به درخواست ها پاسخ میده. مدل پیچیده ترین قسمت سیستم MVC  هست. ضمنا از Model به عنوان راس هرم سیستم MVC یاد میشه چون بدون مدل هیچ ارتباطی میان اجزاء Controller و View وجود نخواهد داشت.

View

View جاییه که اطلاعات از مدل درخواست میشه، بررسی میشه و در نهایت خروجی نهایی تعیین میشه. در وب سایت هایی که بر اساس سیستم MVC ساخته میشن، View همون قسمتیه که تگ های HTML ایجاد و نمایش داده میشه. همچنین View همون جاییه که براساس درخواست کاربر وارد تعامل با Controller میشه. یه مثال ساده از این درخواست میتونه یه دکمه باشه که وقتی کاربر روش کلیک میکنه یه عمل در Controller فعال میشه.
برنامه نویسانی که وب سایتشون رو بر اساس مدل MVC میسازن توی این قسمت ممکنه دچار سوء برداشت بشن. برای مثال خیلیا اشتباها فکر میکنن که View هیچ ارتباطی با Model نداره و تمامی اطلاعاتی که View نمایش میده از Controller میاد در صورتی که این تصور از سیستم MVC کاملا اشتباهه.
از طرف دیگه تصور از View  به عنوان یک فایل قالب (Template File) کاملا اشتباهه، از نظر برنامه نویس معروف Tom Butler این یه اشتباه خیلی متداوله که تعداد زیادی از برنامه نویسان دچارش میشن. View اهمیتش خیلی بیشتر از یه قالب صرفه اگرچه خیلی از فریم ورک ها مدرن قسمت View رو اینقدر بی اهمیت میکنن که هیچ برنامه نویسی اصلا دقت نمیکنه که این معماری اشتباهه و فریم ورک قسمت View رو اشتباه طراحی کرده.
ضمنا دقت کنید که قسمت View از Controller اطلاعات دریافت نمیکنه. همونطور که در قسمت قبل توضیح دادم هیچ ارتباطی بین View و Controller وجود ندارد که Model توش نقش ایفا نکنه. به عبارت بهتر هر وقت بین ویو و کنترلر ارتباط برقرار بشه، ویو اطلاعاتی رو میگیره که منشاء اون Model است.

Controller

سومین ضلع مثلث مدل ام وی سی، Controller است. وظیفه کنترلر، رسیدگی به اطلاعاتیه که کاربر وارد میکنه و بروزرسانی مدل بر اساس این اطلاعاته. حیات Controller به کاربر وابسته ست، بدون تعامل کاربر، Controller هیچ سودی نداره. در مدل MVC کنترلر تنها قسمتیه که میتونه با کاربر در تعامل باشه.
کنترلر رو میتونیم به سادگی جمع کننده اطلاعات کاربر و فرستنده اون به Model برای ذخیره بدونیم. Controller حاوی هیچ منطقی (Logic) نیست غیر از منطقی که برای گرفتن اطلاعات از کاربر لازمه. کنترلر بصورت یه راه یه طرفه اطلاعاته که در هر مرحله از انتقال اطلاعات handshake و signoff مشخصی داره که بین این دو فقط و فقط با یک View و یک Model در ارتباطه.
در نظر داشته باشید که فقط وقتی Controller کاری برای انجام دادن داره که کاربر قبلش با View در ارتباط بوده باشه و تابع خاصی از Controller رو فعال کنه. بیشترین اشتباه برنامه نویسان در مورد کنترلر اینه که اون را با یک درگاه اشتباه میگیرن و توابع View رو به Controller منتقل میکنن.(دقیقا این اشتباه رو همون برنامه نویسانی میکنن که View رو با یه فایل قالب اشتباه میگیرن)
ضمنا ممکنه اشتباها توابعی داخل Controller قرار داده بشه که این توابع صرفا وظیفه خرد کردن، منتقل کردن و پردازش اطلاعات رسیده از Model رو به View انجام میدن در حالیکه در الگوی MVC این ارتباط باید میان Model و View وجود داشته باشه و Controller نباید نقشی ایفا کنه.

MVC در PHP

وب سایت ها و وب اپلیکیشن ها، سیستم هایی هستند که کاربرد MVC در اونها روز به روز در حال افزایشه. در این قسمت پیاده سازی MVC رو با یه مثال براتون توضیح میدهم:

ما پروژه مون رو با ایجاد یه سری کلاس اولیه برای هر 3 قسمت Model ، View و Controller شروع کردیم. حالا بین اونها ارتباط برقرار میکنیم:

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

حالا برای اینکه کارکرد Controller رو نشون بدم، مثالم رو توسعه میدم و کمی تعامل با کاربر به اپلیکیشنم اضافه میکنم:

حالا به اپلیکیشن چند کارکرد ساده اضافه کردیم. ارتباط میان سه قسمت MVC حالا این شکلیه: 

وقتی کد رو اجرا کنید میبینید که هربار دکمه رو کلیک کنید، متن عوض میشه.

خلاصه

در این مقاله اصول اولیه الگوی MVC رو توضیح دادم و یک مثال خیلی ساده برای روشن شدن نحوه پیاده سازی این معماری نوشتم. اما خیلی جزئیات و وجه های مهمی از MVC مونده که باید بدونید.
توی قسمت دوم این مقاله نکاتی که لازمه از MVC بدونید تا بتونید به خوبی اون رو موقع ساختن وب سایت پیاده سازی کنید براتون توضیح میدم. 

ادامه در قسمت دوم

0 دیدگاه