PDA

View Full Version : مقاله: چرا به زودی RazorPage جایگزین MVC خواهد شد ؟



hakim22
چهارشنبه 16 خرداد 1397, 16:24 عصر
وقتی 6 ماه پیش ASP.NET Core 2.0 منتشر شد هیچ کس تصور نمیکرد قابلیت RazorPage اینقدر مهم باشد. خیلی ها در نگاه اول گفتند RazorPage فقط مناسب پیاده کردن صفحات ساده مانند About و Contact است. اما از همان ابتدا معلوم بود تیم توسعه ی ASP.NET Core برنامه ی جدی برای تقویت RazorPage دارد. در ویژوال استودیو قالب RazorPage به عنوان قالب پیشفرض پروژه های ASP.NET Core قرار گرفت. بسیاری از آپدیتهای نسخه ی 2.1 هم به این بخش اختصاص داده شد.اکنون بعد از گذشت چند ماه RazorPage هر روز علاقمندان بیشتری پیدا میکند. در ادامه نگاهی به دلایل این رویکرد جدید می اندازیم.

1- قدرتمند است
بر خلاف تصور عمومی RazorPage همه ی قابلیت های لازم برای پیاده سازی یک پروژه ی کامل را دارد. از تزریق وابستگی گرفته تا فیلترها و ... همه چیز در آن قابل استفاده است. می توانید یک پروژه ی حرفه ای فروشگاه بسازید بدون اینکه حتی یک Controller داشته باشید.

2- سبک است
RazorPage مثل یک Controller است که چربی هایش را آب کرده باشد. وقتی از RazorPage استفاده می کنید اصل Single Responsibility را بهتر رعایت می کنید. در MVC یک کنترلر معمولا همه ی عملیاتهای CRUD را انجام میدهد و ممکن است چندین متد اضافی هم داشته باشد. این یعنی تعداد زیادی وابستگی که باید درون Controller تزریق شوند.
مسئله این است که کلاینت در هر Request فقط با یکی از اکشن های درون کنترلر کار دارد اما سرور باید همه ی اکشن های کنترلر به همراه وابستگی هایش را لود کند. در RazorPage حداکثر یک یا دو متد برای هر کلاس پیاده می کنید و با وجود الگوی MVVM داده ها بین ویو و کلاس به خوبی گردش می کنند.

3- کمتر کد می نویسید
وقتی از RazorPage استفاده می کنید کمتر کد می نویسید. این موضوع به این معنی نیست که RazorPage در پس زمینه به صورت جادویی کد سازی میکند. قرار نیست به عصر حجر( وب فرمها) برگردید. بلکه RazorPage بر مبنهای یک سری Convention (بخوانید قراردادهای از پیش تعیین شده) پیاده شده است. هرچند می توانید این قراردادها را به سلیقه ی خود تغییر دهید اما آنقدر خوب هستند که روی موج آنها سوار شوید.

4- ساختار بهتری دارد
هر کس که در MVC برنامه نویسی کرده می داند که کنترلر ها و ویوها در فولدرهای مجزا نگه داری میشوند. معمولا برای هر اکشن یک ویوهم داریم. وقتی روی یک اکشن کد نویسی می کنید باید به فولدر دیگری بروید تا ویوی مربوط به آن را پیدا کنید. در RazorPage ویو و کد آن کنار هم قرار دارند. هیچ زمانی برای برای گردش بین این دو تلف نمیکنید. ضمن اینکه جابجا کردن یک صفحه در ساختار پروژه ساده تر میشود.

5- جدا میشود
از ASP.NET Core 2.1 به بعد می توانید فایلهای RazorPage را در یک Class Library جدا نگه داری کنید. این موضوع در MVC ممکن بود اما آسان نبود. حالا در ویژوال استودیو برای آن یک قالب اختصاصی در نظر گرفته شده است. این مسئله پروژه ی اصلی را تا حد زیادی خلوت میکند. با RazorPage مدیریت پروژه های بزرگتر بسیار ساده تر میشود. کدهای تکراری کمتری می نویسید و می توانید از یک کتابخانه در پروژه های آینده به راحتی استفاده کنید.

6- همزیستی دارد
وقتی می گوییم از RazorPage بجای MVC استفاده می کنیم کمی بی راهه رفته ایم. در حقیقت RazorPage بخشی از MVC است. برای استفاده از RazorPage باید MVC را به پروژه ی ASP.NET Core اضافه کنید. می توانید در یک پروژه همزمان هم به سبک قدیم MVC داشته باشید و هم قسمتی از پروژه را با RazorPage پیاده کنید. این همزیسیتی کمک میکند از هر ابزاری در محل خودش بهترین بهره را ببرید.

تکلیف MVC چه میشود ؟
استفاده از RazorPage به این معنی نیست که دیگر MVC استفاده نخواهد شد. فقط باید بدانید که برای بسیاری از امور روزمره در برنامه نویسی ASP.NET Core دیگر استفاده از Controller بهترین راه نیست. هر جایی که قبلا از Return View() استفاده می کردید می توانید با RazorPage جایگزین کنید. اما RazorPage برای بقیه وظایف Controller ها طراحی نشده است. اگر می خواهید وب سرویس REST داشته باشید یا اطلاعات دیتابیس را با Ajax آپدیت کنید هیچ گزینه ای بهتر از MVC و کنترلر وجود ندارد.

نتیجه گیری
همانطور که از اسمش پیداست RazorPage برای پیاده سازی صفحه های وب طراحی شده و نه بیشتر از آن. اما مگر سایتهای اینترنتی چیزی جز صفحه هستند ؟ بیشترسایتها را صفحات تشکیل میدهند. پس می توان گفت RazorPage بخش بزرگی از وظایف MVC را به دوش خواهد کشید. با توجه به مزایای زیادی که RazorPage دارد به زودی جایگزین روش کنونی استفاده از MVC میشود. اگر به این موضوع شک دارید کافی است یکبار امتحان کنید. اما به شما یاد آوری میکنم وقتی یکبار از آن استفاده کردید دیگر نمی خواهید به عقب برگردید.