مقایسه MVC و Razor Pages در توسعه وب اپلیکیشن ها

در فصل ششم از سری آموزش متنی معماری وب اپلیکیشن های مدرن در Asp.Net Core و Azure می‌خواهیم در رابطه با توسعه وب اپلیکیشن های MVC Asp.Net Core و قابلیت های مختلف آنها صحبت کنیم. درس اول را به بررسی و مقایسه تکنولوژی های MVC و Razor Pages اختصاص داده‌ایم. توصیه می‌کنیم که از بسته ی آموزش ویدئویی Razor Pages در ASP.NET Core و بسته ی آموزش ویدئویی ساخت وب اپلیکیشن با ASP.NET Core Razor دیدن کنید.

فریم ورک Asp.Net Core به صورت cross-platform و open-source بنا نهاده شده است و می‌تواند توسط وب اپلیکیشن های مدرن امروزی که نیاز دارند بتوانند به روشی کاملا بهینه با رایانش ابری و یا Cloud کار کنند مورد استفاده قرار بگیرد. اپلیکیشن های ایجاد شده با Asp.Net Core سبک وزن و ماژولار هستند و این فریم ورک به صورت درونی از dependency injection پشتیبانی می کند. در این رابطه توصیه می‌کنیم از بسته ی آموزش ویدئویی Inversion of Control و IoC Container ها استفاده کنید. پشتیبانی کردن از dependency injection باعث می شود که قابلیت های تست پذیری و نگهداری وب اپلیکیشن‌های توسعه داده شده با فریم ورک Asp.Net Core بیشتر بشود. در این رابطه نیز توصیه می کنیم از بسته ی آموزش ویدئویی تست نرم افزار در ASP.NET Core MVC دیدن کنید. ترکیب شدن فریم ورک Asp.Net Core با الگوی طراحی MVC به منظور ساختن Web API ها و همچنین وب اپلیکیشن های مبتنی بر View ها باعث شده است که فریم ورک Asp.Net Core به روشی قدرتمند و پرطرفدار برای ساخت وب اپلیکیشن های تجاری تبدیل بشود.

مقایسه MVC و فریم Razor Pages

فریم ورک Asp.Net Core MVC قابلیت های زیادی را در اختیار برنامه نویسان قرار می دهد دهند تا بتوانند وب اپلیکیشن های مبتنی بر API وView را ایجاد کنند. واژه MVC مخفف Model-View-Controller می باشد. در واقع MVC یک الگوی طراحی مبتنی بر UI است که ویژگی ها و مسئولیت‌های مختلف برنامه را بر اساس User Request ها به چندین بخش تقسیم می کند. علاوه بر استفاده کردن از این الگوی طراحی شما می توانید ویژگی های مورد نظر خود را در اپلیکیشن‌های Asp.Net Core در قالب Razor Page پیاده سازی کنید. در واقع Razor Pagesبه صورت درونی در Asp.Net Core MVC پشتیبانی می شود و شبیه به MVC از قابلیت هایی از قبیل Routing و Model binding و غیره استفاده می‌کند. تفاوت Razor Pages با MVC در این است که در MVC فولدرها و فایل های مختلفی برای Controller ها و Viewها ساخته می شود و از attribute-based routing را به منظور هندل کردن User request ها استفاده می گردد. این در حالی است که در Razor Page تمامی جزئیات مربوط به برنامه در یک فولدر به نام Pages قرار داده می‌شود. علاوه بر این Request های کاربر بر اساس مسیر مربوط به هر کدام از این Page ‌ها هندل خواهند گردید. در رابطه با Razor Pages توصیه می‌کنیم که از بسته ی آموزش ویدئویی Razor Pages در ASP.NET Core دیدن کنید.

زمانی که در ویژوال استودیو اقدام به ایجاد کردن یک اپلیکیشن با Asp.Net Core می کنید به طور کلی می توانید از سه الگو و یا template برای ساختن این وب اپلیکیشن ها استفاده کنید. سه مورد از مهمترین template هایی که در اختیار شما قرار داده می شوند عبارتند از Web API و Web Application و Web Application (Model-View-Controller). هر چند که می بایست در زمان ایجاد کردن یک پروژه جدید یکی از این سه گزینه را انتخاب کنید، تغییر دادن آنها پس از ایجاد شدن برنامه کار غیر ممکنی نیست. پروژه ‌های Web API از مکانیزم model-view-controller استفاده می‌کنند. اما به طور پیش‌فرض در خود ویو ندارند. به طور مشابه وب اپلیکیشن به عنوان یک template از Razor Pages استفاده می‌کند و فولدر Views را در خود نخواهد داشت. البته می‌توانید در این نوع از پروژه‌ها در صورت نیاز فولدر Views را اضافه کنید تا برنامه بر اساس View ها عمل کند. پروژه هایی که به صورت Web API ایجاد می شوند نیز از model-view-controller استفاده می‌کنند اما فولدر Pages در خود ندارند. به این نوع از پروژه‌ها نیز می‌توان برای استفاده از Razor Pages فولدر Pages را اضافه کرد. در واقع این سه template به عنوان سه روش کلی برای هندل کردن user interaction و یا تعاملات کاربر در اختیار ما قرار گرفته اند. اگر تعاملات کاربر بر اساس داده باشند از Web API استفاده می‌کنیم و اگر کاربر بخواهد بر اساس Page ها و یا View ها عمل کند از Razor Pages و نهایتاً Web Application (Model-View-Controller) استفاده می نماییم. هر کدام از این سه تمپلیت را نیز می توان به صورت ترکیبی در یک پروژه تک مورد استفاده قرار داد.

چرا می بایست از Razor Pages استفاده کنیم؟

در این قسمت می‌خواهیم برخی از دلایل استفاده کردن از Razor Pages را بررسی کنیم. تکنولوژی Razor Pages روش پیش فرض توسعه وب اپلیکیشن های جدید در ویژوال استودیو به حساب می آید. در واقع با استفاده از Razor Pages شما روشی ساده برای ساختن ویژگی های اپلیکیشن های مبتنی بر Page را خواهید داشت که غیر مشابه به وب اپلیکیشن های SPA عمل خواهند کرد. با استفاده از Controller ها و View ها در گذشته وب اپلیکیشن‌هایی توسعه داده می‌شدند که کنترل های زیادی داشتند و این Controller ها با داشتن dependency های مختلف و View Model های متعدد تعداد زیادی از View های مختلف برنامه را Return می‌کردند. این موضوع اغلب به پیچیدگی بیشتری در Controller ها منجر می‌شد و اصول بسیار مهمی از قبیل Single Responsibility Principle و Open/Closed Principles تحت تاثیر قرار می گرفتند. با استفاده از Razor Page به راحتی می‌توان این مشکلات را حل و فصل کرد و Server-side logic برنامه را در یک page منطقی در وب اپلیکیشن اصطلاحاً کپسوله نمود. این موضوع با استفاده از Razor اتفاق خواهد افتاد. برای یادگیری شما می توانید از بسته ی آموزش ویدئویی Razor Pages در ASP.NET Core دیدن کنید. یک Razor Page می تواند server-side logic خاصی را در خود نداشته باشد و فقط در قالب یک فایل با پسوند cshtml پیاده‌سازی شود.

البته بسیاری از اپلیکیشن های ایجاد شده با تکنولوژی Razor Pages یک کلاس Page Model مدل مرتبط با هر فایل Razor را دارند که بر اساس Convention و یا رسم و رسومات برنامه نویسی، همنام با فایل cshtml مورد نظر لحاظ می گردد و پسوند cs را خواهد داشت. برای مثال اگر فایل Razor شما index.cshtml نام دارد کلاس Page Model مربوطه Index.cshtml.cs نام خواهد گرفت. کلاس Page Model در Razor Pages مسئولیت های یک Controller در MVC وView Model مربوط به این روش را در خود جای می دهد. به جای هندل کردن Request ها با استفاده از Action Method های تعریف شده در Controller این کلاست Page Model است که با استفاده از متدهای از قبیل OnGet() درخواست‌های کاربر را پاسخ می دهد و سپس page مورد نظر با هر کدام از این درخواست‌ها را در خروجی رندر خواهد کرد. در واقع تکنولوژی Razor Pages فرآیند ایجاد کردن Page های تک در یک اپلیکیشن Asp.Net Core را ساده تر کرده و تمامی ویژگی های معماری Asp.Net Core MVC را نیز در خود دارند. استفاده از این تکنولوژی یک گزینه بسیار مناسب برای پیاده سازی کردن Functionality های مبتنی بر Page هستند.

چه زمانی از MVC استفاده کنیم ؟

اگر قصد توسعه Web API ها را دارید استفاده کردن از روش MVC به مراتب بهتر از استفاده کردن از Razor Pages خواهد بود. اگر پروژه شما فقط تعدادی Web API endpoint را در اختیار مصرف‌کنندگان قرار می‌دهد می‌بایست از همان ابتدای کار با الگوی پروژه Web API کار خود را آغاز کنید. در غیر اینصورت اضافه کردن Controller ها و نهایتا API endpoint های مرتبط با هر کدام به یک اپلیکیشن Asp.Net Core کار ساده ای خواهد بود. با استفاده از روش MVC و عملکرد مبتنی بر View آن می توانید به راحتی یک اپلیکیشن از قبل موجود در Asp.Net MVC 5‌ و یا ورژن های قبلی را به Asp.Net Core MVC منتقل و یا Migrate کنید و در این روند کمترین دشواری را تجربه نمایید. پس از انجام اولین Migration می توانید به سادگی در صورت تمایل از Razor pages برای پیاده سازی قابلیت های جدید استفاده کنید.

در توسعه وب اپلیکیشن ها با استفاده از Asp.Net Core چه از Razor Pages‌ وچه از MVC استفاده کنید اپلیکیشن شما Performance و یا عملکرد مشابه را خواهد داشت و از مواردی از قبیل dependency injection ها و فیلترها و model binding و validation و غیره پشتیبانی خواهد نمود.