C# Programming Guide
193 subscribers
113 photos
9 videos
14 files
102 links
سلام دوستان در این کانال نکاتی در مورد مسائل پیشرفته در سی شارپ ارائه میشه که مربوط به بیش از 15 سال تجربه ی کاری من هست.
ممنون از اینکه دنبال میکنید.
اگر نکات خاصی به ذهنتون رسید با ادمین در میون بذارید
تماس با ادمین:
@Ali_Visual_Studio
Download Telegram
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
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
میکروکامپوننت های سمت فرانت رو ما چطوری هندل میکنیم؟
قسمت آبی رنگ api های شما هستند که میکروکامپوننت‌ها به اون متصل میشن.
قسمت های سبز رنگ رو که میبینید اونا کامپوننت هایی هستند که مستقیم با api ها در تماس هستند. و می‌تونن به هر زبانی توی برنامه نویسی نوشته بشن. و کاملا هر کامپوننت از دیگر کامپوننت ها تفکیک شدست.

قسمت نارنجی رنگ کد پروژه ی شماست که از کامپوننت ها استفاده میکنه و در نهایت یک اپلیکیشن تحویل مشتری میده.

#میکروکامپوننت
#میکروفرانت

تلگرام:
@easymicroservice
@easymicroservices
@csharptips
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)