DotNetZoom
3.13K subscribers
342 photos
18 videos
36 files
606 links
DotNetZoom
💎 Everything about .NET

ارتباط با مدیر و تبلیغات آگهی استخدام:
@mjebrahimi

لینک گروه ASPNET Core:
https://t.me/+ufG25x7lVFgyYTNk
Download Telegram
Forwarded from کدهک
آشنایی با Dapper و مقایسه آن با EF Core

https://youtu.be/U7Z7qKn_gkM
آپلود فایل های بسیار حجیم در ASP.NET Core

واسه فایل های نه چندان حجیم (مثلا تا 200 الی 300 مگابایت) میتونین از 2 آموزش زیر استفاده کنین که ترفنداشو بهتون میگه

http://www.binaryintellect.net/articles/612cf2d1-5b3d-40eb-a5ff-924005955a62.aspx

https://www.talkingdotnet.com/how-to-increase-file-upload-size-asp-net-core/

🔰 ولی اگه فایل هاتون خیلی حجیم هست (مثلا 500 مگ به بالا تاااااا چندین گیگابایت)
بهتره از روش Chunk (خرد کردن فایل حجیم به تکه های کوچیک تر و سپس آپلود این تیکه ها و نهایتا جمع کردنش سمت سرور) استفاده کنین

🔸سمپل زیر این قابلیت رو به خوبی پیاده سازی کرده
واسه این روش باید هم سمت سرور کدشو بنویسین و هم سمت کلاینت، از پلاگینی استفاده کنین که کار Chunk کردن رو براتون انجام بده (البته دستی هم میشه ولی با پلاگین راحت تره) مثلا این سمپل از پلاگین Resumable.js استفاده کرده

https://github.com/edsoncunha/chunked-file-upload-csharp
نکته : واسه اجرا حتما برنامه رو روی Kestrel اجرا کنین وگرنه در حالت IISExpress محدودیت هایی داره
_______________
@DotNetZoom
هفته به هفته با برترین مقالات NET.

اگه علاقمند به مطالعه برترین مقالات دات نت و دنبال کردن اخبار روز دنیای دات نت هستین، بهترین راه اینه که تو سایت های خبرنامه هفتگی این حوزه ثبت نام کنین تا هر هفته، محبوب ترین مقالات و اخبار رو تو ایمیل خودتون دریافت کنین

🔰لیست زیر گلچینی از بهترین سایت های خبرنامه های دات نتی هست. کافیه توش ثبت نام کنین یا با برنامه های فید خوان RSS اونا رو دنبال کنین

🔸https://csharpdigest.net/
🔹https://dotnet.libhunt.com/
🔸https://aspnetcore.news/
🔹https://dotnetkicks.com/
🔸https://discoverdot.net/
🔹https://www.dotnetweekly.com/
🔸https://www.alvinashcraft.com/
🔹https://olegkarasik.wordpress.com/
🔸https://dotnettips.info/ (آخرین لینک ها و خبر ها)
___________________
@DotNetZoom
بعضی نیازهای روزمره برنامه نویسی در همه زبان ها همیشه مورد نیاز هستند. مهم ترین اینها توابع و کتابخانه های کار با اعداد و زبان و تبدیل های مختلف اونهاست.
حالا آقای علی ترکی عزیز به همراه چندنفر دیگر یک کتابخانه با کیفیت برای js نوشتند که تقریبا همه این نیازهای روزمره را پوشش میدهد.
نمونه مواردی که این کتابخانه پوشش میدهد:
• تبدیل اعداد به حروف و برعکس (مثلا:‌تبدیل ۳۰۰ به سی صد و برعکس).
• حذف و اضافه کردن کاما به اعداد.
• تبدیل اعداد فارسی به انگلیسی و عربی و عربی به انگلیسی و فارسی.
• تایید و اعتبارسنجی کد ملی.
• دریافت نام استان و شهرستان با کد ملی.
• تایید و اعتبارسنجی شماره عابر بانک.
• دریافت نام بانک توسط شماره عابر بانک.
• تایید و اعتبارسنجی متن فارسی ( به عنوان مثال:‌ درصورتی که متن وارد شده فارسی باشد true برمیگرداند )
• تمیز کردن متن فارسی از حروف عربی و unicode ها.

تمامی مثال ها و اطلاعات تکمیلی رو میتونید توی صفحه گیت هاب پروژه مشاهده کنید.
https://github.com/persian-tools/persian-tools

@abooraja_ir
وب اسمبلی (WebAssembly) چیه؟ و چرا آینده Web هست؟!

وب اسمبلی (یا WASM مخفف WebAssembly) یک زبان low-level (سطح پایین) با فرمت Binary (دو-دویی) هست که توسط مرورگر اجرا میشه

🔸در اینجا چندتا نکته مهم وجود داره:
1️⃣ اول اینکه یه زبان سطح-پایین هست و با پرفرمنسی نزدیک به Native اجرا میشه (اصلا یکی از اهداف اصلی ایجاد WASM اجرا سریع تر کدها توی مروگر بود)

2️⃣ برخلاف js به جای اینکه فرمت متنی داشته باشه، فرمت باینری (دو-دویی) داره که باعث میشه کد حجم کمتری داشته باشه در نتیجه این به معنی بارگزاری سریع تر نیز هست
در واقع وقتی کدی قراره human-readable باشه حجم بیشتری میگیره تا اینکه باینری باشه. مشابه این اتفاق برای سریالایز کردن به json در مقایسه با binary formatter هایی مانند protobuf و message-pack هم اتفاق میافته. ضمن اینکه کدی که به صورت باینری باشه امکان فشرده سازی بیشتر و بهینه تری داره

3️⃣ علاوه بر حالت باینری، یه حالت متنی (به صورت S-expression) هم داره که human-readable هست و قابلیت دیباگ و خوانایی خوبی داره
این فرمت در قالب فایل های با پسوند wat. یا wast. ذخیره میشه که میتونین نمونه کدش رو اینجا ببینین (البته در گذشته این دو معادل هم بودند ولی جدیدا بیشتر wat. برای اینکار استفاده میشه)

4️⃣ گرچه در ابتدا WASM برای اجرا توی مروگر طراحی شده بود ولی بعد ها توی پلتفرم های دیگه هم مورد استقبال قرار گرفت و یه سری Runtime هایی (مانند wasmer و wasmtime) براش نوشته شد که این امکان رو میده که برنامه های WASM رو توی Desktop و IoT و Server و... اجرا بشن

5️⃣ این زبان در کنار خودش یه سری کامپایلر (از جمله emscripten و binaryen) ارائه داده تا زبان های low-level ایی همچون C و ++C و Rust بتونن کدشون رو به WASM کامپایل کنن
زبان های دیگه هم از جمله #C و Java و Python و Go به این سمت حرکت کردن و امکان اجرای کد هاشون رو توی مرورگر فراهم کردند
به عنوان مثال Blazor امکان اجرا کد های #C رو در مرورگر فراهم میکنه
مزیت این روش اینه که شما به زبون های دلخواه خودتون میتونین کدی بنویسین که توی مرورگر اجرا بشه. یعنی اصلا نیاز نیس زبان WASM رو بلد باشین.

🔹حالا سوال مهم اینه که این زبان جای JavaScript رو میگیره؟
جواب: نه، اصلا نمیتونه. WASM اومده که مکمل JS باشه و ضعف های اون رو برطرف کنه
زبان JS تو پلتفرم های زیادی استفاده میشه و جامعه بسیار بزرگی داره پس نه WASM نه هیچ زبان دیگه ای نمی تونه اون رو کنار بزنه (حداقل به این زودی ها نه)
در واقع تنها مزیت منحصر به فرد JS سمت Front این بود که تنها پادشاه سمت مرورگر بود. ولی الان که امکان اجرای زبان های دیگه سمت مرورگر فراهم شده عملا راه برای ظهور پادشاه های دیگری هم فراهم شده
یکی از کارهای دیگری که در این زمینه انجام شده AssemblyScript هست که در واقع یک کامپایلر TypeScript به WASM هست که سینتکس کدش کاملا TS نیست ولی شبیه اونه و نهایتا کد های شما رو به WASM کامپایل میکنه

🔸در آخر نکته مهم اینه که که بدونین این تکنولوژی محکوم به اینه که آینده وب باشه!
یعنی حتی اگه این زبان از خودش هیچ آورده ای هم نداشته باشه بازم مسیر توسعه وب در آینده به سمت اون هدایت میشه (توسط دست های پشت پرده :دی) .
چرا؟ چون توسط بنیاد W3C (کنسرسیوم جهانی وب) به عنوان یه استاندارد شناخته شده و نیز شرکتای غولی همچون Google و Microsoft و Mozilla و Apple و Intel و Red Hat و... روش سرمایه گذاری کردن
میگن اگه میخوای پیش گوی خوبی باشی، آینده رو پیش بینی نکن، اون رو بساز. و این ها در واقع کسانی هستند که مسیر توسعه وب رو پیش بینی نمیکنند بلکه اون رو خودشون میسازند

🔰اگه میخواین بیشتر در مورد WebAssembly بدونین این مقاله خوبیه
_______________
@DotNetZoom
❇️ یه وایت بورد آنلاین خیلی خوب واسه کار های تیمی

🔸خیلی وقتا موقع کار تیمی لازم میشه با هم تیمی تون تعامل داشته باشین، روی وایت برد برای هم توضیح بدین، شکل رسم کنین و یا استیکی نوت بچسبونین
حالا که خیلی از برنامه نویسا به صورت ریموت کار میکنن وجود یه وایت بورد آنلاین خیلی میتونه کاربردی باشه

🔹سایت miro یه وایت برد آنلاین خیلی باحال و کاربردی هست که توش میتونین فلوچارت رسم کنین، با ماژیک شکل رسم کنین، Stiky Note بچسبونین و افراد مختلفی به اون متصل بشن و به صورت Real-time با هم دیگه تعامل کنن (البته پولیه ولی نسخه رایگانش تا محدودیت 3 تا بورد رو به شما میده)


🔰چند نمونه از کاربرد هاش برای تیم ها میتونه اینها باشه:
✔️ ترسیم فلوچارت و فرایند های بین فرم ها
✔️ ترسیم نیازمندی های پروژه
✔️ برنامه ریزی های گروهی
✔️ طوفان فکری و ایده پردازی جمعی
✔️ برگزاری رویداد های Event Storming جهت فهم بهتر دامنه
✔️ و...
https://miro.com/
__________________
@DotNetZoom
❇️ یک پروژه FullStack سورس باز SPA با Angular 11 و Asp.Net Core 5.0

💎 تکنولوژی ها و امکانات :
✔️ASP.NET Core 3.1
✔️Entity Framework Core 3.1
✔️Sql Server and Sqlite supporte
✔️Identity Server 4
✔️Angular 8
✔️Secure - CSP Headers
✔️SignalR
✔️SASS
✔️Angular Best practices
✔️Clean Architecture
✔️PWA support
✔️SSR (Server side rendering)
✔️Fast Unit Testing with Jest.
✔️E2E testing with Protractor.
✔️Compodoc for Angular documentation
✔️Swagger as Api explorer

🔰مخزن گیتهاب
https://github.com/asadsahi/AspNetCoreSpa
_________________
@DotNetZoom
❇️ ترجمه گروهی کتاب کدتمیز Clean Code

https://github.com/Noah1001000/clean-code-persian
____________________
@DotNetZoom
Forwarded from کدهک
آشنایی با Mini-Profiler

با استفاده از miniprofiler می توانید مدت زمانی که برای اجرای هر عملیات طول میکشد بدست آورید و پرفورمنس بخش های مختلف وبسایت خود را بررسی کنید .

https://youtu.be/83Vqz1lb3V4
سایت ساز Ghost : یک CMS ساده و سبک Nodejs ایی مناسب برای وبلاگ شخصی

اگه قصد راه اندازی یه بلاگ شخصی ساده و راحت دارین، سایت ساز Ghost شاید بهترین گزینه برای شما باشه

✔️ کلی تم زیبا و متنوع داره
✔️ کلی افزونه کاربردی داره
✔️ خیلی خوش دست و راحته
✔️ بسیار سبکه و میتونه از دیتابیس SQLite استفاده کنه
✔️ قابل سفارشی سازی هست و رایگانه

🔸مشاهده Demo و Showcase ها
🔹مشاهده مستندات و آموزش ها

🔰ریپازیتوری گیتهاب پروژ + طریقه استفاده
https://github.com/TryGhost/Ghost
___________________
@DotNetZoom
بررسی عملی CQRS - بخش اول: مقدمه ای بر CQRS

حتما راجب CQRS شنیده اید. در لغت CQRS مخفف Command and Qhery Responsibility Segregation می باشد که در اون سعی میکنیم مدل های خواندن و نوشتن و همچنین مسیر خواندن و نوشتن داده را از یکدیگر جدا کنیم. CQRS مزایای زیادی رو به همراه داره از جمله اینکه با جدا شدن مدل Read و Write میتونیم جداگانه روی هر کدوم optimization انجام بدیم و پرفرمنس مربوط به هر بخش رو جداگانه بهبود بدیم.
در این مقاله چند قسمتی به بررسی عملی CQRS می پردازیم و به تکنیک های ویژه پیاده سازی اون به وسیله الگوی Mediator و کتابخانه MediatR میپردازیم، و سعی میکنیم با جداسازی مدل های Read و Write و همچین دیتابیس های مربوط به هر بخش، یک سولوشن تمیز رو ارائه بدیم

#بابک_طارمی
🔰لینک مقاله:
https://vrgl.ir/01pUA
____________________
@DotNetZoom
افزونه Enhanced GitHub برای گیتهاب باز ها

این افزونه امکانات خوبی رو به گیتهاب شما اضافه میکنه

1- نمایش حجم ریپازیتوری
2- نمایش حجم هر فایل
3- امکان دانلود تک فایل دلخواه از ریپازیتوری

🔸لینک دانلود
https://chrome.google.com/webstore/detail/enhanced-github/anlikcnbgdeidpacdbdljnabclhahhmd

🔹مخزن گیتهاب و اموزش استفاده
https://github.com/softvar/github-plus
____________________
@DotNetZoom
آموزش gRPC در ASP.NET Core - قسمت اول

جی آر پی سی (gRPC) یک فریمورک رایگان، پر سرعت، قدرتمند و متن بازِ RPC است که توسط Google توسعه داده شده.

توسط این فریمورک میتوان API هایی از نوع RPC ساخت. مکانیزم RPC این امکان رو به ما میده که API هایی توسط یک برنامه Server به بیرون ارائه بشه و Client ها بتونن اون ها رو فراخوانی کنن.

فریمورک gRPC برای تبادل دیتا بین کلاینت و سرور از Protocol Buffer (یا به اختصار protobuf) استفاده میکنه که یک کتابخونه Serializer به صورت باینری هست که بسیار سریع هست
و به خاطر مزایایی که gRPC داره، استفاده از اون برای تعامل بین Microservice ها خیلی مورد استقبال قرار گرفته

🔰از مزایای gRPC میشه به موارد زیر اشاره کرد
1️⃣ سریع تر از RESTful هست
2️⃣ بدلیل فشرده سازی ایی که توسط protobuf انجام میشه حجم دیتای کمتری رد و بدل میشه و درنتیجه سریعتر از JSON هست
3️⃣ از HTTP2 استفاده میکنه که نسبت به نسخه های قبلی HTTP سریعتر و امن تر هست
4️⃣ از 3 روش Streaming پشتیبانی میکنه: از کلاینت به سرور، از سرور به کلاینت، و نیز Streaming دو طرفه
5️⃣ ساختار contract-first داره و توی همه زبان ها میشه ازش استفاده کرد

در این مقاله میخواهیم یک آشنایی اجمالی با gRPC داشته باشیم و یک پروژه خیلی ساده رو با اون در ASP.NET Core پیاده سازی کنیم

#آرمین_شعیبی_نژاد
https://vrgl.ir/U1mV1
________________
@DotNetZoom
This media is not supported in your browser
VIEW IN TELEGRAM
❇️ کدنویسی سریع تر و راحت تر در Visual Studio با این ترفند

🔶 توسط این قابلیت چیزایی که namespace شون رو using نکردین هم براتون توی IntelliSense میاره و زمانی که تایپ تون کامل بشه خودش namespace اش رو هم using میکنه. اینطوری دیگه لازم نیس نگران این باشین که فلان class یا extension method توی کدوم namespace بود (چیزی شبیه Resharper)

🔷 این قابلیت از قبل به Visual Studio 2019 اضافه شده ولی هنوز به صورت Experimental (آزمایشی) هست و به صورت پیشفرض فعال نیست

🔰 واسه فعال کردنش باید برین توی منوی Tools سپس گزینه Options رو انتخاب کنین و از قسمت زیر (یا سرچ کردن متن IntelliSense توی سرچ باکس)
▶️ TextEditor > C# > IntelliSense
و گزینه زیر رو "تیک کامل" بزنین.
Show items for unimported namespaces (experimental)
___________________
@DotNetZoom
❇️ افزونه Refined GitHub مخصوص Github باز های حرفه ای

اینقدر قابلیت های کاربردی و مفیدی که به گیتهاب شما اضافه میکنه زیادهههه، که نمیشه اصلا لیست کرد!
کافیه یه سر به لیست features هاش توی ریپازیتوریش بزنین
فقط به درد گیتهاب باز های حرفه ای میخوره نه اونایی که فقط از گیتهاب دانلود و clone و یا حتی pull, commit و push بلدن!
خیلی خیلی به درد کسایی میخوره که issue میزنن، fork میکنن، branch میسازن، pull request میزنن، comment میزارن و توی discussion ها فعال هستند.


🔸لینک دانلود افزونه مخصوص Chrome
https://chrome.google.com/webstore/detail/refined-github/hlepfoohegkhhmjieoechaddaejaokhf

🔹مخزن گیتهاب و اموزش استفاده
https://github.com/sindresorhus/refined-github
__________________
@DotNetZoom
چطور در EF Core آی دی کاربر را در فیلتر گلوبال استفاده کنیم.

https://youtu.be/c4RBaoqw52Y
افزایش Performance با شرط گذاری روی Include ها در EF Core

میشه گفت مهم ترین و رایج ترین دلیل کاهش پرفرمنس توی پروژه ها، واکشی دیتای اضافی و کوئری های غیر ضروری هست؛ از واکشی فیلد های اضافی و غیر لازم گرفته تا استفاده بی رویه از Include به هنگام بارگزاری روابط و...

در این مقاله روش های مختلف شرط گزاری روی Include ها و بهینه سازی اونها رو بررسی میکنیم. همچنین روش های مختلف رو از نظر سرعت و میزانی memory allocation (تخصیص حافظه) مقایسه میکنیم

🔰لینک مقاله
https://vrgl.ir/JFkK4
______________
@DotNetZoom
دان شدن سایت dotnettips.info و راه حل ها

متاسفانه چند روزیه سایت dotnettips.info بالا نمیاد و ظاهرا مشکل DNS پیدا کرده و دامین اش معلق شده
امیدواریم که زودتر این مشکل برطرف بشه ولی تا اون زمان 2 راه حل وجود داره

🔰بروزرسانی:
سایت فعلا از طریق آدرس زیر هم در دسترس هست
https://www.dntips.ir/

🔸راه اول و پیشنهادی : میتونین آرشیو کامل سایت رو از لینک زیر دانلود و مشاهده کنین
https://mega.nz/#F!eXgQlaLJ!Ky-mPPDvJkT9rlCaM2EJ-A

🔹راه بعدی که صرفا مختص به این سایت هم نیست و شما هر سایت دیگه ای که دان شده باشه رو میتونین مشاهده کنین اینه که از سایت web.archive.org استفاده کنین. این سایت یه Crawler (ربات خزنده) هست که سایت ها رو در زمان های مختلف بهشون سر میزنه و ازشون یه کپی Snapshot میگیره. بدین صورت امکانش هست که هر سایتی رو به صورت آفلاین مشاهده کنین (در این حالت ممکنه بعضی از عملکرد های سایت کار نکنه. همچنین این ربات گاها به سایت ها سر میزنه پس احتمال خیلی زیاد مطالب بروز نباشن)

مثلا این ادرس آخرین Snapshot سایت dotnettips.info هست
https://web.archive.org/web/20201121183655/https://dotnettips.info/
________________
@DotNetZoom
بررسی عملی CQRS- بخش دوم: بررسی الگوی Mediator با استفاده از کتابخانه MediatR

در بخش قبل به طور اجمالی با CQRS آشنا شدیم و اشاره کردیم که الگوی Mediator ، سولوشن تمیز تری را ارائه میدهد و باعث ایجاد Loose Coupling میشود.
یکی از ابزار های موجود در دات نت برای ایجاد الگوی Mediator ، کتابخانه MediatR ساخته جیمی بوگارد است. کار با این کتابخانه بسیار سرراست و راحت است و ویژگی های بسیار خوبی برای Request Pipelining و همچنین الگوی Pub/Sub را به همراه خود دارد
در این مقاله به بررسی کامل این کتابخانه محبوب، ویژگی های آن و پیاده سازی تکنیک هایی مانند Logging ، Unit of Work و... به وسیله این کتاب خانه میپردازیم

#بابک_طارمی
https://vrgl.ir/0a7QA
______________
@DotNetZoom
کتابخانه DbContext مخصوص MongoDb (مشابه Entity Framework)

اگه قبلا با EF یا EF Core کار کردین و الان میخواین از MongoDb استفاده کنین یکی از راحت ترین گزینه ها کتابخانه MongoFramework هست
این کتابخونه یک رابط کاربری (Interface) مشابه Entity Framework رو در اختیارتون میذاره یعنی یه کلاس DbContext و یه سری متد مشابه EF در اختیارتون میذاره تا بتونین تجربه مشابهی رو باهاش داشته باشین، متنها با MongoDb

🔰مثلا :
✔️ امکان داشتن DbContext و DbSet ها
✔️ وجود متد SaveChange و ترانزکشنال بودن اون
✔️ امکان استفاده از Attribute ها روی entity ها و property هاتون و مپ کردن اونها به دیتابیس mongo
✔️ امکان ایندکس گذاری توسط Attibute ها
✔️ وجود قابلیت Change Tracker مشابه EF
✔️ قابلیت partial update (بروزرسانی فقط فیلد های تغییر پیدا کرده)

🔰نکته:
🔸دقت داشته باشین که این کتابخونه یک پروایدر مخصوص EF Core نیست و روی اون قابل نصب کردن باشه؛ کلا یه کتابخونه جداست که فقط مشابه اون عمل میکنه
🔹هرچند که این کتابخونه سعی کرده خودشو خیلی شبیه به EF Core کنه و امکانات اون رو تو خوش فراهم کنه ولی به دلیل تفاوت ساختار Sql و NoSql این کار به صورت 100% ایی قابل انجام نیست. پس این کتابخونه هم یه سری از امکانات EF Core (مخصوصا تو سطح پیشرفته، بسیاری از امکاناتش) رو نداره
🔸این کتابخونه برای کار های ساده و مبتدی خوبه (مثلا برای کسانی که میخوان mongo بلد نیستن ولی میخوان یه استفاده حداقلی و البته راحت ازش داشته باشین خوبه)
🔹ولی برای کار ها پیشرفته و پروژه های بزرگ قطعا پیشنهاد نمیکنم. در اون سطح بهترین روش استفاده از خود درایور سی شارپ mongodb هست.

🔰ریپازیتوری گیتهاب پروژ به همراه آموزش:
https://github.com/TurnerSoftware/MongoFramework
__________________
@DotNetZoom