کدهک
1.92K subscribers
1.3K photos
7 videos
1 file
681 links
آموزشگاه تخصصی دات نت

https://codehaks.com

لینکدین :
https://www.linkedin.com/in/codehaks

یوتیوب:
https://www.youtube.com/@codehaksfa

ارتباط با مدیر :
Admin: @codehak
Email: ghods.hakim@hotmail.com
call: 09380146555
Download Telegram
پروژه ی نمونه ASP Core

پروژه WebApp از روی قالب خالی پروژه های 2.0 ASP Core ایجاد شده و سرویس MVC و دیتابیس Sqlite با استفاده از تکنیک Code First بهش اضافه شده.

برای دانلود می توانید به آدرس زیر بروید :

https://github.com/codehaks/WebApp
فریم ورک MVC در ASP Core یک Middleware است در مقابل Action Filter بخشی از الگوی MVC است و خارج از آن اجرا نمی شود.
مقایسه بین Middleware و Action Filter

ابتدا باید بدانیم که ASP Core با MVC فرق دارد. ASP یک محیط برنامه نویسی تحت وب است و MVC یکی از روش های استفاده از آن است. شما می توانید سرورهای ASP Core داشته باشید که بدون میان افزار MVC کار می کنند و موارد استفاده ی زیادی هم دارند.

در محیط ASP Core الگوی MVC کاملا از بنده ی اصلی فریم ورک جدا شده است. برای استفاده از MVC باید آن را به صورت یک Middleware یا میان افزار به پروژه ی ASP Core اضافه کنید.

فیلترهای MVC در مسیر Request و Response قرار میگیرند و می توانند آن را تغییر دهند. مثلا فیلتر Authorize چک می کند که آیا کاربر Login کرده یا خیر و جلوی استفاده بی نام از یک اکشن MVC را می گیرد. این دقیقا همان کاری است که Middleware ها انجام میدهند. با این تفاوت که آنها در یک سطح بالاتر کار میکنند. یک میان افزار میتواند یک درخواست را قبل از رسیدن به MVC قطع کند یا بعد از خروج از MVC تغییر دهد. اما Action Filter بخشی از فریم ورک MVC است و طبیعی است که درون میان افزار MVC اجرا میشود و بدون MVC وجود ندارد.

بسیاری از قابلیت های ASP Core با Middleware پیاده شده است. مثلا برای استفاده از فایلهای استاتیک باید میان افزار StaticFiles را لود کنید. همینطوری Routing هم یک Middleware است و خارج از محیط MVC درخواستها را بررسی می کند.

به طور کلی معمولا از Action Filter استفاده می کنید. موارد خیلی کمی پیش می آید که نیاز به پیاده سازی Middleware پیدا می کنید. اما باید بندانید که Middleware حق وتو دارد و در سطحی بالاتر از فیلترهای یا حتی MVC کار می کند. اگر نیاز داشتید کنترل Request و Response را به طور کامل در اختیار بگیرید میان افزار جایی است که باید شروع کنید.
متدهای Safe فقط جهت بازگرداندن اطلاعات استفاده میشوند و متدهای Idempotent در مقابل N بار اجرا یکسان عمل می کنند.
آشنایی با متدهای Safe و Idempotent در HTTP

متدهای Safe

در پروتکل HTTP بعضی از متدها به عنوان Safe شناخته میشوند. منظور از Safe متدی است که کاری جز باز گرداندن اطلاعات انجام نمی دهد. متدهای Safe نباید اطلاعات دتابیس را تغییر دهند. اجرای یک متد Safe نباید برای کاربر هیچ عواقبی داشته باشد یا وضعیت سرور را تغییر دهد. متد GET یک متد Safe است و نباید پشت آن کدی بنویسید که اطلاعات را تغییر یا حذف کند.

متدهای Idempotent

منظور از متد Idempotent این است که نتیجه ی اجرای آن در بار N ام باید با نتیجه ی اجرا در بار اول یکسان باشد. متدهای GET و PUT و DELETE شامل آن می شوند. هر وقت کاربر درخواست اجرای یک متد از نوع DELETE میدهد شما می توانید اطلاعات را حذف کنید و نتیجه را به کاربر برگردانید. اما باید برنامه را به شکلی طراحی کنید که وقتی دوباره همان متد را با همان مقادیر اجرا کند خروجی همانند مرحله ی اول به کاربر برگردد.

رعایت کردن قوانین HTTP یک مبنای مشترک به همه ی برنامه نویسان میدهد. به خصوص زمانی که وب سرویس طراحی می کنید و هزاران برنامه نویس دیگر قرار است از آن استفاده کنند باید بیش از همیشه به قوانید آن پایبند باشید تا پروژه ی شما استانداردهای یک سایت خوب را داشته باشد.
در الگوی MVVM داده ها بین ویو و ویو مدل گردش می کنند و مستقیما به سرور نمیروند.
آشنایی با الگوی MVVM

بسیاری از برنامه نویسان ASP با الگوی MVC آشنایی دارند. اما مدل MVVM که به معنی Model - View - ViewModel است کمتر مورد استفاده قرار میگیرد.

اولین نکته این است که پیاده سازی سایت با الگوی MVVM بر مبنای تکنولوژی ASP ممکن نیست.

در این الگو داده ها بین UI و ViewModel که چیزی شبیه همان کنترلر در mvc است گردش می کنند و بلا فاصله به دیتابیس منتقل نمی شوند.

تمامی سایت های SPA از این الگو استفاده می کنند. هر وقت از ابزای مانند knockout.js یا آنگولار استفاده می کنید یک برنامه ی جاوا اسکریپت وظیفه ی مدیریت و اعتبار سنجی داده ها را بر عهده میگیرد.

در این روش تغییرات در دیتا به صورت ظاهری تغییر میکنند اما در عمل به صورت یک ajax به سرور ارسال می شوند که معمولا در لحظه روی نمی دهد.

وقتی مجبور نیستید برای مدیریت اطلاعات آنها را بعد از هر تغییر به سرور ارسال کنید از ترافیک سرور کم می کنید و کمتر صفحه رفرش میشود. در نتیجه رابط کاربری روانتر کار میکند.

لازم نیست یک سایت برای همه ی قسمت ها از این الگو استفاده کند. بلکه اگر فقط برای صفحاتی که کاربر با آنها زیاد سرو کار دارد هم پیاده شود هم تاثیر بسیار مطلوبی در UX می گذارد.

یکی از بهترین ابزار برای پیاده سازی الگوی MVVM در سایت های ASP Core فریم ورک Vue.js است.
چرا جاوا اسکریپت؟


تکنولوژی های سمت سرور برای طراحی رابط کاربری ساخته نشده اند و ابزار مناسبی هم برای اینکار نیستند.

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

علاوه بر زیبایی استفاده از جاوااسکریپت از ترافیک سرور و پهنای باند شبکه هم کم میکند. وقتی از javascript استفاده می کنید فقط داده ها را دانلود می کنید که در مقایسه با تمام محتویات صفحه حجم به مراتب کمتری دارد.

وقتی وظایفی از قبیل جستجو، اعتبار سنجی و مرتب سازی را به جاوااسکریپت میسپارید از رم و پردازشگر کاربر کمک می گیرید. این کمک به حدی نیست که روی سیستم کاربر اثر منفی داشته باشد اما حجم بسیار بالایی از منابع سرور را آزاد میکند.

پیاده سازی سایت با ajax و وب سرویس پیچیده تر است و زمان بیشتری میبرد. اما هزینه ای است که در برابر نتیجه ی کار ارزشش را دارد.
Forwarded from کدهک
مسیر اجرای یک برنامه ی ASP Core 2 از متد Main در فایل program.cs شروع میشود. سپس سازنده ی کلاس startup.cs اجرا میشود. در ادامه کدها ConfigureServices و Configure اجرا میشوند.
متد Async لزوما سریعتر از Sync نیست اما در این روش منابع سیستم بهینه تر مورد استفاده قرار می گیرند.
فرق بین Async و Sync

در برنامه نویسی وب همیشه توصیه میشود از متدهای Async استفاده کنید. معمولا پیاده سازی متدهای Async پیچیده تر است و کد نویسی آن زمان بیشتری می برد. در این روش منابع سرور به سرعت آزاد میشود و می تواند به Request های بیشتری پاسخ دهد.

استفاده از Async لزوما به معنی سریعتر شدن اجرای برنامه نیست. تضمینی وجود ندارد که متدهای Async در Thread مجزا اجرا شوند. در واقع Async یا برنامه نویسی موازی فرق دارد. در برنامه نویسی موازی سیستم عامل را مجبور می کنید از چند Thread مجزا برای اجرای چند عملیات استفاده کند اما در Async این انتخاب به عهده ی سیستم عامل است و اجباری وجود ندارد.

فرق اساسی Async با Sync در زمان اجرای دستورات است. در Sync یک درخواست بلافاصله اجرا می شود و بقیه سیستم باید منتظر پایان آن بماند. اما در Async درخواست به سیستم ارسال میشود و سیستم تضمین میدهد که پایان آن را در سریعترین زمان ممکن برگرداند اما اینکه دقیقا کی اجرا میشود را اعلام نمی کند.

از آنجا که زمان پایان در Async مشخص نیست Thread بعد از ارسال درخواست به سیستم بلافاصله آزاد میشود و می تواند Request جدیدی را دریافت کند. در واقع می توان گفت در سرور Sync منابع سیستم بعد از پایان یک Request آزاد میشود اما در Async بعد از شروع Request آزاد میشود. با این روش درخواستها زودتر در صف پیش میروند و احتمال اینکه درخواستی به علت زمان طولانی انتظار برگشت بخورد کمتر میشود.

در Async کار آهسته و پیوسته پیش میرود و همیشه حرکت رو به جلو وجود دارد. اما در Sync پیشرفت مقطعی است. وقتی ترافیک سرور بالا باشد عدم پیشرفت به خطای Server Time Out منجر میشود. در سرور Sync این حالت تا چند برابر (ضریب توانی) زودتر پیش می آید.
آموزش کار با دیتابیس ASP Core 2.0 - MVC

http://codehaks.com/gallery/more/8
روش Async در عملیات های I/O Bound فوق العاده موثر عمل می کند. کار با دیتابیس و فایل از نوع I/O Bound است و همیشه می توانید از تکنیک Async برای بالا بردن بازدهی سرور استفاده کنید.
منظور از I/O Bound چیست ؟

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

در اینجا در دو مرحله متصدی بانک بیکار بود و منتظر ورود (پر کردن فرم) و یا خروج اطلاعات (چاپ کارت) بود. اما خود عملیات بانکی زمان بسیار کمتری گرفت. وقتی ورود و خروج اطلاعات از پردازش آن زمان به مراتب بیشتری میگیرد عملیات Input/Output Bound است. یعنی مدت زمان اجرای عملیات به مدت زمان ورود و خروج اطلاعات بستگی بیشتری دارد تا خود پردازش.

وقتی عملیات I/O Bound باشد استفاده از تکنیک Async می تواند بهره وری سیستم را افزایش دهد. فرض کنید در مثال بالا 4 نفر دیگر جهت تعویض کارت به بانک مراجعه کنند. اگر متصدی بانک از روش Sync استفاده کند همه ی آن 4 نفر باید منتظر پایان کار شما و افراد جلوتر در صف باشند. یعنی کل کارها در 55 دقیقه انجام میشود.

اما اگر کارها به روش Async انجام شود متصدی بانک بلافاصله بعد از آنکه فرم را به شما داد آزاد می شود و می تواند در مدت زمانی که شما فرم را پر می کنید درخواستهای 4 نفر دیگر را بررسی کند .

با روش Async کل کار در مدتی حدود 15 دقیقه انجام میشود و همه ی کارتها با اخلاف زمانی 1 دقیقه از هم تحویل میشود. در این روش مدت زمان واحد هر کار ثابت است و عملیات تعویض کارت همیشه 11 دقیقه طول میکشد. اما از آنجایی که متصدی بانک بجای بیکار بودن درخواستهای بعدی صف را شروع می کند در 4 برابر سرعت بیشتر کارها را انجام می دهد.

روش Async در عملیات های I/O Bound فوق العاده موثر عمل می کند. کار با دیتابیس و فایل در سرور از نوع I/O Bound است و همیشه می توانید از تکنیک Async برای بالا بردن بازدهی سرور استفاده کنید.

وقتی عملیات از نوع CPU Bound باشد استفاده از Async کمک زیادی نمی کند. در مثال بالا پردازش اطلاعات یعنی کاری که توسط متصدی بانک انجام میشود CPU bound است. معمولا عملیات های محاسباتی که درون CPU انجام میشود به خودی خود سریع است. در واقع CPU سریعترین بخش رایانه است و سخت بتوان از آن فراتر رفت یا آن را دور زد. بهترین راه بالا بردن بازدهی در این موارد استفاده از پردازشگرهای چند هسته ای است.
آموزش مبانی برنامه نویسی در ASP Core

http://codehaks.com/gallery/more/4/asp-core-20
فیلترهای ASP Core MVC در مسیر درخواست و پاسخ قرار می گیرند و می توانند آنها را تغییر دهند.
آشنایی با فیلترهای ASP Core MVC

فیلترهای بخشی از فریم ورک MVC هستند و شامل خود ASP Core نمی شوند. قبل از اینکه درخواست به اکشن درون کنترلر برسد از فیلترها عبور می کند . فیلترهای به صورت Attribute به متدهای اکشن اضافه می شوند و می توانند جلوی اجرای اکشن را بگیرند یا داده های آن را تغییر دهند. همچنین فیلترها یی برای بعد از خروج اطلاعات از اکشن وجود دارد و می توانند ویو یا داده های خروجی از اکشن را تغییر دهند.

فیلتر Authorizetion
این فیلتر جهت امنیت و دسترسی استفاده میشود و قبل از سایر فیلترها اجرا میشود. در صورتی که کاربر دسترسی به اکشن مربوطه را نداشته باشد آن را به صفحه ی ورود Redirect می کند. معمولا از Identity برای تشخیص هویت استفاده میشود و نیازی به پیاده سازی این نوع فیلترها وجود ندارد.

فیلتر Resource
این فیلتر اطلاعات بعد از Authorization اجرا میشود و داده های خام درخواست و پاسخ را داراست. می توانید اطلاعات را قبل از آنکه وارد Model Binding شوند تغییر دهید. مثلا اگر اطلاعات مشخصات کاربر جاری را در مدل پر کنید اینجا جای خوبی است.

فیلتر Action
یکی از پر کاربرد ترین فیلترهاست. همه ی اطلاعات بلافاصله قبل و بعد از اکشن به این فیلتر میرود. اگر میخواهید اطلاعات را لوگ یا اعتبار سنجی کنید این گزینه ی شماست.

فیلتر Exception
هر وقت خطایی در اکشن یا فیلتر روی میدهد در این فیلتر می توانید آن را مدیریت کنید. در غیر این صورت اجرا نمی شود.

فیلتر Result
این فیلتر روی اطلاعات خروجی از اکشن اعمال میشود. مثلا می توانید فیلتری بنویسید که با توجه به درخواست کاربر اطلاعات خروجی را به صورت json یا xml یا فایل csv برگرداند بدون اینکه کدهای درون اکشن را تغییر دهید.

فیلترها قابلیت تزریق وابستگی دارند و می توانید درون فیلتر به دیتابیس دسترسی پیدا کنید. همچنین همه ی فیلترها به دو روش Async و Sync قابل پیاده سازی هستند.
استفاده از فیلترها روش خوبی برای حذف کدهای تکراری است و بخشی از معماری aspect-oriented programming است و خوب است تا می توانید از آنها بهره ببرید. با استفاده از فیلترها کدهای درون اکشن کم میشود و مدیریت کنترلرها ساده تر میشود.
کانال Codehaks با 50 هزار بازدید در سالی که گذشت.
در سال جدید هم با ما در آپارات همراه باشید .

http://www.aparat.com/codehaks
فریم ورک ASP Core در موارد زیادی از NodeJS الگو برداری کرده است. محبوبیت نود باعث شد مایکروسافت تغییرات زیادی در روند کاریش دهد.