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

https://www.docker.com/products/docker-desktop/

بعدش توش ثبت نام کنید و لاگین بشید.

بعد از اون شما به یک سیستم عامل نیاز دارید تا Image ها و Container هاتونو بتونید توش اجرا کنید. برای نصب سیستم عامل لینوکس به این دستور نیاز دارید:

docker pull ubuntu:18.04

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

بعد از اینکه تنظیمات اولیه ی داکر رو انجام دادید میتونید از دستور زیر برای ساخت Image خودتون استفاده کنید:

docker build . -t mytesttag


اون نقطه ای که اون وسط میبینید محل موجود بودن فایل DockerFile شماست که توی سورسی که همون اول بهتون دادم وجود داره و آموزش ها رو بر اساس همون فایل بردیم جلو. حالا اگه مسیرتون جای دیگه بود میتونید به جای نقطه یک مسیر به داکر بدید تا فایل ساخت Image رو پیدا کنه.
فایل image شما به نام mytesttag که توی دستور زدید ساخته میشه و با دستور زیر میتونید لیست Image هاتونو ببینید:

docker images



خب بعد از این فقط کافیه که image خودتون رو توی یک container اجرا کنید:

docker run -d -p 8080:1041 mytesttag mycontainer


خوب بریم دستور بالا رو بررسی کنیم ببینیم چیکار میکنه.
فلگ -d مشخص میکنه که کانتینر در پس زمینه اجرا بشه و روی کنسول فعلی که دارید دستورات رو میزنید اجرا نشه و اگر میخواهید همه چیز رو توی همین کنسولی که دستور رو میزنید ببینید میتونید فلگ رو بردارید.
فلگ -p هم باعث میشه که کانتینر روی یک پورت خاص گوش بزنگ باشه. الان کانتینر روی پورت 8080 روی localhost سیستم شما گوش بزنگ میمونه و توی مرورگر بزنید پورت 8080 رو به کانتینر میزنه حالا کانتینر میاد این پورت رو به پورت 1041 که جلوش زدم فروارد میکنه و پاسخ رو به شما بر میگردونه.
اینطوری شما میتونید چندتا کانتینتر بیارید بالا که همشون روی پورت 1041 گوش بزنگ هستند ولی پورت های کانتینر باید متفاوت باشه. مثلا 8080 و 8081 و 8082 و الی آخر.
برای همین میتونیم روی ایزوله بودن و مستقل بودن محیط ها روش حساب کنیم.

در ادامه یک فاصله و اسم image تون رو میدید و با یک فایل اسم کانتینر که اینجا mycontainer هست رو مشخص میکنیم.

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

آسون بود؟

@csharptips
@easymicroservice
@easymicroservices

#داکر
#docker
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
چرا باید از پترن MVVM توی میکروکامپوننت‌ها استفاده کنیم؟ مزیت این پترن روی معماری میکروکامپوننت چیه؟

همانطور که در تصویر می‌بینید ما به ازای رابط کاربری برای هر کامپوننت بهتره که فقط یک View Model داشته باشیم. View Model شامل بیزینس لاجیک یا به عبارتی Code Behind شما می‌شن.
فرض کنید من یک میکرو کامپوننت میزنم که قراره فقط صفحه‌ی لاگین رو پوشش بده.
طراحی، پیاده سازی UI ممکنه توی سه تا بیزنس زیر متفاوت باشه:
1.دسکتاپ
2.وب
3.موبایل
4.پنل

آیا به ازای هر کدوم از این رابط کاربری ها باید یکبار بیزینس لاجیک ها و Api call ها رو پیاده سازی کنم؟ خیر.

برای همین ما یک لایه به نام View Model میسازیم تا تمامی UI ها از اون رابط کاربری استفاده کنند. اینطوری رابط کاربری از لاجیک کاملا جداسازی شده و وابستگی بینشون از بین میره و توسعه سریعتر و خطایابی آسون‌تر از همه مهمتر تست نویسی رو آسونتر میکنیم.

@easymicroservice
@easymicroservices
@csharptips

#microcomponent
#میکروکامپوننت
#میکروفرانت
#microfrontend
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
پکیج EasyMicroservices.Logger یک اینترفیس به شما ارائه میکنه که با استفاده از اون میتونید توی اپلیکیشن خودتون هرچی میخواید رو لاگ کنید.
این اینترفیس میتونه سطوح زیر رو لاگ کنه:

Verbose
Debug
Information
Warning
Error
Fatal

یک اینترفیس هم برای توابع async وجود داره که میتونید ازش استفاده کنید.

تا به اینجا هم تامین کننده های زیر برای لاگ کردن توی دات نت پیاده سازی شدن:


1 .Log4net
2. Logary
3. Loupe
4. NLog
5. Sentry
6. Serilog


با استفاده از این اینترفیس هر زمان که دوست داشتید میتونید پکیج تامین کننده لاگ خودتون رو با یک خط کد تغییر بدید بدون اینکه زیر ساخت پروژه ی شما دست بخوره.
سورس:
https://github.com/EasyMicroservices/Logger

@easymicroservice
@easymicroservices
@csharptips

#log
#logger
#csharp
#dotnet
واقعا تلاشت ستودنی بود آفرین 😁
برای اینکه پکیج‌هاتون رو همیشه بروز نگه دارید و نیازی نباشه که همیشه آپدیتشون کنید می‌تونید از کاراکتر ستاره به جای نسخه استفاده کنید.
این قابلیت به شما این اجازه رو میده تا آخرین نسخه‌ی استیبیل شده از اون پکیج همیشه روی پروژه‌ی شما فعال باشه.

#سی_شارپ
#nuget
#package
#packagemanager

@csharptips
👍8
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
Easy Microservices
Photo
ارث‌بری در رابط کاربری چگونه است؟ آیا قابلیت پیاده‌سازی دارد؟
ارث‌بری در رابط کاربری مانند برنامه‌نویسی نیست و پیاده‌سازی آن به‌مراتب دشوارتر است، چرا که ابزار‌های رابط کاربری هنوز در حال توسعه‌اند و به آن بلوغ نرسیده‌اند که بتوان روی آن‌ها معماری دقیق و کاملی را پیاده کرد.
امروز ما می‌خواهیم یک نمونه از ارث‌بری در رابط کاربری را به شما نشان دهیم تا ببینید که ما در Easy Microservices چگونه این موضوع را حل می‌کنیم.

تصور کنید که ما دو UI Kit قدرتمند MudBlazor و Radzen را در اختیار داریم. هر یک از این کامپوننت‌ها خصوصیات خود را دارند؛ به طور مثال یک دکمه در MudBlazor با نام MudButton و در Radzen با نام RadzenButton معرفی شده است و هر کدام ویژگی‌های خاص خود را دارند.

حال اگر به وابستگی‌ها بپردازیم، فرض کنید کل پروژه را با Radzen توسعه داده‌ایم و بعد متوجه شویم که پشتیبانی از RTL (متن چپ-به‌راست) را ندارد، دیگر چه عملی باید انجام داد؟ آیا باید وقت زیادی صرف کنیم تا کل پروژه را به MudBlazor تبدیل کنیم؟

راه‌حلی که ما ارائه کرده‌ایم به این ترتیب است که ما یک کنترل به نام EasyButton می‌سازیم و سپس آن را برای Radzen و MudBlazor پیاده‌سازی می‌کنیم، دقیقاً همان کاری که در ارث‌بری دو کلاس از یک interface انجام می‌دهیم.

در نتیجه، اگر سیاست‌مان تغییر کند، تنها کافی است که چند خط کد را تغییر دهیم و بین UI Kits جابه‌جا شویم.

شما می‌توانید نمونه پروژه ساده‌ای که من به صورت پیاده‌سازی شده در اینجا توصیف کردم را در گیت‌هاب مشاهده کنید:

https://github.com/EasyMicroservices/UI-Kits/

#inheritance
#csharp
#blazor
#microcomponent
#easymicroservices

@easymicroservice
@easymicroservices
@csharptips
👍2
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
سلام.
با یک سورس جالب اومدم، همونطور که قولش رو داده بودم بهتون نمونه‌هایی می‌فرستم که با مطالعه‌ی سورس با نحوه‌ی کارکرد معماری بیشتر آشنا بشید.
یک بازی ساختم، بازی Avalon رو پیاده سازی کردم.
این سورس شامل بکند (سی شارپ Asp Core و EF Core) هست و شامل فرانت Maui که کراس پلتفرمه و میتونید روی اندروید و IOS و ویندوز اجراش کنید.
هم بکند از زیرساخت معماری Easy Microservices داره استفاده می‌کنه و هم فرانت به صورت میکرو کامپوننت توسعه داده شده. برای مثال شما توی فرانت رابط کاربری صفحات لاگین و ثبت نام رو نمی‌بینید و اینها به صورت یک کامپوننت به سورس اضافه شدن و مورد استفاده قرار گرفتن.

زیرساخت بکند از میکروسرویس‌های Authentication، Identity، WhiteLabels، Content و Avalon استفاده کرده. (اطلاعات نقش ها و دسترسی های یوزرها در Authentication مدیریت شده.)

سورس:
https://github.com/Ali-YousefiTelori/AvalonGame

@easymicroservice
@easymicroservices
@csharptips
👍4
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
ir.framesoft.avalongame.apk
52.3 MB
یک نسخه قابل استفاده از بازی در اندروید.
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
این سورس به شما کمک میکنه تا آی پی هایی که درخواست اتصال به سرور شمارو میدن تا بالاخره بتونن لاگین بشن و سرور شما هک بشه رو بلاک میکنه.
اگر به event log های سیستم عاملتون برید شاهد درخواست هایی هستید که به سیستم عامل شما زده میشه ولی با خطای اشتباه بودن نام کاربری و رمز عبور مواجه میشه.
اگر سرور شما قبلا هک شده باشه رمز عبور شما توسط این سرور ها در دیتابیسشون ذخیره شده و استفاده مجدد از اون رمز عبور باعث هک مجدد سیستم عامل میشه.
فقط کافیه Role ای که توی فایروال سیستم عاملتون گذاشتید رو به این ابزار بدید تا تمامی آی پی هایی که به شما درخواست میدن رو بلاک کنه و بعدش دیگه این درخواست ها رو در Event Log ویندوز نخواهی دید.
سورس: سی شارپ
سیستم عامل: ویندوز

https://github.com/Ali-YousefiTelori/Firewall-Ip-Blocker

@easymicroservice
@easymicroservices
@csharptips
😁1
C# Programming Guide
Evan Band – Alijenab
Audio
این شعر رو یادتونه؟ اینم آهنگش
😁1
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
رعایت یا ساخت اصول در مهندسی نرم افزار به شما کمک میکنه تا بتونید توسعه‌ی نرم افزار رو نه فقط برای خودتون بلکه برای تیم‌های مختلف آسون کنید.
من یه نمونه از این رو در تصویر براتون به نمایش گذاشتم که از یک سری اصول نام گذاری در سورس پروژه استفاده کردم و وقتی میخواستم برای Pipeline های Azure یک تمپلیت بسازم با کمترین زحمت تونستم اینکار رو انجام بدم. یعنی یک کار خوب توی تیم توسعه باعث راحتی کار توی تیم DevOps میشه.

@easymicroservices
@easymicroservice
@csharptips

#devops
#azure
#pipeline
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
اگر یک کامیونیتی بذاریم توی هفته های آتی و در مورد این صحبت کنیم که توی این یکسال توی Easy Microservices چیکار کردیم شرکت میکنید؟
Final Results
24%
این هفته پنجشنبه خوبه
27%
این هفته جمعه خوبه
11%
هفته ی بعدش پنجشنبه خوبه
6%
هفته ی بعدش جمعه خوبه
0%
روزای دیگه باشه
7%
متاسفانه وقت و فرصتش رو ندارم
24%
فعلا نظری ندارم
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
بچه ها با توجه به رای‌گیری قبلی بیشترین رای رو جمعه این هفته آورد لطفا در این نظر سنجی هم شرکت کنید برای اینکه زمانش رو هم مشخص کنیم.
Final Results
22%
صبح باشه خوب
20%
ظهر باشه خوبه
41%
بعد از ظهر یا عصر باشه خوبه
46%
شب باشه خوبه
22%
نظری ندارم
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
خب بچه‌ها با توجه به اینکه رای‌گیری برای امشب پیروز شد، لطفا بگید امشب ساعت 8 در میتینگ تلگرام (توی همین کانال) شرکت می‌کنید یا خیر؟
Final Results
40%
بله حتما میام
14%
نه متاسفانه نمیتونم بیام
41%
مطمئن نیستم ولی سعیم رو میکنم
5%
مشاهده نظرات (نظری ندارم)
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
بچه های برای ورود به میتینگ توی گوگل میت روی لینک زیر کلیک کنید بی صبرانه منتظرتون هستیم ساعت 8 شروع میکنیم به امید خدا.

https://meet.google.com/mhb-erzt-pxs
Audio
فایل صوتی جلسه‌ی Easy microservices
به زودی فایل تصویری هم توی آپارات آپلود میشه و برای دوستان قابل استفاده خواهد بود.
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
سلام بچه‌ها، اول از همه ممنون از اینکه دعوت مارو پذیرفتید و مارو قابل دونستید، از اونجایی که استقبال شما باعث شد انگیزه‌ام برای ادامه‌ی این کامیونیتی بیشتر بشه، هفته‌ی بعدی هم یک جلسه باهم داشته باشیم و یک رای گیری میذارم مثل قبل، روز و ساعتش رو مشخص میکنم. بنابراین این کار رو پر قدرت ادامه خواهیم داد به امید خدا.

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

دمتون گرم.
مرسی که هستید.


@easymicroservices
@easymicroservice

@csharptips
👍5
Forwarded from Easy Microservices (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)