ویژگی های وب اپلیکیشن های مدرن

در قسمت اول از این سری آموزشی از وب سایت پرووید قصد داریم در رابطه با ویژگی‌های اساسی وب اپلیکیشن های مدرن و امروزی صحبت کنیم. اولین موضوع این که، از وب اپلیکیشن های مدرن امروزی انتظارات بیشتری نسبت به قبل می رود. برای مثال امروزه وب اپلیکیشن ها می بایست ۲۴ ساعته از هر کجای دنیا در دسترس باشند و بتوانند توسط دستگاه های مختلف از قبیل کامپیوتر، موبایل و تبلت مورد استفاده قرار بگیرند.

ویژگی های وب اپلیکیشن های مدرن

برخی دیگر از قابلیت های وب اپلیکیشن های مدرن شامل امنیت، انعطاف پذیری، قابلیت مقیاس پذیری، برای پاسخ دادن به افزایش demand و یا درخواست کاربران می باشد. از طرفی سناریوهای پیچیده ای که به وجود می‌آیند، باید بتوانند توسط ux و یا user experience های غنی که بر اساس اجرا شدن کد در سمت کلاینت لحاظ گردیده اند handle بشوند. به منظور انجام این کار می توان از جاوا اسکریپت و ارتباط برقرار کردن موثر با Web API ها استفاده کرد. برای یادگیری جاوا اسکریپت می توانید از بسته ی آموزش ویدئویی جاوا اسکریپت و برای یادگیری Web API می توانید از بسته ی آموزش ویدئویی ساخت Web API در ASP.NET Core 2.0 و بسته ی آموزش ویدئویی پیاده سازی مباحث پیشرفته RESTful API در ASP.NET Core 3 استفاده کنید.

تکنولوژی ASP.Net Core امروز برای ساخت وب اپلیکیشن های مدرن و سیستم‌های میزبانی مبتنی بر Cloud بسیار مناسب است. طراحی ماژولار این تکنولوژی اجازه می‌دهد تا اپلیکیشن ها فقط بر روی قابلیت هایی که واقعاً به آنها نیاز دارند و استفاده می‌کنند وابستگی داشته باشند. این موضوع باعث افزایش امنیت و همچنین Performance وب اپلیکیشن ها و در عین حال کاهش نیازمندی‌های منابع میزبانی و یا اصطلاحاً Hosting Resource Requirement خواهد شد. برای یادگیری ASP.Net Core نیز آموزش های متعددی بر روی وبسایت پروید قرار گرفته است که برای مثال می توانید از بسته ی آموزش ویدئویی ساخت اولین وب اپلیکیشن با ASP.NET Core MVC و بسته ی آموزش ویدئویی ساخت یک Enterprise Application با ASP.NET Core MVC استفاده کنید.

برنامه مرجع این دوره آموزشی: eShopOnWeb

برای درک هرچه بهتر مطالب مربوط به این دوره آموزشی، ما از یک وب اپلیکیشن با ویژگی‌های مورد نظرمان به نام eShopOnWeb استفاده کرده ایم. این اپلیکیشن بسیاری از اصولی که در این آموزش از آنها صحبت می شوند را پیاده سازی کرده است. اپلیکیشن eShopOnWeb بسیار ساده است و در قالب یک فروشگاه اینترنتی برای خریدن محصولاتی ایجاد گردیده است. در قسمت زیر می توانید تصویری از صفحه این وب اپلیکیشن را مشاهده کنید.


سورس کد مربوط به این وب اپلیکیشن بر روی وبسایت github و در آدرس https://github.com/dotnet/eShopOnWeb وجود دارد. برای یادگیری github نیز توصیه می کنیم از بسته ی آموزش ویدئویی گیت هاب (GitHub) و مبانی استفاده کردن از آن استفاده کنید. حال در ادامه در رابطه با برخی از ویژگیهای وب اپلیکیشن های مدرن امروزی صحبت خواهیم کرد.

اپلیکیشن های میزبانی شده در Cloud و مقیاس پذیر

یکی از ویژگی‌های مهم وب اپلیکیشن های مدرن امروزی، قابلیت میزبانی شدن در Cloud و همچنین مقیاس پذیری یا Scalability می‌باشند. خوشبختانه تکنولوژی ASP.Net Core هم برای public cloud و هم برای Private cloud بهینه سازی شده است. دلیل این موضوع، مصرف کم حافظه و بهره‌وری بالای اپلیکیشن های ASP.Net Core می باشند. ردپا و یا footprint حداقلی وب اپلیکیشن های ASP.Net Core به این معناست که شما می توانید تعداد بیشتری از آنها را بر روی یک سخت افزار یکسان میزبانی کنید و اگر از روش Pay-as-you go در cloud استفاده می کنید هزینه کمتری برای Resource ها پرداخت کنید. ضمنا در رابطه با Cloud نیز آموزش های متعددی بر روی وبسایت پرووید قرار گرفته اند که در صورت تمایل می توانید از بسته ی آموزش ویدئویی مدیریت Subscription ها Resource ها در Azure استفاده بفرمایید. بهره‌وری بالای وب اپلیکیشن هایی که با ASP.Net Core نوشته شده اند نیز به این معناست که با یک سخت افزار یکسان می توان Request های بیشتری را پاسخ داد و این موضوع باعث می‌شود که هزینه کمتری برای سرمایه‌گذاری بر روی سرورها و زیرساخت های میزبانی وب نیاز باشد. دقت کنید که در این قسمت، منظور ما از بهره وری همان throughput می باشند که یکی از ویژگی‌های وب اپلیکیشن های موفق است.

ویژگی چند سکویی و یا Cross platform بودن

یکی دیگر از ویژگی های وب اپلیکیشن های امروزی، Cross platform بودن آنها می باشد. خوشبختانه تکنولوژی ASP.Net Core به صورت کامل Cross-platform است و می‌تواند بر روی سیستم عامل های لینوکس و macOS و ویندوز به راحتی اجرا بشود. این موضوع برای توسعه دهندگان وب، گزینه های بیشتری را هم از نقطه نظر development و هم از نقطه نظر deployment ایجاد می کند. در واقع با استفاده از docker و container های آن به سادگی می‌توانید اپلیکیشن های ایجاد شده با ASP.Net Core را host کنید و از مزیتهای container ها و مایکروسرویس ها استفاده نمایید. برای یادگیری docker می توانید از بسته docker استفاده کنید و برای یادگیری مایکروسرویس ها می توانید از بسته ی آموزش ویدئویی مباحث اساسی معماری مایکروسرویس ها دیدن کنید.

ویژگی Modular بودن و Loosely Coupled بودن

اپلیکیشن هایی که با استفاده از تکنولوژی .Net Core و ASP.Net Core ایجاد می‌شوند، تماماً از NuGet package ها استفاده می کنند. در رابطه با یادگیری NuGet می توانید از آموزش ویدئویی کار با نیو گت و پکیج های آن (NuGet Package ها) در دات نت استفاده کنید. استفاده کردن از کتابخانه‌های NuGet باعث می شود که دانه بندی و یا اصطلاحاً granularity اپلیکیشن ریز تر شود. این قضیه باعث می‌شود که اپلیکیشن ها فقط و فقط به آن چیزهایی که واقعاً از آنها استفاده می‌کنند وابستگی داشته باشند. این موضوع باعث می‌شود تا رد پا و یا footprint مربوط به وب اپلیکیشن های ASP.Net Core کاهش پیدا کرده و سطح آسیب‌پذیری امنیتی آنها نیز به مراتب کمتر باشد.

علاوه بر این موضوع، خاصیت loosely coupled بودن با استفاده از dependency injection در تکنولوژی ASP.Net Core تماماً مدنظر قرار گرفته است. ASP.Net Core به صورت کامل از dependency injection پشتیبانی می کند. این موضوع هم به صورت درونی و هم در سطح application و یا application level اتفاق می‌افتد. برای یادگیری dependency injection می توانید از بسته ی آموزش ویدئویی Inversion of Control و IoC Container ها استفاده کنید. با استفاده کردن از dependency injection، اینترفیس ها می توانند implementation ها و یا پیاده سازی های مختلفی داشته باشند که در صورت تمایل از آنها استفاده شود. dependency injection اجازه می‌دهد تا برنامه‌ها به صورت loosely coupled عمل کنند و به اینترفیس ها وابستگی داشته باشند و نه پیاده‌سازی های خاص. این موضوع قابلیت های بسیاری را به برنامه اضافه می کند. برای مثال با استفاده از dependency injection امکان گسترش و نگهداری و تست کردن برنامه ساده‌تر می‌شود. ضمنا در صورت تمایل می توانید از بسته ی آموزش ویدئویی معماری نرم افزارهای ASP.NET Core MVC برای تست پذیری دیدن کنید.

خاصیت تست پذیری با استفاده از Automated Test ها

احتمالا می دانید که یکی از مهمترین موضوع ها در توسعه نرم‌افزارهای موفق امکان تست پذیری و ایجاد کردن یک Test sweat مناسب است. در رابطه با Unit Testing آموزش های متعددی بر روی وبسایت پرووید قرار گرفته‌اند. ولی به طور کلی می توانید از بسته ی آموزش ویدئویی معماری نرم افزارهای ASP.NET Core MVC برای تست پذیری و بسته ی آموزش ویدئویی تست نرم افزار در ASP.Net Core MVC به عنوان دو مورد از محصولات وب سایت پروید در رابطه با تست نرم‌افزارهای ایجاد شده با ASP.Net Core استفاده کنید.

وب اپلیکیشن های ایجاد شده با تکنولوژی ASP.Net Core از Unit Testing پشتیبانی می‌کنند و خاصیت‌های Loosely Coupled بودن آنها و پشتیبانی کردن کامل از Dependency Injection باعث می شود تا به سادگی بتوانیم پیاده سازی های fake برای تست کردن برنامه را لحاظ کرده و بدون درگیر شدن با Infrastructure و یا زیرساخت برنامه، کد های برنامه را مورد تست کردن قرار بدهیم. علاوه بر این موضوع در تکنولوژی ASP.Net Core یک تست سرور قرار داده شده است که به سادگی می‌تواند اپلیکیشن شما را در حافظه میزبانی کند. پس از انجام این کار Functional Test ها می توانند Request های خود را به این سرور درون حافظه ای ارسال کرده و application Stack کامل، شامل Middleware ها و Routing و Model Binding و فیلترها و غیره را تست کرده و یک Response دریافت کنند. این موضوع طبیعتاً بسیار سریع اتفاق می‌افتد و به هیچ وجه قابل مقایسه با میزبانی کردن وب اپلیکیشن در یک سرور واقعی و ارسال Request از طریق لایه شبکه نیست. همانطور که احتمالاً نیز می دانید نوشتن این گونه از تست ها بسیار ساده و البته ارزشمند می باشد. یکی از مهمترین تاثیرات نوشتن تست ها برای Web API هایی می باشند که امروزه در ایجاد کردن وب اپلیکیشن های مدرن بسیار ضروری هستند.

پشتیبانی کردن از رفتارهای سنتی و همچنین SPA

احتمالاً می‌دانید که Web Application های سنتی، پشتیبانی اندکی از رفتارهای Client Side داشتند. به عبارت دیگر در این نوع از وب اپلیکیشن ها به سادگی نمی توانستیم کدهایی را در سمت کلاینت اجرا کنیم. در عوض این نوع از وب اپلیکیشن ها تا حد زیادی به سرور وابسته بودند و بسیاری از عملیات برنامه از قبیل Navigation و Queryها و آپدیت هایی که برنامه نیاز به انجام دادن آنها داشت با کمک سرور لحاظ می گردیدند. در این نوع از وب اپلیکیشن ها، هر Request وارد شده توسط عملیاتی که کاربر انجام می‌داد، به سمت سرور ارسال می‌شد و احتمالاً یک Page Reload کامل در مرورگر کاربر اتفاق می‌افتاد. فریم ورک هایی از قبیل MVC که مخفف Model-View-Controller می باشد نیز اغلب از این روش استفاده می‌کنند. برای یادگیری MVC می توانید از بسته ی آموزش ویدئویی ASP.NET MVC و Entity Framework در قالب پروژه استفاده کنید.

در معماری MVC هر Request جدید، متناظرا به یک کنترلر و یک Action در آن Controller نگاشت می‌شد و این موضوع باعث می‌شد که یک مدل به همراه ویو متناظر با آن به سمت مرورگر کاربر ارسال بگردد. البته ذکر این نکته نیز ضروری است که برخی از Operation ها بر روی یک Page می توانستند با استفاده از AJAX که مخفف Asynchronous JavaScript and XML است تقویت بگردند. اما معماری کلی وب اپلیکیشن های سنتی از ویوهای بیشماری و البته URL endpoint های متناظر با آن‌ها در معماری MVC استفاده می‌کردند. علاوه بر این موضوع، در ASP.Net Core علاوه بر استفاده از معماری MVC می توان از Razor Pages به عنوان یک روش ساده تر برای ساختن Page های مبتنی بر معماری MVC استفاده کرد. برای یادگیری Razor Pages نیز می توانید از بسته ی آموزش ویدئویی Razor Pages در ASP.NET Core استفاده کنید.

در مقایسه با این روش از توسعه وب اپلیکیشن ها می توان از SPA که مخفف Single Page Applications نیز می باشد استفاده کرد. در وب اپلیکیشن هایی که با روش SPA توسعه داده می‌شوند، Page های تولید شده در سمت سرور به صورت پویا به حداقل می رسد. بسیاری از وب اپلیکیشن های SPA با یک فایل html استاتیک تک، بارگذاری شده و کتابخانه های جاوااسکریپت مورد نیاز برای اجرا کردن برنامه را بارگذاری می‌کنند. این گونه از وب اپلیکیشن ها از Web API ها تماماً برای بارگذاری کردن داده های مورد نیاز خود و فراهم کردن یک user experience غنی‌تر بهره‌مند می‌شوند. برای کار کردن با SPA ها توصیه می‌کنیم از بسته ی آموزش ویدئویی شروع به کار با Angular 2 استفاده کنید.

بسیاری از وب اپلیکیشن ها شامل ترکیبی از معماری های وب اپلیکیشن های سنتی مبتنی بر سرور و همچنین SPA ها می باشند. خبر خوب اینکه تکنولوژی ASP.Net Core از هر دوی این روش ها پشتیبانی می کند. به عبارت دیگر در صورت تمایل می توانید از معماری MVC بر اساس View ها و یا Page ها استفاده کنید و یا در صورت تمایل یک وب اپلیکیشن SPA با استفاده از Web API در یک پروژه یکسان لحاظ نمایید. ابزارها و کتابخانه های استفاده شده در هر دوی این روش ها تا حد زیادی شبیه به یکدیگر می باشند.

روند Development و Deployment ساده

یکی دیگر از قابلیت های وب اپلیکیشن های توسعه داده شده با تکنولوژی ASP.Net Core، سادگی development و deployment آنها است. وب اپلیکیشن های ASP.Net Core را می توانید به سادگی در هر ویرایشگر متن از قبیل Notepad و با استفاده از Command line interface ایجاد کنید. البته مرسوم تر است که از محیط‌های توسعه کامل از قبیل ویژوال استودیو در توسعه وب اپلیکیشن های مدرن استفاده کرد. در رابطه با ویژوال استودیو می توانید از بسته ی آموزش ویدئویی کار با ویژوال استادیو برای ساخت برنامه های دات نت استفاده کنید.

در این روند وب اپلیکیشن های Monolithic عموماً بر روی یک Endpoint تک، deploy می‌شود. روند deploy شدن می‌تواند به صورت خودکار در بیاید و به عنوان بخشی از یک pipeline مربوط به (continuous integration(CI و (continuous delivery(CD پیاده‌سازی شود. علاوه بر ابزارهای CI/CD سنتی، Microsoft Azure پشتیبانی کاملی از Repository های گیت دارد و می‌تواند به صورت خودکار آپدیت های ایجاد شده بر روی یک git branch و یا Tag را به درون برنامه deploy کند. در رابطه با git می توانید از بسته ی آموزش ویدئویی گیت هاب (GitHub) و مبانی استفاده کردن از آن استفاده نمایید. علاوه بر این موضوع، Azure DevOps پشتیبانی کاملی از pipeline مربوط به CI/CD Build و CI/CD deployment دارد و github actions می‌تواند گزینه دیگری برای پروژه های میزبانی شده در Azure به حساب بیاید.

تکنولوژی ASP.NET و Web Forms سنتی

علاوه بر ASP.Net Core به‌سادگی می‌توان از ASP.Net 4.x سنتی به عنوان یک platform قابل اعتماد و قوی برای ساختن وب اپلیکیشن ها استفاده نمود. ASP.Net از MVC و Web API پشتیبانی می‌کند و علاوه بر این، از web forms به عنوان یک روش کاملا مناسب برای ساخت وب اپلیکیشن های page based و یا مبتنی بر page پشتیبانی می کند. خوشبختانه مایکروسافت Azure پشتیبانی کاملی از وب اپلیکیشن های ایجاد شده با ASP.Net 4.x دارد و بسیاری از برنامه نویسان می توانند از این platform استفاده نمایند. در رابطه با ASP.Net می توانید از آموزش ویدئویی مباحث مقدماتی و شروع به کار ASP.NET Core MVC و بسته ی آموزش ویدئویی ASP.NET Web Forms و Entity Framework در قالب پروژه استفاده کنید.

تکنولوژی Blazor

یکی دیگر از گزینه های پیش روی توسعه دهندگان وب که با ASP.Net Core کارمی کنند، استفاده کردن از بلیزر می باشد. بلیزر در ASP.Net Core 3.0 و نسخه‌های بعدی لحاظ شده است. با استفاده از این تکنولوژی یک مکانیزم جدید برای ساختن web client application های تعاملی و کاملاً قوی، در دسترس برنامه نویس قرار داده شده است. در ساخت اپلیکیشن ها با استفاده از بلیزر، از Razor و سی شارپ و ASP.Net Core استفاده می شود. در واقع بلیزر یک راه حل دیگر برای توسعه دادن وب اپلیکیشن های مدرن امروزی می باشد. برای یادگیری بلیزر نیز مطالب بسیاری بر روی وب سایت پرووید قرار داده شده اند که برای مثال می توانید از بسته ی آموزش ویدئویی شروع به کار با Blazor در ASP.NET Core و بسته ی آموزش ویدئویی Authentication و Authorization در بلیزر (Blazor) و بسته ی آموزش ویدئویی بلیزر (Blazor) پیشرفته و ساخت برنامه های تجاری استفاده کنید. به طور کلی دو نسخه از بلیزر برای ساخت وب اپلیکیشن ها وجود دارد که یکی برای ساخت وب اپلیکیشن های Server side و دیگری برای ساخت وب اپلیکیشن های Client side تعریف شده است.

در Blazor Server Side که در سال ۲۰۱۹ و در کنار ASP.Net Core 3.0 قرار گرفت به سادگی می توانید اپلیکیشن های بلیزر سمت سرور اجرا کنید. این نوع از اپلیکیشن ها کاملاً بر روی سرور اجرا شده و تغییرات مربوط به داکیومنت کاربر را به سمت Browser و با استفاده از شبکه ارسال می کنند. Server side blazor یک user experience کاملاً غنی را بدون نیاز به استفاده کردن از جاوا اسکریپت و بارگذاری کردن Page های مختلف به ازای هر تعامل کاربر در اختیار ما قرار می دهند. تغییرات لحاظ شده در یک Page بر اساس Request های مربوط به کاربر در سرور پردازش شده و سپس نتیجه با استفاده از یک اتصال SignalR به سمت مرورگر ارسال می‌شود. در رابطه با SignalR نیز می توانید از بسته ی آموزش ویدئویی شروع به کار با ASP.NET Core و SignalR استفاده کنید.

و اما بلیزر مربوط به کلاینت و یا اصطلاحاً Client side blazor قرار است که در سال ۲۰۲۰ منتشر شده و نیاز به پردازش شدن تغییرات مربوط به صفحه کاربر در سمت سرور را حذف کند و در عوض Client side blazor از وب اسمبلی برای اجرا کردن کدهای دات نت در مرورگر کاربر استفاده می‌کند. البته WebAssembly blazor که نام دیگر Client side blazor است، هنوز هم می‌تواند از API ها برای ارسال Request ها به سمت سرور استفاده کند و داده‌های خود را دریافت نمایند. اما به طور کلی تمامی رفتارها در سمت کلاینت پیاده‌سازی شده و بر اساس استاندارد WebAssembly عمل می کند. استاندارد WebAssembly در حال حاضر در تقریباً تمامی مرورگرهای اصلی، پشتیبانی شده و صرفاً یک کتابخانه جاوا اسکریپت می باشد. در صورت تمایل به مطالعه کردن مطالب متنی وب سایت پرووید در رابطه با بلیزر نیز می توانید از آموزش متنی Blazor برای توسعه دهندگان ASP.NET Web Forms و آموزش متنی Blazor برای توسعه دهندگان ASP.NET Web Forms استفاده کنید. این درس را در این قسمت به پایان خواهیم رساند و در قسمت بعدی در رابطه با انتخاب صحیح وب اپلیکیشن های سنتی و Single Page Application ها صحبت خواهیم کرد.