JavaRush /وبلاگ جاوا /Random-FA /قسمت 7. مقدمه ای بر الگوی MVC (Model-View-Controller).

قسمت 7. مقدمه ای بر الگوی MVC (Model-View-Controller).

در گروه منتشر شد
این مطالب بخشی از مجموعه "مقدمه ای بر توسعه سازمانی" است. مقالات قبلی: قسمت 7. مقدمه ای بر الگوی MVC (Model-View-Controller) - 1در این مطلب شما را با چیزی به نام MVC آشنا می کنیم. بیایید در مورد چیستی MVC صحبت کنیم، تاریخچه ایجاد آن را لمس کنیم، ایده ها و مفاهیم اصلی ذاتی MVC را درک کنیم، گام به گام نحوه تقسیم یک برنامه به ماژول های Model، View، Controller و همچنین نوشتن یک برنامه وب کوچک را در نظر بگیریم. Spring-Boot و با استفاده از Spring-MVC به عنوان مثال، بیایید ببینیم که چگونه داده ها از کد جاوا به صفحات html منتقل می شوند. برای درک این متریال باید با الگوهای طراحی به خصوص Observer و Facade آشنا باشید. با درخواست ها و پاسخ های HTTP آشنا باشید، اصول html را درک کنید، بدانید که حاشیه نویسی در جاوا چیست. بنشینید، چای درست کنید، دسر، سالاد، غذای اصلی و غذای اول را آماده کنید. شروع می کنیم.

تاریخچه MVC

ایده های MVC توسط Trygve Reenskaug هنگام کار در Xerox PARC در اواخر دهه 70 تدوین شد. در آن روزها، کار با کامپیوتر بدون مدرک دانشگاهی و مطالعه مداوم اسناد حجیم غیرممکن بود. مشکلی که Reenskaug به همراه گروهی از توسعه دهندگان بسیار قوی حل کرد، ساده کردن تعامل کاربر معمولی با یک کامپیوتر بود. لازم بود ابزارهایی ایجاد شود که از یک سو بسیار ساده و قابل درک باشد و از سوی دیگر امکان مدیریت کامپیوتر و برنامه های پیچیده را فراهم کند. Reenskaug روی تیمی کار کرد که کامپیوتر قابل حمل "برای کودکان در تمام سنین" - Dynabook و همچنین زبان SmallTalk را تحت رهبری آلن کی توسعه داد. در آن زمان و آنجا بود که مفاهیم یک رابط دوستانه مطرح شد. کار رینسکاگ با تیمش تأثیر زیادی بر توسعه حوزه فناوری اطلاعات داشت. اجازه دهید یک واقعیت جالب را ارائه کنیم که مستقیماً به MVC مربوط نمی شود، اما اهمیت آن پیشرفت ها را نشان می دهد. در سال 2007، پس از معرفی آیفون اپل، آلن کی گفت: «وقتی مکینتاش عرضه شد، نیوزویک پرسید که نظر من در مورد آن چیست. گفتم: این اولین کامپیوتر شخصی است که قابل نقد است. پس از ارائه، استیو جابز آمد و پرسید: آیا آیفون ارزش انتقاد دارد؟ و من گفتم، آن را پنج در هشت اینچ بساز تا دنیا را فتح کنی.» سه سال بعد، در 27 ژانویه 2010، اپل آی پد 9.7 اینچی را معرفی کرد. یعنی استیو جابز تقریباً به معنای واقعی کلمه از توصیه آلن کی پیروی کرد. پروژه ای که رنسکاگ روی آن کار کرد 10 سال به طول انجامید. و اولین انتشار در مورد MVC از سازندگان آن 10 سال بعد منتشر شد. مارتین فاولر، نویسنده تعدادی کتاب و مقاله در زمینه معماری نرم افزار، اشاره می کند که MVC را از نسخه کاری SmallTalk آموخته است. از آنجایی که برای مدت طولانی هیچ اطلاعاتی در مورد MVC از منبع اصلی وجود نداشت، و همچنین به دلایل دیگر، تعداد زیادی تفاسیر مختلف از این مفهوم ظاهر شده است. در نتیجه، بسیاری از مردم MVC را یک طرح یا الگوی طراحی می دانند. کمتر متداول است، MVC یک الگوی ترکیبی یا ترکیبی از چندین الگو نامیده می شود که با هم کار می کنند تا برنامه های پیچیده را پیاده سازی کنند. اما در واقع همانطور که قبلا گفته شد، MVC در درجه اول مجموعه ای از ایده ها/اصول/رویکردهای معماری است که با استفاده از الگوهای مختلف می توان آن ها را به روش های مختلف پیاده سازی کرد... در ادامه سعی خواهیم کرد ایده های اصلی تعبیه شده در مفهوم MVC را بررسی کنیم.

MVC چیست: ایده ها و اصول اولیه

  • VC مجموعه ای از ایده ها و اصول معماری برای ساخت سیستم های اطلاعاتی پیچیده با رابط کاربری است.
  • MVC مخفف مدل-View-Controller است.
سلب مسئولیت: MVC یک الگوی طراحی نیست. MVC دقیقاً مجموعه ای از ایده ها و اصول معماری برای ساخت سیستم های پیچیده با رابط کاربری است. اما برای راحتی، به طوری که هر بار تکرار نکنیم: "مجموعه ای از ایده های معماری ..."، ما MVC را یک الگو می نامیم. بیایید با یک چیز ساده شروع کنیم. پشت کلمات Model-View-Controller چه چیزی پنهان شده است؟ هنگام توسعه سیستم هایی با رابط کاربری، با پیروی از الگوی MVC، باید سیستم را به سه جزء تقسیم کنید. اینها به نوبه خود می توانند ماژول یا کامپوننت نامیده شوند. هر چه می خواهید بگویید، اما تقسیم بر سه کنید. هر جزء هدف خاص خود را خواهد داشت. مدل. اولین جزء / ماژول به اصطلاح مدل است. این شامل تمام منطق تجاری برنامه است. چشم انداز. بخش دوم سیستم نمای است. این ماژول وظیفه نمایش داده ها به کاربر را بر عهده دارد. هر چیزی که کاربر می بیند توسط نما ایجاد می شود. کنترل کننده. حلقه سوم در این زنجیره کنترلر است. کدی را ذخیره می کند که وظیفه پردازش اقدامات کاربر را بر عهده دارد (هر اقدام کاربر در سیستم در کنترلر پردازش می شود). مدل مستقل ترین بخش سیستم است. آنقدر مستقل که نباید چیزی در مورد ماژول های View و Controller بداند. این مدل آنقدر مستقل است که توسعه دهندگان آن ممکن است تقریباً چیزی در مورد View و Controller ندانند. هدف اصلی View ارائه اطلاعات از مدل در قالبی کاربرپسند است. محدودیت اصلی View این است که به هیچ وجه نباید مدل را تغییر دهد. هدف اصلی کنترلر پردازش اقدامات کاربر است. از طریق Controller است که کاربر تغییراتی را در مدل ایجاد می کند. به طور دقیق تر، به داده هایی که در مدل ذخیره می شود. اجازه دهید دوباره نموداری را که قبلاً در سخنرانی به شما نشان داده شده بود ارائه دهیم: قسمت 7. مقدمه ای بر الگوی MVC (Model-View-Controller) - 2از همه اینها می توانیم یک نتیجه کاملاً منطقی بگیریم. یک سیستم پیچیده باید به ماژول ها تقسیم شود. اجازه دهید به طور خلاصه مراحل چگونگی دستیابی به چنین جدایی را شرح دهیم.

مرحله 1: منطق تجاری برنامه را از رابط کاربری جدا کنید

ایده کلیدی MVC این است که هر برنامه کاربردی با یک رابط کاربری را می توان در اولین تقریب به 2 ماژول تقسیم کرد: یک ماژول که مسئول پیاده سازی منطق تجاری برنامه است و یک رابط کاربری. ماژول اول عملکرد اصلی برنامه را اجرا می کند. این ماژول هسته سیستم خواهد بود که مدل دامنه برنامه در آن پیاده سازی می شود. در مفهوم MVC، این ماژول حرف M ما خواهد بود، یعنی. مدل. ماژول دوم کل رابط کاربری را پیاده سازی می کند، از جمله نمایش داده ها به کاربر و منطق تعامل کاربر با برنامه. هدف اصلی این جداسازی این است که اطمینان حاصل شود که هسته سیستم (مدل در اصطلاحات MVC) می تواند به طور مستقل توسعه و آزمایش شود. معماری برنامه پس از چنین تقسیم بندی به صورت زیر خواهد بود: قسمت 7. مقدمه ای بر الگوی MVC (Model-View-Controller) - 3

مرحله 2. با استفاده از الگوی Observer، به استقلال بیشتر مدل و همچنین همگام سازی رابط های کاربری دست یابید.

در اینجا ما 2 هدف را دنبال می کنیم:
  1. دستیابی به استقلال حتی بیشتر از مدل.
  2. همگام سازی رابط های کاربری
مثال زیر به شما کمک می کند منظور از همگام سازی رابط های کاربری را درک کنید. فرض کنید یک بلیت سینما را به صورت آنلاین خریداری می کنیم و تعداد صندلی های موجود در سالن را می بینیم. شخص دیگری می تواند همزمان با ما بلیط سینما بخرد. اگر این کسی قبل از ما بلیط بخرد، مایلیم ببینیم که تعداد صندلی های موجود برای جلسه ما کاهش یافته است. حالا بیایید به این فکر کنیم که چگونه می توان این را در داخل برنامه پیاده سازی کرد. بیایید فرض کنیم یک هسته سیستم (مدل ما) و یک رابط (صفحه وب که در آن خرید می کنیم) داریم. در سایت، 2 کاربر به طور همزمان یک صندلی را انتخاب می کنند. اولین کاربر بلیط خرید. کاربر دوم باید این اطلاعات را در صفحه نمایش دهد. چگونه باید این اتفاق بیفتد؟ اگر رابط را از هسته سیستم به روز کنیم، هسته ما، مدل ما، به اینترفیس وابسته خواهد بود. هنگام توسعه و آزمایش مدل، باید راه های مختلفی برای به روز رسانی رابط را در نظر داشته باشید. برای رسیدن به این هدف، باید الگوی Observer را پیاده سازی کنید. با کمک آن، این مدل اعلان هایی را در مورد تغییرات به همه مشترکین ارسال می کند. این رابط، به عنوان یک مشترک، یک اعلان و به روز رسانی دریافت می کند. الگوی Observer به مدل اجازه می دهد از یک طرف به رابط (نما و کنترل کننده) اطلاع دهد که تغییراتی در آن رخ داده است و از طرف دیگر، در واقع چیزی در مورد آنها «نشناسد» و در نتیجه مستقل بماند. از سوی دیگر، این امکان همگام سازی رابط های کاربری را فراهم می کند.

مرحله 3. تقسیم رابط به View و Controller

ما همچنان برنامه را به ماژول ها تقسیم می کنیم، اما در سطح پایین تر از سلسله مراتب. در این مرحله رابط کاربری (که در مرحله 1 به یک ماژول جداگانه جدا شد) به یک view و یک کنترلر تقسیم می شود. ترسیم یک مرز دقیق بین نما و کنترلر دشوار است. اگر بگوییم نما همان چیزی است که کاربر می بیند و کنترلر مکانیزمی است که کاربر می تواند از طریق آن با سیستم تعامل داشته باشد، تناقض وجود دارد. کنترل‌ها، مانند دکمه‌های صفحه وب یا صفحه‌کلید مجازی روی صفحه‌نمایش تلفن، اساساً بخشی از کنترلر هستند. اما آنها به اندازه هر قسمتی از نما برای کاربر قابل مشاهده هستند. در اینجا بیشتر در مورد تقسیم عملکردی صحبت می کنیم. وظیفه اصلی رابط کاربری اطمینان از تعامل کاربر با سیستم است. این بدان معنی است که رابط فقط 2 عملکرد دارد:
  • نمایش و نمایش راحت اطلاعات مربوط به سیستم به کاربر؛
  • داده ها و دستورات کاربر را در سیستم وارد کنید (آنها را به سیستم منتقل کنید).
این توابع تعیین می کنند که چگونه رابط باید به ماژول ها تقسیم شود. در نتیجه، معماری سیستم به این صورت است: قسمت 7. مقدمه ای بر الگوی MVC (Model-View-Controller) - 4بنابراین، ما یک برنامه کاربردی از سه ماژول به نام‌های Model، View و Controller داریم. به طور خلاصه:
  1. با پیروی از اصول MVC، سیستم باید به ماژول ها تقسیم شود.
  2. مهمترین و مستقل ترین ماژول باید مدل باشد.
  3. مدل هسته اصلی سیستم است. شما به توانایی توسعه و آزمایش آن مستقل از رابط نیاز دارید.
  4. برای انجام این کار، در اولین مرحله از تفکیک سیستم، باید آن را به یک مدل و یک رابط تقسیم کنید.
  5. در مرحله بعد، با استفاده از الگوی Observer، مدل را در استقلال آن تقویت می کنیم و همگام سازی رابط های کاربری را به دست می آوریم.
  6. مرحله سوم این است که رابط را به یک کنترلر و یک view تقسیم کنید.
  7. تمام آنچه برای وارد کردن اطلاعات از کاربر به سیستم مورد نیاز است در کنترلر است.
  8. تمام اطلاعات خروجی از سیستم به کاربر در معرض دید است.
یک موضوع مهم دیگر برای بحث باقی مانده است و می توانید کاکائو بنوشید.

کمی در مورد رابطه بین View و Controller و Model

هنگامی که کاربر اطلاعات را از طریق کنترلر وارد می کند، از این طریق تغییراتی در مدل ایجاد می کند. حداقل کاربر تغییراتی را در داده های مدل ایجاد می کند. هنگامی که کاربر اطلاعات را از طریق عناصر رابط (از طریق View) دریافت می کند، کاربر اطلاعات مربوط به داده های مدل را دریافت می کند. چگونه این اتفاق می افتد؟ چگونه View و Controller با مدل تعامل دارند؟ به هر حال، نمی‌توان اینطور باشد که کلاس‌های View مستقیماً از متدهای کلاس‌های Model برای خواندن/نوشتن داده‌ها استفاده کنند، در غیر این صورت هیچ‌گونه استقلالی از Model وجود نخواهد داشت. مدل مجموعه‌ای از کلاس‌ها را به‌هم پیوسته نشان می‌دهد که، به‌نحوی خوب، نه View و نه Controller نباید به آن دسترسی داشته باشند. برای اتصال مدل به View و Controller، لازم است الگوی طراحی نما پیاده سازی شود. نمای مدل همان لایه بین Model و رابط خواهد بود که از طریق آن View داده ها را با فرمت مناسب دریافت می کند و Controller با فراخوانی روش های لازم نما، داده ها را تغییر می دهد. از نظر شماتیک، در پایان، همه چیز به این صورت خواهد بود: قسمت 7. مقدمه ای بر الگوی MVC (Model-View-Controller) - 6

MVC: فایده چیست؟

هدف اصلی پیروی از اصول MVC، جداسازی پیاده سازی منطق تجاری (مدل) برنامه از تجسم (نما) آن است. این جداسازی استفاده مجدد از کد را افزایش می دهد. مزایای استفاده از MVC در مواردی که کاربر نیاز به ارائه داده های مشابه به اشکال مختلف دارد، آشکارتر است. به عنوان مثال به صورت جدول، نمودار یا نمودار (با استفاده از انواع مختلف). در عین حال، بدون تأثیر بر اجرای نماها، می توانید واکنش ها را به اقدامات کاربر تغییر دهید (کلیک کردن روی یک دکمه، وارد کردن داده ها). اگر از اصول MVC پیروی کنید، می توانید نوشتن برنامه ها را ساده کنید، خوانایی کدها را افزایش دهید و گسترش و نگهداری سیستم را در آینده آسانتر کنید. در آخرین مطالب از سری "مقدمه ای بر توسعه سازمانی"، به عنوان مثال به پیاده سازی MVC با استفاده از Spring-MVC خواهیم پرداخت. قسمت 8. نوشتن یک برنامه کوچک در فنر بوت
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION