الگوی طراحی نرم افزار MVC چیست ؟

+2 رأی
میانگین بازدید روزانه 4.078,663 بازدید
الگوی MVC چیست و Model ، View و Controller به چه مواردی اطلاق می شوند؟
سوال جاری به یکی از جواب های این سوال مرتبط است: MVC یک الگوی طراحی (design pattern) است یا یک الگوی معماری (architecture pattern)؟
سوال 5 سال قبل در تالار برنامه نویسی توسط kashi (7,116 امتیاز)

3 جواب

+2 رأی
 
بهترین جواب

الگوی طراحی MVC در لایه presentation در معماری سه لایه استفاده می شود و هدف نهایی آن جداسازی مفاهیم در لایه presentation بمنظور خواناتر کردن کد و بالا بردن maintainability آن است.

این الگوی طراحی می گوید بجای اینکه کد قسمت های مختلف لایه presentation (مانند کامپوننت ها، فرم ها و ...) یکجا نوشته شوند بر اساس وظیفه به سه دسته model ، view و controller تقسیم شوند. این سه دسته کد بصورت زیر با یکدیگر تعامل می کنند:

  1. وظیفه view نمایش اطلاعات درون مدل به کاربر و انتقال فرامین کاربر به کنترلر است.
  2. وظیفه controller ارتباط با سایر لایه ها ( برای مثال business logic) و بروز رسانی model است.
  3. وظیفه model حمل داده ها و اطلاع رسانی به view در صورت اعمال تغییر در model توسط controller است.

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

جواب 5 سال قبل توسط Saeed Zarinfam (1,313 امتیاز)
انتخاب شده در 5 سال قبل توسط kashi
آیا می توان model را همان entity ها و رابطه بینشان را همان ER دانست؟
معمولا model با entity فرق داره ولی به تصمیم معماری بستگی دارد می تونید یکی در نظر بگیریدش
+4 رأی

در عکس زیر نحوه ی تعامل سه عنصر (view,metod,controller) را نشان می دهد.

Model، نام بخشی از سیستم است که وظیفه نگهداری دائمی اطلاعات را برعهده دارد. این بخش باید امکان دسترسی به داده‌های ذخیره‌شده جهت نمایش به کاربر، یا دریافت و ذخیره‌سازی داده‌هایی که در اختیار آن قرار می‌گیرد را فراهم‌کند و نقش پُلی بین بخش View و بخش Controller را در درون سیستم ایفا می‌کند. یک جنبه بسیار مهم Model آن است که باید ازنظر فنی «کور» باشد؛ بدین‌معنا که هیچگونه ارتباط و آگاهی از آنچه که برسر داده در بخش‌های Controller و View می‌افتد، نداشته‌باشد. Model نه بخش‌های دیگر را فراخوانی می‌کند و نه منتظر پاسخ از آنها می‌ماند. تنها هدف آن، ذخیره‌سازی داده‌ها در رسانه فیزیکی (اعم از فایل یا بانک اطلاعاتی) یا خواندن و آماده‌سازی اطلاعات برای تحویل به بخش‌های دیگر است. البته Model را نمی‌توان به‌سادگی در حد پایگاه داده‌ها یا یک معبر به سایر سیستم‌های نگهداری اطلاعات (مثل فایل‌ها) کوچک‌شمرد.  Model باید بعنوان دروازه‌بان داده‌ها عمل‌کند. سؤالی نپرسد اما تمامی درخواست‌هایی را که از کانال صحیح وارد می‌شوند، بپذیرد. در اغلب موارد، Model بعنوان پیچیده‌ترین بخش MVC، نقش هسته مرکزی آنرا نیز ایفا می‌کند؛ زیرا بدون آن، ارتباطی بین دو عنصر دیگر یعنی View و Controller برقرار نخواهد شد.

 

View مکانی است که داده‌هایی که از Model درخواست شده‌اند، به‌نمایش درآمده و خروجی نهایی آن توسط کاربر دیده می‌شود. در روش استاندارد کاربرد MVC، عنصر View بخشی از سیستم است که کد HTML در آن تولید و نمایش داده می‌شود. همچنین View  محیطی را برای انجام عملیات توسط کاربر فراهم می‌کند و سپس، این عملیات به Controller منتقل می‌شوند تا به آنها پاسخ مناسب داده‌شود. مثال ساده‌ای از این روش، دکمه‌ای است که توسط View تولید می‌شود و وقتی کاربر برروی آن کلیک می‌کند، عملیاتی در Controller اتفاق می‌افتد. برخی باورهای اشتباه درباره عنصر View به‌خصوص دربین توسعه‌دهندگان وب که از MVC استفاده می‌کنند، رایج است. برای مثال، بسیاری از آنها به‌اشتباه فکر می‌کنند که View هیچ‌گونه ارتباط مستقیمی با Model ندارد و تمام داده‌های موردنیاز جهت نمایش توسط View، ازطریق Controller ارسال می‌شود. درحقیقت، این روند با اصول MVC ناسازگاری کامل دارد اما متأسفانه این روند تا جایی رواج داشته‌است که در کتاب‌های آموزش MVC و حتی در برخی از فریمورک‌های معروف (مثل CakePHP) نیز از آن استفاده شده است. بعلاوه، توصیف View بعنوان یک فایل قالب نیز اشتباه است. هرچند، متأسفانه این باور نیز نه به‌صورت فردی بلکه دربین انبوهی از توسعه‌دهندگان و نویسندگان رایج است و منجر به یادگیری MVC به‌صورت اشتباه و در مرحله بعد، تدریس آن بصورت نادرست می‌شود. البته خوشبختانه در فریمورک‌های جدید و مدرن، این مسئله اصلاح شده‌است. بنابراین، همان‌طور که اشاره‌شد، داده‌های View ازطریق Controller تأمین نمی‌شوند و همان‌طور که قبلاً اشاره شد، هیچ‌گونه ارتباط مستقیمی بین View و Controller وجود ندارد و Model نقش پُل بین آنها را ایفا می‌کند.

 

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

جواب 5 سال قبل توسط farazsahebdel (60 امتیاز)
+2 رأی

mvc همونطور که گفتید یک الگوی طراحی نرم افزارِِِکه این الگو خودش ازنظر ساختار دارای معماری سه لایه است. و معماری سه لایه هم خودش برمبنای سه مفهوم بنا شده:

  1. business
  2. presentation
  3. dataaccess

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

حالا به چه دردی میخورن :

خب اگه قرار باشه یک سامانه جامع نرم افزای داشته باشیم .که مثلآ بیشتراز 100 هزار خط کد باشه وبیش از 50 زبان رایج برنامه نویسی توش بکار بره لاجرم باید بصورت گروهی ازبرنامه نویسان تولید بشه (یعنی یک نفر به تنهایی اصلآ عمرش نمیکشه همشو بنویسه )خب چه باید کرد.
اینجاست که به منظور هماهنکی بین اعضاء ساده سازی مسئله تقسیم کار وغیره...مجبوریم برای نایل شدن هدف یک مدل,الگو یا معماری  یا هر اسمی که میشه روش گذاشت داشته باشیم.یکی از این الگوها که از قبل موجود و جواب داده همین  آقای mvc هست.
حالا ,من حدس میزنم منظور شما کاربرد mvc هست.با توجه به تجربه خودم خدمتتون عرض میکنم پیاده سازی و کاربردی کردن mvc کاملآ سلیقه ای است.به عبارت بهتر معمولآ در MVC برنامه نویس یک سری استاندارد تعریف میکنه که بقیه ملزم به رعایت ان هستن مثلآ در نام گذاری پارت های مختلف mvc.برای مثال framework جوملا به عنوان یک مصداق از سامانه  همه گیرشده برای تعریف نام کلاس  یک افزونه از یک کلاس از پارت c از استاندارد نام افزونه + کلمه controller +نام مشترک سه پارت مدل کنترلر ویو. استفاده میکنه.

خب حالا چطوری برنامه های خودمونو mvcکنیم؟

اول باید حداقل در سطح بالای از تبُهردر ان زبون مورد نظرتون باشین.
دوم مشق mvcسامانه های موجود کرده باشین
سوم تسلط کاملآ عملی روی مفاهیم سئ گرایی و محدودیتها و امکانات ان زبون مورد استفاده داشته باشین.(در اینجا ضروی بدانید که پیاده سازی مفاهیم شی گرایی در زبانهای  مختلف انداکی با هم متفاوت مثلآ مفهوم کپسوله سازی در php با c یکم متفاوت ومحدودیتها و امکانات خودش داره).

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

جواب 5 سال قبل توسط polbadman (164 امتیاز)
ویرایش 5 سال قبل توسط polbadman
فکر می کنم شما معماری سه لایه برای تولید نرم افزار رو بجای الگوی طراحی MVC توضیح دادید.

سوال های مشابه

+2 رأی
2 جواب میانگین بازدید روزانه 1.332,876 بازدید
+1 رأی
0 جواب میانگین بازدید روزانه 0.26162 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.2454 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.22180 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.8644 بازدید
+3 رأی
3 جواب میانگین بازدید روزانه 1.844,101 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.46111 بازدید
+2 رأی
1 جواب میانگین بازدید روزانه 0.961,848 بازدید
سوال 5 سال قبل در تالار برنامه نویسی توسط artemis2007 (10 امتیاز)
کانال تلگرام جواب یاب
...