Forwarded from Easy Microservices
39 پکیج تا الان توی این زیر ساخت پیاده سازی و ریلیز شده.
@easymicroservices
@easymicroservice
@CsharpTips
@easymicroservices
@easymicroservice
@CsharpTips
#تخصصی
در معماری نرم افزار یکی از مولفههای مهم «حذف وابستگی» هست.
چطوری بفهمیم معماری نرم افزاری که پیاده سازی کردیم از نظر «حذف وابستگی» داره درست کار میکنه؟
تنها با طرح سوال میتونید متوجه معماری درست برای بخش «حذف وابستگی» بشید.
برای مثال:
از چه ابزاری برای کشینگ استفاده میکنید؟
پاسخ: Redis
آیا با بسته شدن Redis بخشی از سیستم شما از کار میوفته؟
در صورتی که پاسخ به این سوال بله باشه نشان از ضعف معماری در بخش «حذف وابستگی» هست.
سوال بعدی:
از چه ابزاری برای Api gateway استفاده میکنید؟
پاسخ: Ocelot
آیا با از کار افتادن Api gateway ها، بخشی از سیستم شما از کار میوفته؟
پاسخ به این سوال هم مانند سوال قبلی به شما کمک میکنه تا راه حل هایی رو برای حذف وابستگی ها در معماری نرم افزار خودتون پیدا کنید.
حذف وابستگی ها در معماری نرم افزار کمک میکنه تا اپلیکیشن شما با کمترین خطا در ارائهی خدمات به مشتری به کارش ادامه بده.
#وابستگی
#معماری
#معماری_نرم_افزار
@CSharpTips
در معماری نرم افزار یکی از مولفههای مهم «حذف وابستگی» هست.
چطوری بفهمیم معماری نرم افزاری که پیاده سازی کردیم از نظر «حذف وابستگی» داره درست کار میکنه؟
تنها با طرح سوال میتونید متوجه معماری درست برای بخش «حذف وابستگی» بشید.
برای مثال:
از چه ابزاری برای کشینگ استفاده میکنید؟
پاسخ: Redis
آیا با بسته شدن Redis بخشی از سیستم شما از کار میوفته؟
در صورتی که پاسخ به این سوال بله باشه نشان از ضعف معماری در بخش «حذف وابستگی» هست.
سوال بعدی:
از چه ابزاری برای Api gateway استفاده میکنید؟
پاسخ: Ocelot
آیا با از کار افتادن Api gateway ها، بخشی از سیستم شما از کار میوفته؟
پاسخ به این سوال هم مانند سوال قبلی به شما کمک میکنه تا راه حل هایی رو برای حذف وابستگی ها در معماری نرم افزار خودتون پیدا کنید.
حذف وابستگی ها در معماری نرم افزار کمک میکنه تا اپلیکیشن شما با کمترین خطا در ارائهی خدمات به مشتری به کارش ادامه بده.
#وابستگی
#معماری
#معماری_نرم_افزار
@CSharpTips
👍3
Forwarded from Easy Microservices
اگر شما نسخه های متعددی برای پکیج خودتون از دات نت دارید اما این نسخه ها با یک نسخه ثابت از پکیج سازگار نیستند. شما میتونید با اضافه کردن شرط در فایل csproj خودتون توسط این شرطها نسخههای متفاوتی از پکیجهارو به ازای هر نسخه از دات نت نصب کنید.
اینطوری پروژهی شما مالتیپلتفرم میشه (لازم نیست پلتفرمهای دیگه رو به خاطر کانفیلیت پکیجها حذف کنید) و برای نسخههای جدیدتر همیشه پکیجهای بروز شده دارید و نسخههای قدیمی تر با پکیجهای قدیمیتر کار میکنن.
#nuget
#package
#packages
#multipleplatform
#multiplatform
@csharptips
@easymicroservices
اینطوری پروژهی شما مالتیپلتفرم میشه (لازم نیست پلتفرمهای دیگه رو به خاطر کانفیلیت پکیجها حذف کنید) و برای نسخههای جدیدتر همیشه پکیجهای بروز شده دارید و نسخههای قدیمی تر با پکیجهای قدیمیتر کار میکنن.
#nuget
#package
#packages
#multipleplatform
#multiplatform
@csharptips
@easymicroservices
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
شما با نصب پکیج 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
با ایدههای ما همراه باشید ما همیشه سعی کردیم چند قدم جلوتر باشیم.
#csharptips
Forwarded from Easy Microservices
پکیج ServiceContracts هدفش اینه که خروجی های سرویس های شمارو یکپارچه، زیبا و مدیریت کنه.
استفاده از این پکیج خیلی آسونه فقط کافیه نصبش کنید و خروجی سرویس هاتون رو از این نوع بذارید.
اطلاعات خطا و stacktrace برای بحث دیباگینگ و این مسائل توش هندل شدست.
هدف این پکیج اینه که جلوی throw کردن مستقیم exception رو توسط برنامه نویس بگیره و خطاها به صورت زیبا و با پرفورمنس بیشتری به دست کلاینت برسه.
پذیرای هرگونه ایده و نظر هستیم.
اطلاعات بیشتر:
https://github.com/EasyMicroservices/ServiceContracts
@csharptips
@easymicroservices
استفاده از این پکیج خیلی آسونه فقط کافیه نصبش کنید و خروجی سرویس هاتون رو از این نوع بذارید.
اطلاعات خطا و 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
در حال حاضر من قسمتی از 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
پکیج های سری لاگ رو هم اضافه کردیم با سه تا از محبوبترین پکیج های لاگر توی دات نت:
Serilog
NLog
log4net
سورس:
https://github.com/EasyMicroservices/Logger
@easymicroservices
@easymicroservice
@csharptips
👍3
اینکه مایکروسافت دات نت ۸ رو میده بیرون بعد یه دفعه هرچی پکیج روی نیوگت میبینید نسخهاش ۸ میشه به خاطر این نیست که اون پکیجها حتما تغییرات مینور یا ماژور داشتند.
به خاطر اینه که همخوانی و یکسان سازی نسخههای پکیج به شمای توسعه دهنده این قابلیت رو میده تا دانگرید راحت تری انجام بدید که در صورت بروز مشکل بدونید توی نسخههای قدیمی تر چه پکیجهایی با اون نسخهها سازگار هستند.
اینطوری دیگه لازم نیست دنبال بگردید که پکیج الف نسخهی ۷.۱ با چه نسخهای از پکیج ب سازگار هست.
#نسخه
#سی_شارپ
#برنامه_نویسی
#nuget
#package
#version
@csharptips
به خاطر اینه که همخوانی و یکسان سازی نسخههای پکیج به شمای توسعه دهنده این قابلیت رو میده تا دانگرید راحت تری انجام بدید که در صورت بروز مشکل بدونید توی نسخههای قدیمی تر چه پکیجهایی با اون نسخهها سازگار هستند.
اینطوری دیگه لازم نیست دنبال بگردید که پکیج الف نسخهی ۷.۱ با چه نسخهای از پکیج ب سازگار هست.
#نسخه
#سی_شارپ
#برنامه_نویسی
#nuget
#package
#version
@csharptips
👍7
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
اما «نوع و روش» پیاده سازی این معماری از نظر من یک 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
هدف ما آسون کردن توسعهی نرم افزار هاست.
@easymicroservice
@easymicroservices
@csharptips
این کتابخانه واقعا برای Blazor عالیه و کامپوننتهای خیلی زیادی داره و حتی از RightToLeft هم پشتیبانی میکنه.
اگر شمام از Blazor خوشتون میاد حتما یه نگاه بهش بندازید.
اگرم ابزار رایگان و Open source ای میشناسید معرفی کنید.
https://mudblazor.com
@csharptips
اگر شمام از Blazor خوشتون میاد حتما یه نگاه بهش بندازید.
اگرم ابزار رایگان و Open source ای میشناسید معرفی کنید.
https://mudblazor.com
@csharptips
MudBlazor
MudBlazor - Blazor Component Library
Blazor Component Library based on Material Design. MudBlazor is easy to use and extend, especially for .NET devs because it uses almost no Javascript.
👍4
از قدیمی ها کیا با سیلورلایت خاطره دارن؟
اینم چیز جالبی داره میشه:
https://github.com/OpenSilver/OpenSilver
اینم چیز جالبی داره میشه:
https://github.com/OpenSilver/OpenSilver
GitHub
GitHub - OpenSilver/OpenSilver: This repository contains the source of both OpenSilver and CSHTML5. More information is available…
This repository contains the source of both OpenSilver and CSHTML5. More information is available at: www.opensilver.net and www.cshtml5.com - Read README.md for the instructions on how to build th...
👍1
Forwarded from Easy Microservices
خلاصهای از معماری میکروفرانتی که ما توی Easy Microservices در حال پیاده سازی اون هستیم. و تقریبا پکیجهای فرانت رو برای میکروسرویس Ordering آماده کردیم.
برای مثال اگر زیرساخت این معماری رو با سی شارپ بنویسید شما تکنولوژی های زیر رو دارید:
1.WPF
2.Blazor
3.MAUI
یا هرچی.
اگر شما میخواهید در وبسایت خودتون مدیریت محصولات داشته باشید.
پکیج کامپوننت مدیریت محصولات رو نصب میکنید، آدرس Api میکروسرویس محصولات رو به کامپوننت میدید و تمام.
کامپوننت مدیریت محصولات به پروژهی شما اضافه شد و قابل استفاده هست و کاربران میتونن محصولات اضافه،حذف و آپدیت کنند یا توی محصولات جستجو انجام بدن.
@Easymicroservices
@Easymicroservice
@CSharptips
برای مثال اگر زیرساخت این معماری رو با سی شارپ بنویسید شما تکنولوژی های زیر رو دارید:
1.WPF
2.Blazor
3.MAUI
یا هرچی.
اگر شما میخواهید در وبسایت خودتون مدیریت محصولات داشته باشید.
پکیج کامپوننت مدیریت محصولات رو نصب میکنید، آدرس Api میکروسرویس محصولات رو به کامپوننت میدید و تمام.
کامپوننت مدیریت محصولات به پروژهی شما اضافه شد و قابل استفاده هست و کاربران میتونن محصولات اضافه،حذف و آپدیت کنند یا توی محصولات جستجو انجام بدن.
@Easymicroservices
@Easymicroservice
@CSharptips
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
تابع AutoModelCreating در هستهی EasyMicroservices برای شما همهی ریلیشنها رو پیدا میکنه و اتوماتیک جداول رو به هم به صورت Fluent ریلیشن میزنه.
@EasyMicroservices
@EasyMicroservice
@CsharpTips
@EasyMicroservices
@EasyMicroservice
@CsharpTips
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
دو تابع جدید به هستهی Api اضافه کردیم. این توابع وظیفهی بروزرسانی رو مثل تابع Update بر عهده دارن منتهی فرقش اینه که اگر مقادیر پروپرتیهای کلاسی که میخواهید آپدیت کنید رو به صورت پیشفرض بفرستید اونا آپدیت نمیشن. در حالی که در متد Update هر مقداری که توی ورودی وجود داره بروزرسانی خواهد شد چه شما پرش کنید و چه پرش نکنید.
مقادیر پیشفرض یعنی چی؟
برای مثال مقدار پیشفرض اعداد 0 و بسته به نوع value type هست و مقدار پیشفرض کلاسها (reference type) و String ها نال (null) هست.
مزیت این تابع اینه که یه سری پارامتر ها وقتی میخواید به میکروسرویس ارسال کنید لازم نباشه حتما یک فانکشن جدا براش بسازید برای مسائل MVP سریع میتونید یه آپدیت بدید و ممکنه پارامتر های رابط کاربری کمتر از پارامتر های سرویس باشه، بنابراین همون چندتا پارامتر رو طرف آپدیت میکنه و بقیه پارامتر ها تا نسخه ی بعدی فرانت همچنان قابلیت آپدیت و تغییر توشون وجود نخواهد داشت.
@EasyMicroservices
@EasyMicroservice
@CSharpTips
مقادیر پیشفرض یعنی چی؟
برای مثال مقدار پیشفرض اعداد 0 و بسته به نوع value type هست و مقدار پیشفرض کلاسها (reference type) و String ها نال (null) هست.
مزیت این تابع اینه که یه سری پارامتر ها وقتی میخواید به میکروسرویس ارسال کنید لازم نباشه حتما یک فانکشن جدا براش بسازید برای مسائل MVP سریع میتونید یه آپدیت بدید و ممکنه پارامتر های رابط کاربری کمتر از پارامتر های سرویس باشه، بنابراین همون چندتا پارامتر رو طرف آپدیت میکنه و بقیه پارامتر ها تا نسخه ی بعدی فرانت همچنان قابلیت آپدیت و تغییر توشون وجود نخواهد داشت.
@EasyMicroservices
@EasyMicroservice
@CSharpTips
👍1
C# Programming Guide
چقدر این ساختار رو دوست داشتم: https://github.com/ardalis/ApiEndpoints
اولش که این ساختار کد زنی رو دیدم گفتم چقدر تمیزه ولی توی سی شارپ که این غیر ممکنه، این چطوری همچین ارث بری ای کرده.
فهمیدم داره از کلاس های تو در تو استفاده میکنه که در واقع آدم فکر میکنه داری متد کال میکنی ❤️
@csharptips
فهمیدم داره از کلاس های تو در تو استفاده میکنه که در واقع آدم فکر میکنه داری متد کال میکنی ❤️
@csharptips
👍1