C# Programming Guide
192 subscribers
113 photos
9 videos
14 files
102 links
سلام دوستان در این کانال نکاتی در مورد مسائل پیشرفته در سی شارپ ارائه میشه که مربوط به بیش از 15 سال تجربه ی کاری من هست.
ممنون از اینکه دنبال میکنید.
اگر نکات خاصی به ذهنتون رسید با ادمین در میون بذارید
تماس با ادمین:
@Ali_Visual_Studio
Download Telegram
Forwarded from Easy Microservices
نحوه‌ی استفاده از پکیج سریالایز در Asp core رو در تصویر مشاهده می‌کنید.
شما با نصب پکیج EasyMicroservices.Serialization.DependencyInjection سپس نصب یکی از Provider های زیر میتونید به انتخاب خودتون از پکیج سریالایز Easy microservice استفاده کنید:
1.EasyMicroservices.Serialization.Newtonsoft.Json
2.EasyMicroservices.Serialization.System.Text.Json
3.EasyMicroservices.Serialization.BinaryGo
4.EasyMicroservices.Serialization.MessagePack
5.EasyMicroservices.Serialization.MemoryPack
6.EasyMicroservices.Serialization.System.Text.Xml
7.EasyMicroservices.Serialization.YamlDotNet

با اینکار لازم نیست بعد از هربار تغییر پکیج سریالایز، کدهاتون رو تغییر بدید.

@csharptips
@easymicroservices
👍1
C# Programming Guide
#سی_شارپ #تست #آزمایشگاه یکی از ابزارهای تست ابزار Mock کردن تست هاست، ابزارهایی توی سی شارپ و زبان های برنامه نویسی وجود دارن که شما میتونید باهاشون مدل های آزمایشگاهی خودتون رو کمی به واقعیت نزدیک کنید و برای پروژه خودتون تست بنویسید. اما آیا این تست ها…
چند سال پیش این پست رو زدم و این نکات رو متذکر شدم و تازه در نسخه‌های اخیر در ویژوال استودیو شما تازه در مورد فایل‌های .http دارید می‌شنوید. و اینکه چطوری کار میکنن و به چه علتی این فیچر داره اضافه میشه.

با ایده‌های ما همراه باشید ما همیشه سعی کردیم چند قدم جلوتر باشیم.

#csharptips
Forwarded from Easy Microservices
پکیج ServiceContracts هدفش اینه که خروجی های سرویس های شمارو یکپارچه، زیبا و مدیریت کنه.
استفاده از این پکیج خیلی آسونه فقط کافیه نصبش کنید و خروجی سرویس هاتون رو از این نوع بذارید.

اطلاعات خطا و stacktrace برای بحث دیباگینگ و این مسائل توش هندل شدست.

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

پذیرای هرگونه ایده و نظر هستیم.

اطلاعات بیشتر:

https://github.com/EasyMicroservices/ServiceContracts


@csharptips
@easymicroservices
👍1
Forwarded from Easy Microservices
پکیج Payments به شما کمک میکنه بدون درگیر شدن با ساختار بانک ها با یک اینترفیس کار کنید. دقیقا مثل پکیج های دیگه توی easy microservices هست. با این تفاوت که این پکیج برای کار کردن با درگاه بانک هاست.
در حال حاضر من قسمتی از Paypal رو پیاده سازی کردم و درگاه Stripe قابل استفاده هست.
مثلا شما میتونید از تجربیات خودتون توی درگاه هایی مثل بانک پاسارگاد، ملت، و api هایی که خودشون با درگاه ها کار میکنن مثل زرین پال توی پیاده سازی این پکیج همراهیمون کنید. دیگه لازم نیست توی پروژه هایی که میزنید درگاه هارو پیاده سازی کنید و نگران این باشید که از کجا شروع کنید و چی بزنید.

هرجا سوال داشتید با آی دی تلگرام من تماس بگیرید:
@ali_visual_studio

سورس گیتهاب:
https://github.com/EasyMicroservices/Payments

@easymicroservice
@easymicroservices
@csharptips
👍1
Forwarded from Easy Microservices
سلام عزیزان دل.
پکیج های سری لاگ رو هم اضافه کردیم با سه تا از محبوبترین پکیج های لاگر توی دات نت:
Serilog
NLog
log4net

سورس:
https://github.com/EasyMicroservices/Logger

@easymicroservices
@easymicroservice
@csharptips
👍3
اینکه مایکروسافت دات نت ۸ رو میده بیرون بعد یه دفعه هرچی پکیج روی نیوگت می‌بینید نسخه‌اش ۸ میشه به خاطر این نیست که اون پکیج‌ها حتما تغییرات مینور یا ماژور داشتند.
به خاطر اینه که همخوانی و یکسان سازی نسخه‌های پکیج به شمای توسعه دهنده این قابلیت رو میده تا دانگرید راحت تری انجام بدید که در صورت بروز مشکل بدونید توی نسخه‌های قدیمی تر چه پکیج‌هایی با اون نسخه‌ها سازگار هستند.
اینطوری دیگه لازم نیست دنبال بگردید که پکیج الف نسخه‌ی ۷.۱ با چه نسخه‌ای از پکیج ب سازگار هست.

#نسخه
#سی_شارپ
#برنامه_نویسی
#nuget
#package
#version

@csharptips
👍7
Forwarded from Easy Microservices
آیا ایمان نمی آورید؟ 😁

@easymicroservice
@easymicroservices
@csharptips
👍2
C# Programming Guide
Photo
در معماری CQRS هدف اصلی اینه که دیتابیس های Read از دیتابیس های Write از هم جدا بشن.
اما «نوع و روش» پیاده سازی این معماری از نظر من یک over engineering هست که به ازای هر مدل شما سه تا کلاس اضافه باید بسازید تا به هدف اصلی خودتون برسید که در اصل باعث پیچیدگی بیشتر پروژه میشه.

حالا بذارید چندتا سوال بپرسیم:
1. اگر در ابتدای پروژه خواستید یک MVP تحویل بدید چی؟ بازم می‌خواهید به ازای هر مدل چند کلاس Command و Query بسازید؟
2. اگر در یک آینده ی دور خواستید دیتابیس Read و Write رو جدا کنید چی (یعنی الان قصدش رو ندارید)؟ همین امروز باید کلی کد بزنید و کلاس بسازید؟

همه‌ی این معماری ها برای پیاده سازی خوب هستند اما روش پیاده سازی کاملا به شما و تجربیات شما بستگی داره.

در هسته ی Easy Microservices دو تابع GetReadableOf و GetWritableOf وجود داره که در ابتدای کار اصلا کاری به این نداره که دیتابیس Read از Write جدا بشه. شما می‌تونید در آینده هر وقت خواستید این دو رو از هم جدا کنید بدون تغییر کدهاتون و اضافه و کم کردن چیزی توی ساختار، این تغییرات رو اعمال کنید.بنابراین تا شما نگران این موضوع نشید این دو تابع در ابتدا تقریبا یک کار یکسان رو انجام میدن. همچنین مدیریت AsNoTracking توی EF Core برای پرفورمنس بهتر توی این مساله دیده شده. بنابراین هر وقت که خواستید دیتابیس هارو جدا کنید با یک تغییر کوچیک به دو کانکشن متفاوت دیتابیس‌ها جدا شده و این دو تابع و عملکرد خودشون رو نشون میدن.

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

با ما همراه باشید.
@easymicroservice
@easymicroservices
@csharptips
Forwarded from Easy Microservices
کلیات کاری که تا الان کردیم، این سیستم درسته بر پایه‌ی مایکروسرویس ساخته شده اما شما حتی برای شروع یک پروژه‌ی MVP می‌تونید از این زیرساخت استفاده کنید و حتی مدیریتش دقیقا مثل پروژه‌های مونولیت که در ابتدای کار آسونه اینم آسونه. در ابتدای کار نه سرور vps نیاز دارید، نه داکر نیاز دارید نه gateway و غیره. حتی یک هاست برای اجرای میکروسرویس های شما کافیه.
هدف ما آسون کردن توسعه‌ی نرم افزار هاست.

@easymicroservice
@easymicroservices
@csharptips
این کتابخانه واقعا برای Blazor عالیه و کامپوننت‌های خیلی زیادی داره و حتی از RightToLeft هم پشتیبانی میکنه.
اگر شمام از Blazor خوشتون میاد حتما یه نگاه بهش بندازید.
اگرم ابزار رایگان و Open source ای می‌شناسید معرفی کنید.

https://mudblazor.com

@csharptips
👍4
Forwarded from Easy Microservices
خلاصه‌ای از معماری میکروفرانتی که ما توی Easy Microservices در حال پیاده سازی اون هستیم. و تقریبا پکیج‌های فرانت رو برای میکروسرویس Ordering آماده کردیم.
برای مثال اگر زیرساخت این معماری رو با سی شارپ بنویسید شما تکنولوژی های زیر رو دارید:
1.WPF
2.Blazor
3.MAUI
یا هرچی.
اگر شما میخواهید در وبسایت خودتون مدیریت محصولات داشته باشید.
پکیج کامپوننت مدیریت محصولات رو نصب میکنید، آدرس Api میکروسرویس محصولات رو به کامپوننت میدید و تمام.
کامپوننت مدیریت محصولات به پروژه‌ی شما اضافه شد و قابل استفاده هست و کاربران می‌تونن محصولات اضافه،حذف و آپدیت کنند یا توی محصولات جستجو انجام بدن.

@Easymicroservices
@Easymicroservice
@CSharptips
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
تابع AutoModelCreating در هسته‌ی EasyMicroservices برای شما همه‌ی ریلیشن‌ها رو پیدا میکنه و اتوماتیک جداول رو به هم به صورت Fluent ریلیشن میزنه.

@EasyMicroservices
@EasyMicroservice
@CsharpTips
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
دو تابع جدید به هسته‌ی Api اضافه کردیم. این توابع وظیفه‌ی بروزرسانی رو مثل تابع Update بر عهده دارن منتهی فرقش اینه که اگر مقادیر پروپرتی‌های کلاسی که میخواهید آپدیت کنید رو به صورت پیشفرض بفرستید اونا آپدیت نمیشن. در حالی که در متد Update هر مقداری که توی ورودی وجود داره بروزرسانی خواهد شد چه شما پرش کنید و چه پرش نکنید.

مقادیر پیشفرض یعنی چی؟
برای مثال مقدار پیشفرض اعداد 0 و بسته به نوع value type هست و مقدار پیشفرض کلاس‌ها (reference type) و String ها نال (null) هست.

مزیت این تابع اینه که یه سری پارامتر ها وقتی میخواید به میکروسرویس ارسال کنید لازم نباشه حتما یک فانکشن جدا براش بسازید برای مسائل MVP سریع میتونید یه آپدیت بدید و ممکنه پارامتر های رابط کاربری کمتر از پارامتر های سرویس باشه، بنابراین همون چندتا پارامتر رو طرف آپدیت میکنه و بقیه پارامتر ها تا نسخه ی بعدی فرانت همچنان قابلیت آپدیت و تغییر توشون وجود نخواهد داشت.

@EasyMicroservices
@EasyMicroservice
@CSharpTips
👍1
C# Programming Guide
چقدر این ساختار رو دوست داشتم: https://github.com/ardalis/ApiEndpoints
اولش که این ساختار کد زنی رو دیدم گفتم چقدر تمیزه ولی توی سی شارپ که این غیر ممکنه، این چطوری همچین ارث بری ای کرده.
فهمیدم داره از کلاس های تو در تو استفاده میکنه که در واقع آدم فکر میکنه داری متد کال میکنی ❤️

@csharptips
👍1
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
یه کار عجیب و باحال کردیم.
این فایل های sln رو میبینید که تهش نسخه ی دات نت رو زده؟
اگر هر کدوم از اینارو اجرا کنید سلوشن و کلیه پروژه های داخلش با اون نسخه از دات اجرا میشه بدون اینکه لازم باشه TargetFramework رو توی csproj ها دست بزنید.
یعنی اگر فردا دات نت 9 اومد فقط کافیه اسم فایل رو net9.0 بذارید و اجراش کنید. تمام.
حالا بهتون میگم چطوری اینکار رو بکنید.

@easymicroservice
@easymicroservices
👍4
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
Easy Microservices
یه کار عجیب و باحال کردیم. این فایل های sln رو میبینید که تهش نسخه ی دات نت رو زده؟ اگر هر کدوم از اینارو اجرا کنید سلوشن و کلیه پروژه های داخلش با اون نسخه از دات اجرا میشه بدون اینکه لازم باشه TargetFramework رو توی csproj ها دست بزنید. یعنی اگر فردا دات…
میتونید سورسش رو ایجا ببینید:
https://github.com/EasyMicroservices/Serialization

اما چطوری اینکار رو کردیم؟
توسط شرط هایی که توی csproj ها اضافه کردیم این قابلیت به سیستم اضافه شده:

  <Choose>
<When Condition="$(SolutionFileName.Contains('-net'))">
<PropertyGroup>
<TargetFramework>$(SolutionFileName.Split('-')[1].Replace('.sln',''))</TargetFramework>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<TargetFrameworks>netcoreapp3.1;net6.0;net48;net452;net7.0</TargetFrameworks>
</PropertyGroup>
</Otherwise>
</Choose>


اینجا بهش گفتیم اگر توی اسم سلوشن -net وجود داشت بیاد TargetFramework رو از توی اسم فایل استخراج کنه در غیر اینصورت اون TargetFramework های پیشفرض رو در نظر بگیره.

@easymicroservice
@easymicroservices
@csharptips
👍3
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
پکیج BinaryGo هنوز هم بعد از اینکه دات نت 8 اومد از grpc و zeroformatter سریعتره.
و سریالایزشن json اش هم از textjson مایکروسافت سریعتر عمل میکنه.
خیلی وقته این پکیج رو به دلیل کمبود وقت توسعه ندادم ولی هنوزم پرچمش بالاست:

https://github.com/Ali-YousefiTelori/BinaryGo

@CsharpTips
@easymicroservices
@easymicroservice
👍3