تفاوت بین Razor Pages و MVC View در ASP.NET CORE MVC چیست؟
الگوی MVC (Model-View-Controller) چیست؟
الگوی MVC یک الگوی معماری نرمافزار قدیمی و اثبات شده است که برنامه را به سه بخش اصلی تقسیم میکند:
-
Model: دادهها و منطق تجاری (Business Logic).
-
View: آنچه کاربر میبیند (فایلهای .cshtml).
-
Controller: مغز متفکر که درخواستها را دریافت کرده، با مدل کار میکند و در نهایت ویو مناسب را برمیگرداند.
در MVC، تمرکز روی Controller است. یک کنترلر میتواند چندین "Action" داشته باشد که هر کدام به یک صفحه یا عملیات خاص (مثل نمایش لیست محصولات، جزئیات یک محصول و حذف محصول) مربوط میشوند.
Razor Pages چیست؟
Razor Pages در ASP.NET Core 2.0 معرفی شد تا ساخت صفحات وب "صفحه-محور" (Page-Focused) را آسانتر کند. برخلاف MVC که کدها را بر اساس نقش (همه کنترلرها در یک پوشه، همه ویوها در پوشهای دیگر) تقسیم میکند، Razor Pages کدها را بر اساس قابلیت یا صفحه سازماندهی میکند.
هر صفحه در Razor Pages شامل دو فایل است:
-
فایل .cshtml: برای کدهای HTML و ظاهر (View).
-
فایل .cshtml.cs: کلاس PageModel که منطق صفحه و مدیریت درخواستهای (GET, POST و ...) را بر عهده دارد.
تفاوتهای کلیدی: Razor Pages در مقابل MVC
| ویژگی | MVC Views | Razor Pages |
| ساختار | مبتنی بر نقش (Controllers, Models, Views) | مبتنی بر صفحه (Encapsulated) |
| مسیریابی (Routing) | بر اساس نام کنترلر و اکشن (/Product/Details/5) | بر اساس مسیر فایل در پوشه /Pages |
| سازماندهی | کدها در پروژه پراکنده هستند | کد و ظاهر کنار هم هستند (Code-behind) |
| مناسب برای | برنامههای بزرگ با منطق پیچیده و اشتراکی | صفحات CRUD، فرمها و برنامههای محتوا-محور |
| پیچیدگی | یادگیری آن برای تازهکارها کمی سختتر است | یادگیری و پیادهسازی سریعتر و سادهتر |
وقتی پروژه MVC میسازیم، کدام را داریم؟
زمانی که شما یک پروژه جدید را با قالب ASP.NET Core Web App (Model-View-Controller) ایجاد میکنید، شما به صورت پیشفرض MVC Views را دارید.
-
در این حالت، پوشهای به نام Views دارید که داخل آن زیرپوشههایی به نام کنترلرهایتان وجود دارد.
-
مسیریابی شما در فایل Program.cs به صورت pattern: "{controller=Home}/{action=Index}/{id?}" تعریف شده است.
نکته مهم: ASP.NET Core بسیار منعطف است. شما میتوانید در یک پروژه MVC، از Razor Pages هم استفاده کنید و یا بالعکس. این دو با هم دشمنی ندارند و روی یک زیرساخت اجرا میشوند. در واقع، Razor Pages در لایههای زیرین خودش از همان موتور MVC استفاده میکند.
مقایسه با مثال عملی
فرض کنید میخواهیم صفحهای برای نمایش مشخصات یک محصول بسازیم.
الف) پیادهسازی با MVC
در MVC، کد شما در سه جای مختلف پخش میشود:
-
Model:
public class Product { public int Id { get; set; } public string Name { get; set; } } -
Controller (ProductController.cs):
public class ProductController : Controller { public IActionResult Details(int id) { var product = new Product { Id = id, Name = "Laptop" }; return View(product); } } -
View (Views/Product/Details.cshtml):
@model Product <h1>@Model.Name</h1>
ب) پیادهسازی با Razor Pages
در Razor Pages، همه چیز در یک پوشه به نام Product متمرکز است:
-
PageModel (Product.cshtml.cs):
public class ProductModel : PageModel { public string Name { get; set; } public void OnGet(int id) { Name = "Laptop"; } } -
View (Product.cshtml):
@page @model ProductModel <h1>@Model.Name</h1>
کدام را انتخاب کنیم؟
هیچ "بهترین" مطلقی وجود ندارد، اما این راهنما به شما کمک میکند:
-
از MVC استفاده کنید اگر: در حال ساخت یک API هستید که ویوهای سنتی هم دارد، یا پروژهای بسیار بزرگ دارید که یک کنترلر باید چندین خروجی مختلف (مثل JSON و HTML) را مدیریت کند.
-
از Razor Pages استفاده کنید اگر: در حال ساخت یک برنامه وب استاندارد هستید که بیشتر شامل صفحات نمایش داده، فرمهای ثبتنام و عملیات CRUD است. اکثر توسعهدهندگان امروزه برای بخش UI وبسایتها، Razor Pages را به دلیل تمیزی و تمرکز بیشتر ترجیح میدهند.
یک واقعیت جالب: خود مایکروسافت برای ساخت صفحات وب معمولی، Razor Pages را به عنوان گزینه پیشفرض پیشنهاد میدهد، چون مدیریت فایلها در آن بسیار راحتتر است.
نتیجهگیری
تفاوت اصلی در نظم سازمانی است. MVC کدها را بر اساس وظیفه فنی (این یک کنترلر است، این یک مدل است) جدا میکند، در حالی که Razor Pages کدها را بر اساس ویژگی (این صفحه محصول است و تمام متعلقاتش اینجاست) دستهبندی میکند.
0 نظر
هنوز نظری برای این مقاله ثبت نشده است.