✅ افزایش Performance با شرط گذاری روی Include ها در EF Core
میشه گفت مهم ترین و رایج ترین دلیل کاهش پرفرمنس توی پروژه ها، واکشی دیتای اضافی و کوئری های غیر ضروری هست؛ از واکشی فیلد های اضافی و غیر لازم گرفته تا استفاده بی رویه از Include به هنگام بارگزاری روابط و...
در این مقاله روش های مختلف شرط گزاری روی Include ها و بهینه سازی اونها رو بررسی میکنیم. همچنین روش های مختلف رو از نظر سرعت و میزانی memory allocation (تخصیص حافظه) مقایسه میکنیم
🔰لینک مقاله
https://vrgl.ir/JFkK4
______________
@DotNetZoom
میشه گفت مهم ترین و رایج ترین دلیل کاهش پرفرمنس توی پروژه ها، واکشی دیتای اضافی و کوئری های غیر ضروری هست؛ از واکشی فیلد های اضافی و غیر لازم گرفته تا استفاده بی رویه از Include به هنگام بارگزاری روابط و...
در این مقاله روش های مختلف شرط گزاری روی Include ها و بهینه سازی اونها رو بررسی میکنیم. همچنین روش های مختلف رو از نظر سرعت و میزانی memory allocation (تخصیص حافظه) مقایسه میکنیم
🔰لینک مقاله
https://vrgl.ir/JFkK4
______________
@DotNetZoom
ویرگول
شرط گذاری روی Include ها در EF Core
متداول ترین دلیل کاهش پرفرمنس توی پروژه ها، واکشی دیتای اضافی و کوئری های غیر ضروریه؛ اینو به تجربه توی اکثر پروژه هایی که بررسی کردم دیدم
✅ دان شدن سایت 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
متاسفانه چند روزیه سایت 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
mega.nz
MEGA provides free cloud storage with convenient and powerful always-on privacy. Claim your free 20GB now
✅ بررسی عملی CQRS- بخش دوم: بررسی الگوی Mediator با استفاده از کتابخانه MediatR
در بخش قبل به طور اجمالی با CQRS آشنا شدیم و اشاره کردیم که الگوی Mediator ، سولوشن تمیز تری را ارائه میدهد و باعث ایجاد Loose Coupling میشود.
یکی از ابزار های موجود در دات نت برای ایجاد الگوی Mediator ، کتابخانه MediatR ساخته جیمی بوگارد است. کار با این کتابخانه بسیار سرراست و راحت است و ویژگی های بسیار خوبی برای Request Pipelining و همچنین الگوی Pub/Sub را به همراه خود دارد
در این مقاله به بررسی کامل این کتابخانه محبوب، ویژگی های آن و پیاده سازی تکنیک هایی مانند Logging ، Unit of Work و... به وسیله این کتاب خانه میپردازیم
#بابک_طارمی
https://vrgl.ir/0a7QA
______________
@DotNetZoom
در بخش قبل به طور اجمالی با CQRS آشنا شدیم و اشاره کردیم که الگوی Mediator ، سولوشن تمیز تری را ارائه میدهد و باعث ایجاد Loose Coupling میشود.
یکی از ابزار های موجود در دات نت برای ایجاد الگوی Mediator ، کتابخانه MediatR ساخته جیمی بوگارد است. کار با این کتابخانه بسیار سرراست و راحت است و ویژگی های بسیار خوبی برای Request Pipelining و همچنین الگوی Pub/Sub را به همراه خود دارد
در این مقاله به بررسی کامل این کتابخانه محبوب، ویژگی های آن و پیاده سازی تکنیک هایی مانند Logging ، Unit of Work و... به وسیله این کتاب خانه میپردازیم
#بابک_طارمی
https://vrgl.ir/0a7QA
______________
@DotNetZoom
ویرگول
بررسی عملی CQRS- بخش دوم: بررسی الگوی Mediator با استفاده از کتابخانه MediatR
در این بخش به یکی از ملزومات پیاده سازی CQRS یعنی الگوی Mediator و کتابخانه MediatR می پردازیم
✅ کتابخانه 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
اگه قبلا با 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
www.nuget.org
MongoFramework 0.26.1
An "Entity Framework"-like interface for the MongoDB C# Driver
#سری_معرفی_وسایت_های_برتر
✅ معرفی 10 سایت برتر (سری پنجم)
در مورد #C و NET Core. و ASP.NET Core
🔸توی این سری پست ها هربار 10 وبسایت برتر که از نظر سطح علمی و کیفیت محتوا، بروز و متنوع بودن بهترین هستند رو معرفی میکنم
اینا منابعی هستند که معمولا خودم دنبالشون میکنم
1️⃣ https://enterprisecraftsmanship.com/
2️⃣ https://blog.ploeh.dk/
3️⃣ https://www.kamilgrzybek.com/
4️⃣ https://daveabrock.com/
5️⃣ https://thomaslevesque.com/
6️⃣ https://blog.miguelbernard.com/
7️⃣ https://josef.codes/
8️⃣ https://procodeguide.com/
9️⃣ https://www.thereformedprogrammer.net/
🔟 https://dotnetthoughts.net/
_________________
@DotNetZoom
✅ معرفی 10 سایت برتر (سری پنجم)
در مورد #C و NET Core. و ASP.NET Core
🔸توی این سری پست ها هربار 10 وبسایت برتر که از نظر سطح علمی و کیفیت محتوا، بروز و متنوع بودن بهترین هستند رو معرفی میکنم
اینا منابعی هستند که معمولا خودم دنبالشون میکنم
1️⃣ https://enterprisecraftsmanship.com/
2️⃣ https://blog.ploeh.dk/
3️⃣ https://www.kamilgrzybek.com/
4️⃣ https://daveabrock.com/
5️⃣ https://thomaslevesque.com/
6️⃣ https://blog.miguelbernard.com/
7️⃣ https://josef.codes/
8️⃣ https://procodeguide.com/
9️⃣ https://www.thereformedprogrammer.net/
🔟 https://dotnetthoughts.net/
_________________
@DotNetZoom
✅معرفی کتابخانه MongoDbGenericRepository
قبلا کتابخونه MongoFramework رو معرفی کردیم که یه رابط کاربری شبیه Entity Framework رو برای کار با MongoDb در اختیارمون میذاشت
اون کتابخونه ضمن مزایا و راحتیش، یه سری معایب هم داره چرا که با دید EF طراحی شده و برای استفاده های پیشرفته تر و کاملتر از MongoDb دستمون رو بسته نگه میداره
کتابخانه MongoDbGenericRepository یک wrapper روی درایور سی شارپ MongoDb هست و سعی کرده یه پیاده سازی از Repository ارائه بده.
این کتابخونه نسبت به قبلی، توی سفارشی سازی و استفاده بیشتر و پیشرفته تر از امکانات mongo دستمون رو باز تر میگذاره که طبیعتا نیازمند این هست که دانش بیشتر هم از مونگو داشته باشین
🔰نکته:
🔸این کتابخونه برای کار های متوسط انتخاب خوبیه (مثلا برای کسانی که تا حدودی mongo بلدن و میخوان راحت تر ازش استفاده کنن)
🔹ولی برای کار ها پیشرفته و پروژه های بزرگ خیلی پیشنهاد نمیکنم. در اون سطح بهترین روش استفاده از خود درایور سی شارپ mongodb هست.
🔰ریپازیتوری گیتهاب پروژ به همراه آموزش:
https://github.com/alexandre-spieser/mongodb-generic-repository
______________
@DotNetZoom
قبلا کتابخونه MongoFramework رو معرفی کردیم که یه رابط کاربری شبیه Entity Framework رو برای کار با MongoDb در اختیارمون میذاشت
اون کتابخونه ضمن مزایا و راحتیش، یه سری معایب هم داره چرا که با دید EF طراحی شده و برای استفاده های پیشرفته تر و کاملتر از MongoDb دستمون رو بسته نگه میداره
کتابخانه MongoDbGenericRepository یک wrapper روی درایور سی شارپ MongoDb هست و سعی کرده یه پیاده سازی از Repository ارائه بده.
این کتابخونه نسبت به قبلی، توی سفارشی سازی و استفاده بیشتر و پیشرفته تر از امکانات mongo دستمون رو باز تر میگذاره که طبیعتا نیازمند این هست که دانش بیشتر هم از مونگو داشته باشین
🔰نکته:
🔸این کتابخونه برای کار های متوسط انتخاب خوبیه (مثلا برای کسانی که تا حدودی mongo بلدن و میخوان راحت تر ازش استفاده کنن)
🔹ولی برای کار ها پیشرفته و پروژه های بزرگ خیلی پیشنهاد نمیکنم. در اون سطح بهترین روش استفاده از خود درایور سی شارپ mongodb هست.
🔰ریپازیتوری گیتهاب پروژ به همراه آموزش:
https://github.com/alexandre-spieser/mongodb-generic-repository
______________
@DotNetZoom
GitHub
GitHub - alexandre-spieser/mongodb-generic-repository: An example of generic repository implementation using the MongoDB C# Sharp…
An example of generic repository implementation using the MongoDB C# Sharp 2.0 driver (async) - alexandre-spieser/mongodb-generic-repository
❇️ نواقص درایور سی شارپ MongoDb
درایور سی شارپ MongoDb یه سری نواقص داره و هنوز به بلوغ کافی نرسیده، مخصوصا توی parser دستورات Linq اش به کوئری های mongo خیلی جای کار داره
پس اگه از MongoDb تو پروژه های خودتون استفاده میکنین یا میخواین بکنین حواستون باشه
تو این ریپازیتوری چند تا باگ خیلی ساده و بدیهی ازش رو مثال زدم
https://github.com/mjebrahimi/MongoDb.Bugs
🔰به عنوان مثال:
1️⃣ شما نمیتونین روی کالشن ها از شرط Contains() == false استفاده کنین
2️⃣ شما نمیتونین از شرط ("text")Contains روی یه فیلد متنی درون یه Embedded Document استفاده کنین
3️⃣ شما نمیتونین از دستور ()ToList روی Embedded Documents ها استفاده کنین
4️⃣ شما نمیتونین از متد ProjectTo کتابخانه AutoMapper برای مپ کردن Embedded Document ها استفاده کنین
🔰نکته:
🔸اینها هیچکدوم محدودیت های خود MongoDb نیستند بلکه نواقص کتابخانه درایور سی شارپ اون هست. درواقع Parser ایی که قراره Expression Tree حاصل از دستورات Linq رو به کوئری های mongo ترجمه کنه ضعف داره
🔹این باگ ها رو قبلا گزارش کردم و همگی تائید شدند و قرار هست در آینده برطرفش کنن ولی فعلا زمانش مشخص نیس. طبق صحبت هایی که داشتیم ظاهرا میخوان درایورش رو بازنویسی کنن و توی اون نسخه تمامی این مشکلات برطرف خواهد شد
🔸جهت رفع بعضی از این مشکل ها مادامی که این باگ ها برطرف بشه میتونین از کوئری نویسی دستی به جای linq استفاده کنین
🔹خود mongodb به لحاظ کوئری نویسی بسیار قدرتمند هست و خیلی کار ها رو میشه باهاش کرد که با linq اصلا امکان پذیر نیست (در واقع اصلا متد معادلش توی linq وجود نداره) پس پیشنهاد میکنم برای کوئری های پیچیده حتما به صورت دستی کوئری بنویسین؛ اینطوری میتونین کوئری های های بهینه تر و قدرتمند تری رو ایجاد کنین
____________________
@DotNetZoom
درایور سی شارپ MongoDb یه سری نواقص داره و هنوز به بلوغ کافی نرسیده، مخصوصا توی parser دستورات Linq اش به کوئری های mongo خیلی جای کار داره
پس اگه از MongoDb تو پروژه های خودتون استفاده میکنین یا میخواین بکنین حواستون باشه
تو این ریپازیتوری چند تا باگ خیلی ساده و بدیهی ازش رو مثال زدم
https://github.com/mjebrahimi/MongoDb.Bugs
🔰به عنوان مثال:
1️⃣ شما نمیتونین روی کالشن ها از شرط Contains() == false استفاده کنین
2️⃣ شما نمیتونین از شرط ("text")Contains روی یه فیلد متنی درون یه Embedded Document استفاده کنین
3️⃣ شما نمیتونین از دستور ()ToList روی Embedded Documents ها استفاده کنین
4️⃣ شما نمیتونین از متد ProjectTo کتابخانه AutoMapper برای مپ کردن Embedded Document ها استفاده کنین
🔰نکته:
🔸اینها هیچکدوم محدودیت های خود MongoDb نیستند بلکه نواقص کتابخانه درایور سی شارپ اون هست. درواقع Parser ایی که قراره Expression Tree حاصل از دستورات Linq رو به کوئری های mongo ترجمه کنه ضعف داره
🔹این باگ ها رو قبلا گزارش کردم و همگی تائید شدند و قرار هست در آینده برطرفش کنن ولی فعلا زمانش مشخص نیس. طبق صحبت هایی که داشتیم ظاهرا میخوان درایورش رو بازنویسی کنن و توی اون نسخه تمامی این مشکلات برطرف خواهد شد
🔸جهت رفع بعضی از این مشکل ها مادامی که این باگ ها برطرف بشه میتونین از کوئری نویسی دستی به جای linq استفاده کنین
🔹خود mongodb به لحاظ کوئری نویسی بسیار قدرتمند هست و خیلی کار ها رو میشه باهاش کرد که با linq اصلا امکان پذیر نیست (در واقع اصلا متد معادلش توی linq وجود نداره) پس پیشنهاد میکنم برای کوئری های پیچیده حتما به صورت دستی کوئری بنویسین؛ اینطوری میتونین کوئری های های بهینه تر و قدرتمند تری رو ایجاد کنین
____________________
@DotNetZoom
GitHub
GitHub - mjebrahimi/MongoDb.Bugs: This repo reproduce some bugs of MongoDB C# Driver.
This repo reproduce some bugs of MongoDB C# Driver. - GitHub - mjebrahimi/MongoDb.Bugs: This repo reproduce some bugs of MongoDB C# Driver.
Forwarded from کدهک
آموزش DDD
در این دوره کتابخانه ی MediatR از مقدماتی تا پیشرفته آموزش داده میشود . درباره نحوه پیاده کردن Value Object و Entity و Domain Events و Aggregates ها صحبت می کنیم در ادامه به موضوع اعتبار سنجی، گزارش خطا، ذخیره سازی اطلاعات در دیتابیس های اسنادی و مفاهیمی چون Domain Events و Event Sourcing می پردازیم.
کد تخفیف 25 درصد : ddd
https://codehaks.com/go/ddd
در این دوره کتابخانه ی MediatR از مقدماتی تا پیشرفته آموزش داده میشود . درباره نحوه پیاده کردن Value Object و Entity و Domain Events و Aggregates ها صحبت می کنیم در ادامه به موضوع اعتبار سنجی، گزارش خطا، ذخیره سازی اطلاعات در دیتابیس های اسنادی و مفاهیمی چون Domain Events و Event Sourcing می پردازیم.
کد تخفیف 25 درصد : ddd
https://codehaks.com/go/ddd
Forwarded from کدهک
نتایج دور 20 بنچمارک Techempower اعلام شد
در حالی ترکیبی Composite نمره فریم ورک ASP NET Core برابر 6,462 شد و با 60 درصد در جایگاه هشتم قرار گرفت.
نمره ترکیبی یا Composite Score وزن کلی است که از مجموع همه تست ها بدست می آید و برای مقایسه کلی پرفورمنس فریم ورکهای وب استفاده میشود.
https://www.techempower.com/benchmarks/
در حالی ترکیبی Composite نمره فریم ورک ASP NET Core برابر 6,462 شد و با 60 درصد در جایگاه هشتم قرار گرفت.
نمره ترکیبی یا Composite Score وزن کلی است که از مجموع همه تست ها بدست می آید و برای مقایسه کلی پرفورمنس فریم ورکهای وب استفاده میشود.
https://www.techempower.com/benchmarks/
✅ آموزش gRPC در ASP.NET Core - قسمت دوم
در قسمت قبل با gRPC آشنا شدیم و یک پروژه سمپل با اون طراحی کردیم. در این قسمت میخواهیم به صورت عمیق تر مفاهیم gRPC از جمله Message و Service و انواع Data Type ها در Protocol Buffer و نیز تعریف Enum در آن را بررسی کنیم
#آرمین_شعیبی_نژاد
https://vrgl.ir/wvOn6
____________________
@DotNetZoom
در قسمت قبل با gRPC آشنا شدیم و یک پروژه سمپل با اون طراحی کردیم. در این قسمت میخواهیم به صورت عمیق تر مفاهیم gRPC از جمله Message و Service و انواع Data Type ها در Protocol Buffer و نیز تعریف Enum در آن را بررسی کنیم
#آرمین_شعیبی_نژاد
https://vrgl.ir/wvOn6
____________________
@DotNetZoom
✅بررسی عملی CQRS- بخش سوم: پروژه عملی با SQL Server و MongoDB
تا اینجای کار به صورت اجمالی با الگوی CQRS و همچنین به طور کامل با کتابخانه MediatR آشنا شدیم. در این قسمت قرار است که در یک پروژه عملی CQRS را در سطح دیتابیس با استفاده از SQL Server و Mongo DB پیاده سازی کنیم. همچین به مسئله Eventual Consistency میپردازیم و این تکنینک را با استفاده از Channel ها و Background Service ها در ASP Net Core پیاده سازی میکنیم
#بابک_طارمی
https://vrgl.ir/cibRC
____________________
@DotNetZoom
تا اینجای کار به صورت اجمالی با الگوی CQRS و همچنین به طور کامل با کتابخانه MediatR آشنا شدیم. در این قسمت قرار است که در یک پروژه عملی CQRS را در سطح دیتابیس با استفاده از SQL Server و Mongo DB پیاده سازی کنیم. همچین به مسئله Eventual Consistency میپردازیم و این تکنینک را با استفاده از Channel ها و Background Service ها در ASP Net Core پیاده سازی میکنیم
#بابک_طارمی
https://vrgl.ir/cibRC
____________________
@DotNetZoom
ویرگول
بررسی عملی CQRS- بخش سوم: پروژه عملی
در این بخش به بررسی و پیاده سازی یک پروژه عملی ساده با CQRS و SQL Server و Mongo DB می پردازیم
✅ معرفی ویژگی جدید C# 9.0: ویژگی init-only
در نوامبر 2007 مایکروسافت C# 3.0 را با انتشار NET Framework 3.5. معرفی کرد. C# 3.0 بسیاری از مفاهیم جدید، به عنوان مثال زبان پرس و جو یکپارچه (LINQ) را ارائه داده است. همچنین مفهوم قدرتمند مقداردهی اولیه اشیاء را معرفی کرد. اینها پایه و اساسی برای ویژگی init-only هستند که با C# 9.0 معرفی شده است.
#سپهر_اسلامی
https://vrgl.ir/haBpx
___________________
@DotNetZoom
در نوامبر 2007 مایکروسافت C# 3.0 را با انتشار NET Framework 3.5. معرفی کرد. C# 3.0 بسیاری از مفاهیم جدید، به عنوان مثال زبان پرس و جو یکپارچه (LINQ) را ارائه داده است. همچنین مفهوم قدرتمند مقداردهی اولیه اشیاء را معرفی کرد. اینها پایه و اساسی برای ویژگی init-only هستند که با C# 9.0 معرفی شده است.
#سپهر_اسلامی
https://vrgl.ir/haBpx
___________________
@DotNetZoom
ویرگول
C# 9.0: ویژگی init-only - ایجاد خصوصیات تغییرناپذیر بدون سازنده
از ویژگیهای جدید سی شارپ ، ویژگی init only را بررسی و معرفی میکنیم
Forwarded from کدهک
✅ برترین افزونه های رایگان Visual Studio که هر کسی باید داشته باشه
🔰بهترین افزونه های Code Analyzer سی شارپ
این افزونه ها کد های شما رو آنالیز میکنن و اشتباهات رایج هنگام کدنویسی سی شارپب رو به همراه اصلاحات لازم رو بهتون پیشنهاد میده
از جمله موارد مهمی که توسط این کد آنالیزر ها میشه تشخیص داد:
✔️ کد هایی که Naming Convention و Coding Style استاندارد رو رعایت نکردن
✔️ کد های کثیف و Code Smell ها
✔️ کد هایی که به لحاظ ساختاری bug دارند یا مستعد bug هستند
✔️ کد هایی که به لحاظ آسیب پذیری دارند یا منسوخ شدند
✔️ پیشنهاداتی برای تمیز تر کردن کدتون و استفاده از ویژگی های جدید سی شارپ
✔️ پیشنهاداتی که باعث بهبود Performance میشه
🔸SonarLint - Nuget
🔹Roslynator - Nuget
🔸CodeCracker - Nuget
🔹CodeMaid
🔸Sharpen
🔰بهترین افزونه های Code Analyzer مخصوص Async/Await
این دو کد آنالیزر اشتباهات رایج هنگام کدنویسی async رو به همراه اصلاحات لازم بهتون پیشنهاد میدن
🔸AsyncFixer - Nuget
🔹AsyncMethodNameFixer - Nuget
🔰نمایش بهتر خطا ها و هشدار ها
یه افزونه باحال و کاربردی که خطا ها و هشدار های هر فایل رو داخل Solution Explorer کنار اون فایل نشون میده
🔸ErrorVisualizer
🔰فرمت خودکار کد ها به هنگام Save
افزونه محبوب من که کد ها رو موقع ذخیره، به صورت اتوماتیک Format میکنه (معادل میانبر Ctrl+K+D) در نتیجه همیشه کد هاتون فرمت شده و تمیز باقی میمونه بدون اینکه دغدغه اش رو داشته باشین یا یادتون بره
🔹FormatDocumentOnSave
🔰هایلایت متون پنجره Output
یه افزون کاربردی که متون پنجره Output رو highlight میکنه. خیلی وقتا جزئیات و اطلاعاتی از خطا ها داخل پنجره Output نمایش داده میشه که خوندنش خیلی بهتون کمک میکنه
🔸OutputEnhancer
🔰نکته:
بعضی از Code Analyzer ها پکیج Nuget هم دارند کنارشون که این امکان رو میده که بتونید ازش هرجا که NET CLI. هست استفاده کنین. مثلا توی VSCode و مهم تر از اون برای CI/CD، به این صورت که میتونین جز pipeline CD/DI تنظیمش کنین که اگر کدی خطا های Naming Convention یا Coding Style داشت متوجه بشین یا حتی اجازه ندین Pull Request اش Merge بشه
________________
@DotNetZoom
🔰بهترین افزونه های Code Analyzer سی شارپ
این افزونه ها کد های شما رو آنالیز میکنن و اشتباهات رایج هنگام کدنویسی سی شارپب رو به همراه اصلاحات لازم رو بهتون پیشنهاد میده
از جمله موارد مهمی که توسط این کد آنالیزر ها میشه تشخیص داد:
✔️ کد هایی که Naming Convention و Coding Style استاندارد رو رعایت نکردن
✔️ کد های کثیف و Code Smell ها
✔️ کد هایی که به لحاظ ساختاری bug دارند یا مستعد bug هستند
✔️ کد هایی که به لحاظ آسیب پذیری دارند یا منسوخ شدند
✔️ پیشنهاداتی برای تمیز تر کردن کدتون و استفاده از ویژگی های جدید سی شارپ
✔️ پیشنهاداتی که باعث بهبود Performance میشه
🔸SonarLint - Nuget
🔹Roslynator - Nuget
🔸CodeCracker - Nuget
🔹CodeMaid
🔸Sharpen
🔰بهترین افزونه های Code Analyzer مخصوص Async/Await
این دو کد آنالیزر اشتباهات رایج هنگام کدنویسی async رو به همراه اصلاحات لازم بهتون پیشنهاد میدن
🔸AsyncFixer - Nuget
🔹AsyncMethodNameFixer - Nuget
🔰نمایش بهتر خطا ها و هشدار ها
یه افزونه باحال و کاربردی که خطا ها و هشدار های هر فایل رو داخل Solution Explorer کنار اون فایل نشون میده
🔸ErrorVisualizer
🔰فرمت خودکار کد ها به هنگام Save
افزونه محبوب من که کد ها رو موقع ذخیره، به صورت اتوماتیک Format میکنه (معادل میانبر Ctrl+K+D) در نتیجه همیشه کد هاتون فرمت شده و تمیز باقی میمونه بدون اینکه دغدغه اش رو داشته باشین یا یادتون بره
🔹FormatDocumentOnSave
🔰هایلایت متون پنجره Output
یه افزون کاربردی که متون پنجره Output رو highlight میکنه. خیلی وقتا جزئیات و اطلاعاتی از خطا ها داخل پنجره Output نمایش داده میشه که خوندنش خیلی بهتون کمک میکنه
🔸OutputEnhancer
🔰نکته:
بعضی از Code Analyzer ها پکیج Nuget هم دارند کنارشون که این امکان رو میده که بتونید ازش هرجا که NET CLI. هست استفاده کنین. مثلا توی VSCode و مهم تر از اون برای CI/CD، به این صورت که میتونین جز pipeline CD/DI تنظیمش کنین که اگر کدی خطا های Naming Convention یا Coding Style داشت متوجه بشین یا حتی اجازه ندین Pull Request اش Merge بشه
________________
@DotNetZoom
❇️ نکاتی در مورد کار با PDF در دات نت و برترین کتابخانه های آن
کتابخونه های کار با pdf به 2 دسته کلی تقسیم میشن
🔸دسته اول کتابخونه هایی هستند که باهاشون میشه فایل های PDF رو خوند، محتواشو Extract کرد، Edit کرد و یا فایل جدید ساخت
از معروف ترین این کتابخونه ها میشه به ترتیب به موارد زیر اشاره کرد
✔️iTextSharp
✔️iTextSharp.LGPLv2.Core
✔️itext7
✔️PdfSharpCore
معروف ترین شون iTextSharp هست که فقط NET Framework Full. رو پشتیبانی میکنه اما وحید نصیری یه نسخه port شده ازش رو برای NET Core. رو براش درست کرده به نام iTextSharp.LGPLv2.Core
همچنین کتابخونه itext7 که توسط سازنده iTextSharp توسعه داده شده و به عنوان نسخه بعدی iTextSharp و با پشتیبانی از NET Core. اون رو توسعه داده و توصیه میکنه از itext7 استفاده کنین.
🔹دسته دوم کتابخونه هایی هستند که میتونن محتوای یه صفحه html (شامل المان ها و css ها و ...) رو به صورت PDF رندر کنن و خروجی PDF ازشون بگیرن
از جمله معروف ترین این کتابخونه ها میشه به ترتیب به موارد زیر اشاره کرد
✔️DinkToPdf
✔️itext7.pdfhtml
✔️Rotativa.AspNetCore
✔️Wkhtmltopdf.NetCore
طرز کار همشونم به این صورته که اینا معمولا wrapper ایی بر روی کتابخانه wkhtmltopdf هستند که کارش Render کردن خروجی html به pdf هست و پشت صحنه هم از موتور Qt WebKit استفاده میکنن که یک Browser Engine سورس باز هست
🔸اکثر مواقع نیاز برنامه نویسا همین دسته دوم هست. معمولا میخوان از گزارشاتشون خروجی pdf بگیرن که دسته دوم گزینه راحت تری هست چرا که اینجا ما دیگه با یه صفحه html+css سرو کار داریم و خیلی راحت میتونیم هر فرم و جدولی رو که بخوایم طراحی کنیم و وقتی از خروجی html ایی اون مطمئن شدیم اون رو به pdf تبدیل کنیم
دسته اول معمولا کاربرد خاص تری دارند. مثلا اگه بخواین فایل pdf تون رو بخونین، محتواش رو پردازش یا ویرایش کنین یا مثلا ساخت صفحاتتون رو خیلی سفارشی سازی کنین باید از کتابخونه های دسته اول استفاده کنین
یه سری کتابخونه قدرتمند دیگه هم هستند مثل Aspose و Syncfusion ولی چون اونا پولی هستند و نسخه رایگانشون محدودیت داره تو لیست نیاوردمشون
_______________
@DotNetZoom
کتابخونه های کار با pdf به 2 دسته کلی تقسیم میشن
🔸دسته اول کتابخونه هایی هستند که باهاشون میشه فایل های PDF رو خوند، محتواشو Extract کرد، Edit کرد و یا فایل جدید ساخت
از معروف ترین این کتابخونه ها میشه به ترتیب به موارد زیر اشاره کرد
✔️iTextSharp
✔️iTextSharp.LGPLv2.Core
✔️itext7
✔️PdfSharpCore
معروف ترین شون iTextSharp هست که فقط NET Framework Full. رو پشتیبانی میکنه اما وحید نصیری یه نسخه port شده ازش رو برای NET Core. رو براش درست کرده به نام iTextSharp.LGPLv2.Core
همچنین کتابخونه itext7 که توسط سازنده iTextSharp توسعه داده شده و به عنوان نسخه بعدی iTextSharp و با پشتیبانی از NET Core. اون رو توسعه داده و توصیه میکنه از itext7 استفاده کنین.
🔹دسته دوم کتابخونه هایی هستند که میتونن محتوای یه صفحه html (شامل المان ها و css ها و ...) رو به صورت PDF رندر کنن و خروجی PDF ازشون بگیرن
از جمله معروف ترین این کتابخونه ها میشه به ترتیب به موارد زیر اشاره کرد
✔️DinkToPdf
✔️itext7.pdfhtml
✔️Rotativa.AspNetCore
✔️Wkhtmltopdf.NetCore
طرز کار همشونم به این صورته که اینا معمولا wrapper ایی بر روی کتابخانه wkhtmltopdf هستند که کارش Render کردن خروجی html به pdf هست و پشت صحنه هم از موتور Qt WebKit استفاده میکنن که یک Browser Engine سورس باز هست
🔸اکثر مواقع نیاز برنامه نویسا همین دسته دوم هست. معمولا میخوان از گزارشاتشون خروجی pdf بگیرن که دسته دوم گزینه راحت تری هست چرا که اینجا ما دیگه با یه صفحه html+css سرو کار داریم و خیلی راحت میتونیم هر فرم و جدولی رو که بخوایم طراحی کنیم و وقتی از خروجی html ایی اون مطمئن شدیم اون رو به pdf تبدیل کنیم
دسته اول معمولا کاربرد خاص تری دارند. مثلا اگه بخواین فایل pdf تون رو بخونین، محتواش رو پردازش یا ویرایش کنین یا مثلا ساخت صفحاتتون رو خیلی سفارشی سازی کنین باید از کتابخونه های دسته اول استفاده کنین
یه سری کتابخونه قدرتمند دیگه هم هستند مثل Aspose و Syncfusion ولی چون اونا پولی هستند و نسخه رایگانشون محدودیت داره تو لیست نیاوردمشون
_______________
@DotNetZoom
Telegram
Attach Files
❇️ اهمیت Side-effect Free و Idemponency در کدنویسی
برنامه نویسی Functional Programming (به اختصار FP) در تعریف، یک Paradigm (پارادایم) برنامه نویسی هست که در اون برنامه ها به کمک ترکیب توابع ساخته میشن. (چه تعریف گنگ و غیر ملموسی!)
از اونجایی که "پارادایم" کلمه غیر ملموسی هست و اگر اولین بارتون باشه که اون رو میشنوین احتمال زیاد مفهومش رو متوجه نمیشین اینطور تعریفش میکنم: پارادایم برنامه نویسی یعنی یک روش یا رویکرد برنامه نویسی.
این رویکرد مفاهیم مختلفی رو داخل خودش داره که اینجا نمیخوام واردشون بشم. چیزی که اینجا میخوام روش تاکید کنیم 3 مفهوم زیر هست:
1- Side-effect Free
2- Idempotent
3- Pure Functions
🔸مفهوم Side-effect Free
این مفهوم به این اشاره میکنه که یه تابع (متد) نباید "تاثیر جانبی" روی بقیه قسمت های برنامه داشته باشه. خب این یعنی چی؟ کی ما تاثیر جانبی رو بقیه میذاریم؟
وقتی متد ما یک shared state تغییر رو بده. shared state به معنی متغیر/مقدار ایی هست که بین چندین تابع یا قسمت مختلف برنامه مشترک هست.
پس در واقع وقتی یک تابع، متغیری یا مقداری را که بین چندین تابع یا قسمت های مختلف برنامه مشترک هست رو "تغییر" بده یعنی side-effect اتفاق افتاده
در کنار این مفهوم، مفهوم دیگری نیز وجود داره به نام Avoiding Shared State که تاکید میکنه از ایجاد و استفاده از shared state ها خودداری کنیم.
وجود shared state خواسته یا ناخواسته باعث بروز side-effect میشه. پس خودداری از اون باعث میشه به side-effect نیز برنخوریم یا کمتر بر بخوریم
🔹مفهوم Idempotent
این مفهوم به این امر اشاره میکنه که زمانی توابع ما Idempotent هستند که اگر اونها رو هرچند بار هم با مقادیر ورودی ثابت و مشابه فراخوانی کنیم همیشه نتیجه یا خروجی یکسان و ثابتی داشته باشه
مثلا تابعی که یک مقدار Random رو برمیگردونه Idempotent نیست چرا که هربار نتیجه اش متفاوته؛ همینطور تابعی که DateTime.Now رو برمیگردونه.
مثال کاربردیش توی دنیای واقعی، متدی میشه که وظیفه حذف یک رکورد رو داره. به این صورت که (مثلا از EF استفاده میکنه و) ابتدا رکورد رو با id مورد نظر واکشی میکنه سپس اون رو به متد Remove میده و SaveChanges فراخوانی میشه
خب بار اولی که این متد رو با id برابر با 100 فراخوانی کنیم اون سطح حذف میشه ولی بار دومی که اون رو "با همین id" فراخوانی میکنیم به exception بر میخوره چرا که دیگه اون رکورد وجود نداره که بخواد حذفش کنه (موقع find، مقدار اون رکورد null هست و متد Remove با ورودی null خطا میده)
ولی همین متد رو اگر به این صورت پیاده سازی کنیم که قبل از حذف کردن، چک کنه که اگر این رکورد وجود نداره کاری انجام نده، متد ما Idempotent میشه چرا که هر چندبار فراخوانی اون، یک نتیجه رو داره و اون هم اطمینان از حذف اون رکورد هست
▪️مفهوم Idempotent بودن توی معماری Event-Driven و الگوی Pub/Sub هم اهمیت بسیار بالایی داره. از اونجایی که یک Event یا Message ممکنه به هر دلیلی "بیش از یکبار" توسط Subscriber ها پردازش بشه. باید اطمینان داشته باشیم که نتیجه یکسانی داره و عملکرد سیستم رو تحت تاثیر نمیگذاره (مثلا فرض کنید برای یک سفارش، دو تا فاکتور برای مشتری ثبت بشه!)
▪️نمیخوام خیلی وارد روش های Idempotency بشم فقط اینکه معمولا 2 روش وجود داره:
1- طوری پیاده سازی کنیم که چند دفعه اجرا شدنش توی عملکردش تاثیری نداشته باشه
2- یک flag ایی رو به ازای هر Message داشته باشیم که وقتی اون Message پردازش میشه اون رو true کنیم و دفعات بعدی با چک کردن این flag و متوجه شدن از اینکه قبلا پردازش شده، دیگه پردازشش نکنیم (در این حالت ممکنه استفاده از تکنیک های synchronization مانند locking لازم باشه)
🔸مفهوم Pure Functions
این مفهوم تعریف خیلی ساده ای داره، تابعی Pure Function (خالص) هست که هم Side-effect Free باشه هم Idempotent. در غیر این صورت میشه Impure Function (تابع ناخالص)
🔰جمع بندی
مفاهیم Functional Programming الزاما نیاز به استفاده از زبان های FP (مثل FSharp یا Scala یا Haskell) ندارن. خیلی از اون مفاهیم به راحتی داخل زبان های دیگه و رویکرد Object Oriented Programming نیز قابل استفاده و بسیار مفید هستند و باعث Maintainability و Reliability میشن (نگهداری بهتر کد ها و قابل اعتماد تر بودنشون)
توصیه میکنم که اون مفاهیم رو یاد بگیرید و بسته به نیازتون توی کدنویسی های OOP تون هم ازش استفاده کنید
🔰دوستان یه مقدارش جا نشد. (مخصوصا قسمت مزایاشون)
متن کامل رو توی مقاله زیر بخونین
https://vrgl.ir/GMNeu
______________
@DotNetZoom
برنامه نویسی Functional Programming (به اختصار FP) در تعریف، یک Paradigm (پارادایم) برنامه نویسی هست که در اون برنامه ها به کمک ترکیب توابع ساخته میشن. (چه تعریف گنگ و غیر ملموسی!)
از اونجایی که "پارادایم" کلمه غیر ملموسی هست و اگر اولین بارتون باشه که اون رو میشنوین احتمال زیاد مفهومش رو متوجه نمیشین اینطور تعریفش میکنم: پارادایم برنامه نویسی یعنی یک روش یا رویکرد برنامه نویسی.
این رویکرد مفاهیم مختلفی رو داخل خودش داره که اینجا نمیخوام واردشون بشم. چیزی که اینجا میخوام روش تاکید کنیم 3 مفهوم زیر هست:
1- Side-effect Free
2- Idempotent
3- Pure Functions
🔸مفهوم Side-effect Free
این مفهوم به این اشاره میکنه که یه تابع (متد) نباید "تاثیر جانبی" روی بقیه قسمت های برنامه داشته باشه. خب این یعنی چی؟ کی ما تاثیر جانبی رو بقیه میذاریم؟
وقتی متد ما یک shared state تغییر رو بده. shared state به معنی متغیر/مقدار ایی هست که بین چندین تابع یا قسمت مختلف برنامه مشترک هست.
پس در واقع وقتی یک تابع، متغیری یا مقداری را که بین چندین تابع یا قسمت های مختلف برنامه مشترک هست رو "تغییر" بده یعنی side-effect اتفاق افتاده
در کنار این مفهوم، مفهوم دیگری نیز وجود داره به نام Avoiding Shared State که تاکید میکنه از ایجاد و استفاده از shared state ها خودداری کنیم.
وجود shared state خواسته یا ناخواسته باعث بروز side-effect میشه. پس خودداری از اون باعث میشه به side-effect نیز برنخوریم یا کمتر بر بخوریم
🔹مفهوم Idempotent
این مفهوم به این امر اشاره میکنه که زمانی توابع ما Idempotent هستند که اگر اونها رو هرچند بار هم با مقادیر ورودی ثابت و مشابه فراخوانی کنیم همیشه نتیجه یا خروجی یکسان و ثابتی داشته باشه
مثلا تابعی که یک مقدار Random رو برمیگردونه Idempotent نیست چرا که هربار نتیجه اش متفاوته؛ همینطور تابعی که DateTime.Now رو برمیگردونه.
مثال کاربردیش توی دنیای واقعی، متدی میشه که وظیفه حذف یک رکورد رو داره. به این صورت که (مثلا از EF استفاده میکنه و) ابتدا رکورد رو با id مورد نظر واکشی میکنه سپس اون رو به متد Remove میده و SaveChanges فراخوانی میشه
خب بار اولی که این متد رو با id برابر با 100 فراخوانی کنیم اون سطح حذف میشه ولی بار دومی که اون رو "با همین id" فراخوانی میکنیم به exception بر میخوره چرا که دیگه اون رکورد وجود نداره که بخواد حذفش کنه (موقع find، مقدار اون رکورد null هست و متد Remove با ورودی null خطا میده)
ولی همین متد رو اگر به این صورت پیاده سازی کنیم که قبل از حذف کردن، چک کنه که اگر این رکورد وجود نداره کاری انجام نده، متد ما Idempotent میشه چرا که هر چندبار فراخوانی اون، یک نتیجه رو داره و اون هم اطمینان از حذف اون رکورد هست
▪️مفهوم Idempotent بودن توی معماری Event-Driven و الگوی Pub/Sub هم اهمیت بسیار بالایی داره. از اونجایی که یک Event یا Message ممکنه به هر دلیلی "بیش از یکبار" توسط Subscriber ها پردازش بشه. باید اطمینان داشته باشیم که نتیجه یکسانی داره و عملکرد سیستم رو تحت تاثیر نمیگذاره (مثلا فرض کنید برای یک سفارش، دو تا فاکتور برای مشتری ثبت بشه!)
▪️نمیخوام خیلی وارد روش های Idempotency بشم فقط اینکه معمولا 2 روش وجود داره:
1- طوری پیاده سازی کنیم که چند دفعه اجرا شدنش توی عملکردش تاثیری نداشته باشه
2- یک flag ایی رو به ازای هر Message داشته باشیم که وقتی اون Message پردازش میشه اون رو true کنیم و دفعات بعدی با چک کردن این flag و متوجه شدن از اینکه قبلا پردازش شده، دیگه پردازشش نکنیم (در این حالت ممکنه استفاده از تکنیک های synchronization مانند locking لازم باشه)
🔸مفهوم Pure Functions
این مفهوم تعریف خیلی ساده ای داره، تابعی Pure Function (خالص) هست که هم Side-effect Free باشه هم Idempotent. در غیر این صورت میشه Impure Function (تابع ناخالص)
🔰جمع بندی
مفاهیم Functional Programming الزاما نیاز به استفاده از زبان های FP (مثل FSharp یا Scala یا Haskell) ندارن. خیلی از اون مفاهیم به راحتی داخل زبان های دیگه و رویکرد Object Oriented Programming نیز قابل استفاده و بسیار مفید هستند و باعث Maintainability و Reliability میشن (نگهداری بهتر کد ها و قابل اعتماد تر بودنشون)
توصیه میکنم که اون مفاهیم رو یاد بگیرید و بسته به نیازتون توی کدنویسی های OOP تون هم ازش استفاده کنید
🔰دوستان یه مقدارش جا نشد. (مخصوصا قسمت مزایاشون)
متن کامل رو توی مقاله زیر بخونین
https://vrgl.ir/GMNeu
______________
@DotNetZoom
ویرگول
اهمیت Side-effect Free و Idempotency در کدنویسی
این دو مفهوم از Functional Programming میاد اما استفاده از اونها در کدنویسی OOP هم میتونه بسیار مفید باشه و باعث Reliability و ...
Forwarded from کدهک
✅ سری آموزشی ساخت برنامه با ASP.NET Core و Angular
🔸سری 50 قسمتی آموزش ویدئویی
Build Real App in Angular 11 and .Net Core Web API
🔹سری 11 قسمتی
ASP.NET Core with Angular Application Architecture
Part 1
Part 2
Part 3
Part 4
Part 5
Part 6
Part 7
Part 8
Part 9
Part 10
Part 11
🔸سری 4 قسمتی
Full-stack application development with AngularJS 11 and Asp.Net MVC Core 5.0
Part 1
Part 2
Part 3
Part 4
_________________
@DotNetZoom
🔸سری 50 قسمتی آموزش ویدئویی
Build Real App in Angular 11 and .Net Core Web API
🔹سری 11 قسمتی
ASP.NET Core with Angular Application Architecture
Part 1
Part 2
Part 3
Part 4
Part 5
Part 6
Part 7
Part 8
Part 9
Part 10
Part 11
🔸سری 4 قسمتی
Full-stack application development with AngularJS 11 and Asp.Net MVC Core 5.0
Part 1
Part 2
Part 3
Part 4
_________________
@DotNetZoom
Forwarded from جادی، کیبورد آزاد - Jadi (Jadi)
برای اینکه بتونیم خوب در مورد کارمون تصمیم بگیریم، مهمترین چیز اینه که بدونیم وضع کلی زندگی و بازار چطوریه. امسال هم مثل هر سال نظر سنجی بزرگ برنامه نویسان و مدیر سیستم ها رو داریم که نتایجش مثل هر سال آزاد برای همه در دسترسه!
شرکت و پخشش، به نفع همه ماست
bit.ly/irprogrammers
این نظر سنجی چند ساله که برگزار می شه و خروجی هاش به طور خام و کامل در اختیار همه هست. تا شاید بتونیم تصمیم های بهتری بگیریم، روند بازار رو ببینیم یا تشخیص بدیم که باید چیکار کنیم. اگر برنامه نویس / مدیر سیستم هستین، شرکت توش، کمک به خودمونه. خندون باشین و به بقیه هم بگین (:
شرکت و پخشش، به نفع همه ماست
bit.ly/irprogrammers
این نظر سنجی چند ساله که برگزار می شه و خروجی هاش به طور خام و کامل در اختیار همه هست. تا شاید بتونیم تصمیم های بهتری بگیریم، روند بازار رو ببینیم یا تشخیص بدیم که باید چیکار کنیم. اگر برنامه نویس / مدیر سیستم هستین، شرکت توش، کمک به خودمونه. خندون باشین و به بقیه هم بگین (:
Google Docs
بررسی وضعیت شغلی برنامه نویسان و مدیر سیستمهای ایران - فروردین ۱۴۰۱
این پرسشنامه هر ساله توسط خود برنامه نویس ها برگزار می شه. ربطی به هیچ شرکت و سازمانی نداره و خودمون مستقیم توش جواب می دیم و مستقیم نتایج رو می بینیم. هدفش اینه که درک دقیق تری از وضعیت کار و زندگی برنامه نویس ها، مدیر سیستم ها و کلا کامپیوتری ها به همدیگه…