Clean Architecture with .NET Core
یک آموزش ساده و روان برای یادگیری عمیق Clean architecture
- MediatR
- AutoMapper
- FluentValidation
- NUnit, FluentAssertions, Moq & Respawn
لینک مقاله:
https://jasontaylor.dev/clean-architecture-getting-started/
لینک گیت هاب:
https://github.com/jasontaylordev/CleanArchitecture
لینک یوتیوب:
https://youtu.be/5OtUm1BLmG0
یک آموزش ساده و روان برای یادگیری عمیق Clean architecture
- MediatR
- AutoMapper
- FluentValidation
- NUnit, FluentAssertions, Moq & Respawn
لینک مقاله:
https://jasontaylor.dev/clean-architecture-getting-started/
لینک گیت هاب:
https://github.com/jasontaylordev/CleanArchitecture
لینک یوتیوب:
https://youtu.be/5OtUm1BLmG0
اگر دنبال آموزشهای معتبر هستی توی تمامی حوزه ها
و میخوای یک ریپو لینک تمامی این آموزشها رو داشته باشه
حتما به ریپو
https://awesome-architecture.com/
https://github.com/mehdihadeli/awesome-software-architecture
و میخوای یک ریپو لینک تمامی این آموزشها رو داشته باشه
حتما به ریپو
mehdi hadeli عزیز سر بزن ❤️😉https://awesome-architecture.com/
https://github.com/mehdihadeli/awesome-software-architecture
اگر علاقه مند به یادگیری عمیق Asp.Net Core هستید
و میخواهید یک road map خوب داشته باشین
تا هم سرفصل های خوبی رو بهتون معرفی کنه
هم Track progress رو داشته باشه
قطعا این سایت میتونه کمک کنه
https://roadmap.sh/aspnet-core
و میخواهید یک road map خوب داشته باشین
تا هم سرفصل های خوبی رو بهتون معرفی کنه
هم Track progress رو داشته باشه
قطعا این سایت میتونه کمک کنه
https://roadmap.sh/aspnet-core
دستور
و اگر مقدار true داشته باشد، هیچ metadata ای منتشر نمیشود.
کاربردش میتواند مثلا برای مخفی کردن endpoint از Swagger UI باشد 💥😉
کد نمونه Minimal API :
ExcludeFromDescriptionAttribute برای حذف OpenAPI metadata استفاده میشودو اگر مقدار true داشته باشد، هیچ metadata ای منتشر نمیشود.
کاربردش میتواند مثلا برای مخفی کردن endpoint از Swagger UI باشد 💥😉
کد نمونه Minimal API :
app.MapGet("/", () => "Code wave tests")
.ExcludeFromDescription();OpenTelemetry Metrics in .NET 8
دو تا روش برای ارسال متریک ها (exporting metrics) وجود دارد
1- استفاده از OpenTelemetry Collector
2- ارسال دیتا بصورت مستقیم به back-end مورد نظر (مانند Prometheus, Jaeger, Zipkin, Elastic APM, ...)
یکی از مزیت های روش اول
برنامه ما برای ارسال metric ها فقط با OpenTelemetry Collector در ارتباط هست
و اگر برنامه ما روی چندین container اجرا باشد این یک مزیت جدی هست
مقاله برای روش اول:
https://www.mytechramblings.com/posts/getting-started-with-opentelemetry-metrics-and-dotnet-part-1/
لینک گیت هاب:
https://github.com/karlospn/opentelemetry-metrics-demo
(داخل گیت هاب پیاده سازی کامل انجام شده و راه اندازی پروژه رو هم کامل توضیح داده)
دو تا روش برای ارسال متریک ها (exporting metrics) وجود دارد
1- استفاده از OpenTelemetry Collector
2- ارسال دیتا بصورت مستقیم به back-end مورد نظر (مانند Prometheus, Jaeger, Zipkin, Elastic APM, ...)
یکی از مزیت های روش اول
برنامه ما برای ارسال metric ها فقط با OpenTelemetry Collector در ارتباط هست
و اگر برنامه ما روی چندین container اجرا باشد این یک مزیت جدی هست
مقاله برای روش اول:
https://www.mytechramblings.com/posts/getting-started-with-opentelemetry-metrics-and-dotnet-part-1/
لینک گیت هاب:
https://github.com/karlospn/opentelemetry-metrics-demo
(داخل گیت هاب پیاده سازی کامل انجام شده و راه اندازی پروژه رو هم کامل توضیح داده)
یک مشکل رو مخ داریم، که زمانی که سیستم restart میشه و میخواییم پسورد رو وارد کنیم Num Lock کیبورد خاموش هست 😢😣
برای حلش میتونید مراحل زیر رو برین:
1- Press
2- Type
3- Navigate to the following key:
4- Double-click on the
5- Change the
6- Click OK and close the Registry Editor and
😎😉
برای حلش میتونید مراحل زیر رو برین:
1- Press
Win+R to open the Run dialog box.2- Type
regedit and hit Enter to open the Registry Editor.3- Navigate to the following key:
HKEY_USERS\.Default\Control Panel\Keyboard
4- Double-click on the
InitialKeyboardIndicators value on the right-hand side.5- Change the
value data to 2 to turn Num Lock on by default.6- Click OK and close the Registry Editor and
restart again.😎😉
🔥1
Code Wave Channel
Photo
Shared Context between XUnit Tests in .Net8
ما در تست های خود نیاز داریم برخی از اشیاء یا تنظیمات را بین تست ها به اشتراک بگذاریم
مثلا تصور کنید برنامه ما برای اجرا نیاز به Sql Server, RabbitMq, MongoDb , ... دارد
نیاز هست یک بار این تنظیمات انجام شود و بین تمامی تست ها به اشتراک گذاشته شود.
در XUnit چند روش برای اینکار وجود دارد (Shared Context between Tests):
⚪️ Constructor and Dispose :
برای تمیز نگهداشت test context ها، با پیاده سازی Interface IDisposable اشیاء که بین تستهای یک کلاس مشترک هستند در Constructor تعریف و در متد Dispose حذف میشوند.
⚪️ Class Fixtures:
به اشتراک گذاری اشیاء به ازای یک کلاس تست.
مثلا ما dbContext را با استفاده از Interface IClassFixture تعریف کنیم، به ازای هر کلاس تست یک نمونه جدید از dbContext خواهیم داشت.
⚪️ Collection Fixtures:
به اشتراک گذاری اشیاء بین چنین کلاس تست.
مثلا ما dbContext را با استفاده از Interface ICollectionFixture تعریف کنیم، به ازای تمامی Collection های هم نام یک نمونه از dbContext ایجاد میشوند و شیء dbContext بین چنین کلاس تست مشترک خواهد بود
⚪️ Assembly Fixtures:
اشتراک گذاری اشیاء بین تمام تست های یک Assembly
لینک مقاله:
https://xunit.net/docs/shared-context
ما در تست های خود نیاز داریم برخی از اشیاء یا تنظیمات را بین تست ها به اشتراک بگذاریم
مثلا تصور کنید برنامه ما برای اجرا نیاز به Sql Server, RabbitMq, MongoDb , ... دارد
نیاز هست یک بار این تنظیمات انجام شود و بین تمامی تست ها به اشتراک گذاشته شود.
در XUnit چند روش برای اینکار وجود دارد (Shared Context between Tests):
⚪️ Constructor and Dispose :
برای تمیز نگهداشت test context ها، با پیاده سازی Interface IDisposable اشیاء که بین تستهای یک کلاس مشترک هستند در Constructor تعریف و در متد Dispose حذف میشوند.
⚪️ Class Fixtures:
به اشتراک گذاری اشیاء به ازای یک کلاس تست.
مثلا ما dbContext را با استفاده از Interface IClassFixture تعریف کنیم، به ازای هر کلاس تست یک نمونه جدید از dbContext خواهیم داشت.
⚪️ Collection Fixtures:
به اشتراک گذاری اشیاء بین چنین کلاس تست.
مثلا ما dbContext را با استفاده از Interface ICollectionFixture تعریف کنیم، به ازای تمامی Collection های هم نام یک نمونه از dbContext ایجاد میشوند و شیء dbContext بین چنین کلاس تست مشترک خواهد بود
⚪️ Assembly Fixtures:
اشتراک گذاری اشیاء بین تمام تست های یک Assembly
لینک مقاله:
https://xunit.net/docs/shared-context
👏1
📊 دستهبندی کلی: امنیت اطلاعات
🔒 1- رمزنگاری (Encryption)
فرآیندی برای تغییر اطلاعات به صورتی که فقط افراد مجاز بتوانند آن را بازخوانی و درک کنند. هدف اصلی رمزنگاری، حفظ محرمانگی دادهها در طول انتقال یا ذخیرهسازی است.
🔐 رمزنگاری متقارن (Symmetric Encryption)
در این نوع رمزنگاری، یک کلید مشترک برای رمزگذاری و رمزگشایی استفاده میشود.
ویژگیها:
سرعت بالا
نیاز به روش امن برای تبادل کلید مشترک
الگوریتمهای مشهور:
AES (Advanced Encryption Standard)
DES (Data Encryption Standard)
🔐 رمزنگاری نامتقارن (Asymmetric Encryption)
این نوع رمزنگاری از دو کلید مجزا استفاده میکند: یک کلید عمومی برای رمزگذاری و یک کلید خصوصی برای رمزگشایی.
ویژگیها:
امنیت بالا
نیازی به تبادل کلید مشترک نیست
الگوریتمهای مشهور:
RSA (Rivest–Shamir–Adleman)
ECC (Elliptic Curve Cryptography)
🔍 2- هشینگ (Hashing)
فرآیندی برای تولید یک مقدار یکتا و ثابت (هش) از دادههای ورودی بهطوری که یکطرفه است و امکان بازگشت داده اولیه از مقدار هش وجود ندارد.
کاربردها:
ذخیره امن رمزهای عبور
بررسی یکپارچگی فایلها و دادهها
الگوریتمهای مشهور:
SHA-256 (Secure Hash Algorithm)
MD5 (Message Digest Algorithm)
🔒 1- رمزنگاری (Encryption)
فرآیندی برای تغییر اطلاعات به صورتی که فقط افراد مجاز بتوانند آن را بازخوانی و درک کنند. هدف اصلی رمزنگاری، حفظ محرمانگی دادهها در طول انتقال یا ذخیرهسازی است.
🔐 رمزنگاری متقارن (Symmetric Encryption)
در این نوع رمزنگاری، یک کلید مشترک برای رمزگذاری و رمزگشایی استفاده میشود.
ویژگیها:
سرعت بالا
نیاز به روش امن برای تبادل کلید مشترک
الگوریتمهای مشهور:
AES (Advanced Encryption Standard)
DES (Data Encryption Standard)
🔐 رمزنگاری نامتقارن (Asymmetric Encryption)
این نوع رمزنگاری از دو کلید مجزا استفاده میکند: یک کلید عمومی برای رمزگذاری و یک کلید خصوصی برای رمزگشایی.
ویژگیها:
امنیت بالا
نیازی به تبادل کلید مشترک نیست
الگوریتمهای مشهور:
RSA (Rivest–Shamir–Adleman)
ECC (Elliptic Curve Cryptography)
🔍 2- هشینگ (Hashing)
فرآیندی برای تولید یک مقدار یکتا و ثابت (هش) از دادههای ورودی بهطوری که یکطرفه است و امکان بازگشت داده اولیه از مقدار هش وجود ندارد.
کاربردها:
ذخیره امن رمزهای عبور
بررسی یکپارچگی فایلها و دادهها
الگوریتمهای مشهور:
SHA-256 (Secure Hash Algorithm)
MD5 (Message Digest Algorithm)