Model View Controller (MVC) یک الگوی معماری است، که یک برنامه را به سه بخش اصلی و منطقی تفکیک میکند:
مدل، نما و کنترل کننده.
هر یک از این قسمت ها برای مدیریت جنبه های خاصی از توسعه یک برنامه بوجود آمده اند.
MVC یکی از پر کاربردترین فریمورک های توسعه وب با استانداردهای صنعتی برای ایجاد پروژه های مقیاس پذیر و قابل توسعه است.
مفهوم معماری MVC چیست؟ وچگونه باید آن را درک کنیم؟
امروزه وب سایت ها به یکسری از ویژگی ها میل دارند که می توان از آن ها تعامل با کاربر، پویایی و یا ارائه خدمات با نوعی عملکرد بخصوص نام برد.
آنها می توانند چیزی بیش از یک صفحه ثابت (استاتیک) HTML و CSS باشند، پس در اینجا نیاز دارند از الگوی معماری Model View Controller (MVC) استفاده کنند.
تعامل با کاربر این امکان را بوجود می آورد که موارد متعددی از خدمات که تنها با یک بار بارگذاری صفحه انجام شده است را سازماندهی کند.
به همین دلیل است که در توسعه وب مدرن، درک چگونگی ایجاد صفحات پویا و داینامیک مهم است، شاید دلیل اصلی آن آشنایی با الگوی معماری MVC باشد.
اگر یک مبتدی در توسعه وب هستید، کلماتی مانند “الگوی معماری” ممکن است بسیار پیچیده و انتزاعی به نظر برسند، اما ایده کلی MVC در واقع بسیار قابل درک است.
من تمام تلاش خود را خواهم کرد تا در این مقاله توضیحاتی را درباره مفهوم معماری MVC ارائه دهم.
آیا درک مفهوم معماری MVC مهم است؟
در ذهن من، پاسخ این سوال مثبت است.
درک مفهوم معماری MVC مهم است زیرا این یک ساختار اساسی است که اکثر برنامه های وب بر اساس آن ساخته شدهاند.
همین امر در مورد برنامه های تلفن همراه و برنامه های دسک تاپ نیز صادق است.
تغییرات زیادی در مورد ایده اصلی MVC وجود دارد، این ایده اولیه حدود سال ۱۹۷۸ در Xerox PARC توسط Trygve Reenskaug ایجاد شد.
هدف این بود که به کاربر کمک نهایی کند تا یک سیستم رایانه ای اساسی را به روشی بصری و قابل درک کنترل کند.
MVC به کاربر امکان تعامل با رابط کاربری(UI) را می دهد، این امکان دستکاری و کنترل سیستم را هم نیز فراهم می کند.
مفهوم سطح بالا
بدون استفاده از کلمات تخصصی، اکنون ایده اصلی مفهوم معماری MVC را از طریق یک مورد ساده برای شما توضیح خواهم داد.
تصور کنید که شما در یک ساندویچ فروشی هستید، به پیشخوان می روید و منو را نگاه می کنید.
شما تصمیم می گیرید که یک ساندویچ بوقلمون را می خواهید(در واقع می توانید از قبل، سفارش خود را تصور کرده باشید)
بنابراین شما سفارش خود را به صندوق دار یا گارسون میگویید.
گارسون هنگام سفارش ساندویچ بوقلمون دقیقاً می فهمد شما چه چیزی را می خواهید
او به سمت محل تولید ساندویچ می رود و به افراد حاضر در آن قسمت می گوید که برای انجام دادن سفارش شما باید چه مواردی را بدانند.
تیم ساندویچ سازی منابع بسیاری در اختیار دارند. ژامبون، بوقلمون، ماهی تن، سالاد و پنیر همه می توانند در ساندویچ شما بروند.
ولی آنها فقط مواد مورد نیاز سفارش شما را گرفته و آنها را درون ساندویچ بوقلمونی که شما سفارش داده اید مونتاژ می کنند.
بعد از کامل شدن ساندویچ، گارسون آن را به شما تحویل می دهد. اکنون ساندویچ بوقلمون مورد نظر خود را دارید.
حال توجه کنیم :
در مثال قبلی، سه بخش مجزا وجود داشت که هرکدام نمایانگر یکی از بخش های ما در الگوی معماری MVC می باشد:
گارسون—>Controller
ایستگاه ساخت ساندویچ—>Model
ساندویچ تمام شده ای که در پایان دریافت کردید—>View
توضیح جریان فعالیت ها
وقتی ساندویچ خود را سفارش دادید، شما یک سفارش مخصوص(ساندویچ بوقلمون) انتظار داشتید.
و در نهایت نتیجه شد :
ساندویچ بوقلمون
این همان چیزی است که وب سایتها برای سرویس دهی و دادن خدمات از آن استفاده می کنند.
به عنوان مثال، در فیس بوک می توانید دکمه “دوستان” را فشار دهید تا لیستی از دوستان خود را ببینید.
شما انتظار دارید لیست دوستانتان ظاهر شود(نه چیز دیگر).
شما می توانید این را در ذهن خود تصور کنید:
هنگامی که دکمه “دوستان” را فشار می دهید، از سرورهای فیس بوک درخواستی می کنید.
درخواست شما این است که لیست دوستان شما را به نمایش درآورند، دقیقاً مانند درخواست ساندویچ خود به گارسون (Controller).
درخواست شما از طریق Controller به سرورهای Facebook می رسد و به Model آنها برخورد می کند، که سعی در حل آن دارد.
سپس Model فقط دوستان شما را از یک پایگاه داده(Database) جذب می کند، دقیقاً مانند ساندویچ ساز که فقط مواد تشکیل دهنده ساندویچ بوقلمون را استفاده می کند.
این منابع (داده های لیست دوستان شما) برای پاسخگویی جمع می شوند.
این مورد شبیه به روش سیستم ساندویچ ساز است که همه مواد را در یک ساندویچ تمام شده مونتاژ می کند. (پردازش اطلاعات توسط خود مادل انجام میشود.)
این لیست دوستان سپس برای مصرف برای شما ارسال می شود، مانند تحویل ساندویچ توسط گارسون در پایان سفارش شما(View).
در واقع میتوانیم به صورت خلاصه بیان کنیم که :
گارسون کنترل کننده است:
او تمام ترکیبات احتمالی ساندویچ هایی را که می توانید سفارش دهید می داند.
او اطلاعات شما را جمع می کند و سفارشی را برای حل و فصل ارسال می کند.
سازندگان ساندویچ مدل هایی هستند:
آنها می دانند برای مونتاژ ساندویچی که شما سفارش داده اید، چه مواردی لازم است.
ساندویچ منظره یا نما است:
این “چیزی” است که کاربر نهایی سرانجام دریافت می کند.
استفاده از الگوی معماری MVC
کنترل کننده (Controller) :
کنترل کننده درخواست های ورودی را کنترل می کند.
در الگوی معماری MVC (یا همان وب سایت) این مورد می تواند همان URL (آدرس بار) خاص شما باشد.
که با توجه به عملکرد شما (مثل فشردن دکمه دوستان) در وبسایت، درخواست شما را ترسیم می کند.
مدل (Model) :
مدل ها داده های جمع آوری شده برای شما را در back end سازماندهی می کنند.
چشم انداز یا نما (View) :
این یک قالب HTML است که پس از ارسال و پردازش درخواست شما بازگردانده می شود.
اگر درخواست موفقیت آمیز باشد، باید یک صفحه (دوستان خود) را دریافت کنید.
در غیر این صورت، ممکن است صفحه ۴۰۴ (یافت نشد) را دریافت کنید.
نتیجه
هنگام تعامل با یک سیستم، شما معمولا قادر به چهار عمل ایجاد (Create)، بازیابی (Retreive)، بروزرسانی (Update) و حذف (Delete)
اشیا یا داده ها در پایگاه داده اصلی هستید، که این مورد غالباً به صورت «CRUD» مختصر می شود.
من در اینجا توضیح ندادم که چگونه یک کاربر میتواند دادههای موجود در پایگاه داده را «CRUD» کند.
معمولاً شما میتوانید مواردی را در یک وب سایت اضافه، بروز و یا حذف کنید.
این عملکردها تقریباً مشابه توضیحات بالا است، فقط تفاوتشان در این است که نوع عملکرد داده های شما «CRUD»، وابسته به نحوه درخواست شما از کنترل کننده است.
به مفهومی ساده تر ممکنه شما قصد تغییراتی در ساندویچ یا حتی پس دادن آن داشته باشید که وابسته به درخواست شما از گارسون است.
امیدوارم که شما اکنون درک واضح تری از مفهوم معماری MVC و چگونگی عملکرد الگوی معماری MVC داشته باشید.
اگر فکر می کنید این توضیحات مفید واقع شده، یا در مورد چگونگی بهبود این مقاله سوال یا فکری دارید، لطفاً آزادانه نظر دهید.
مهدی شیخی _ گروه نرم افزاری رامان صفر و یک
۱۹ دیدگاه. ارسال دیدگاه جدید
استاد برای طراحی سایت چه معماری های دیگه ای داریم و اینکه آیا معماری ای هست که از mvc بهتر باشه ؟
الگو های معماری زیر مجموعه دنیای دیگه یعنی الگو های طراحی نرم افزاری هستن که دنیای بسیار گسترده تری است.
بخوام یه تعریف ساده از معماری ها بگم: “الگوی معماری یک راه حل کلی و قابل استفاده مجدد برای یک مشکل معمول در یک زمینه خاص نرم افزاری است ”
معماری ها بهتر از هم نیستن بلکه هر کدوم در جای خودشون استفاده میشوند
از هم خانواده های MVC و نزدیک بهش MVVM ,MVP میتونم نام ببرم که تفاوت های باهم دارند که بیان این تفاوت ها خودش یه مقاله جدا میشه.
هرکی mvc بلد نباشه از ما نیست !
یقیناً که در آن حتما نشانههایی است برای مهندسان، آیا ایمان نمیآورید؟ 😉
بازیابی Retreive میشه ؟
کوئری بازیابیو میشه بنویسید ؟
اینجا اصطلاحشه(اسم نوع عملیات) به مفهوم خواندن یا مشاهده مجدد یا مشاهده مورد مشروط شده
که برای انجام این عملیات از کوئری select استفاده میکنیم.
“select * from ‘my_tbl’ WHERE id=1” = اsql$
یا یک مثال دیگه در اینجا دراصطلاح به عملیات ایجاد Create میگویم
ولی برای انجامش همون کوئری insert مینویسم.
استاد تو فریم ورک ها هم از معماری استفاده میشه ؟
فریم ورک ها از بسته های معماری مختلف پیروی میکنن، مثلا اساس فریمورک لاراول همین MVC هست.
مطالب خوبی بود
از وقتی که بابت خواندن مقاله گذاشتید سپاس گزارم.
استاد اومدیم یه کوچولو mvc یاد بگیریم حسابی گشنمون شد.
ولی دمت گر با مثال جالبی توضیح دادی.البته من یکمی گیج شدم ولی عمده مطالبو تا حدودی متوجه شدم.
من خودم برای درک مفهوم چیزی به این جمله معتقدم:”هر چیزی رو که میخوای یادبگیری برو تو دلش”.
حالا بعد خوردن غذا تصویر شماره چهار مجدد تماشا کن، برای درک مفاهیم بهت ایده بهتری میده.
مقاله بعدیو که منتشر می کنید استاد ؟
همین هفته
سلام .برای طراحی سایت و کسب درامد از اینکار باید از کجا شروع کنم.از صفر صفر بفرمایید لطفا.با تشکر
ابتدا تخصص مورد علاقه خودتان را پیدا کنید
توصیه میکنم برای داشتن ایده بهتر در این زمینه مقاله “چگونه در سال ۲۰۲۰ یک توسعه دهنده وب شویم” مطالعه کنید
سپس در مورد زمینه دلخواه مورد نظر به دنبال آموزش پروژه محور بروید و رزومه خود را برای ورود به بازار کار تکمیل کنید.
کلمه mvc مخفف:
model ،view ،controller می باشد
و وظیفه اصلی آن به زبان ساده و مختصر جدا کردن بخش های منطقی برنامه از بخش های سمت کاربر می باشد
بدین ترتیب تمامی بخش های منطقی از سمت کاربر جدا شده و در نتیجه انجام تغییرات و توسعه دادن یک سایت یا یک سیستم تحت وب برای تیم برنامه نویسی بسیار راحت تر قابل انجام خواهد بود.
از حسن نظر شما مچکرم
ولی درست تر میشه گفت بخش فرانت اند و بک اند کنار هم سازماندهی میشوند تا جدا شدن.
Thank you