Easy Microservices
دو تابع جدید به هستهی Api اضافه کردیم. این توابع وظیفهی بروزرسانی رو مثل تابع Update بر عهده دارن منتهی فرقش اینه که اگر مقادیر پروپرتیهای کلاسی که میخواهید آپدیت کنید رو به صورت پیشفرض بفرستید اونا آپدیت نمیشن. در حالی که در متد Update هر مقداری که توی…
به عبارتی فرض رو بر این بگیرید که بکند این پارامتر ها رو توی دیتابیس داره:
Name
Family
حالا بکند بعدا میاد یک پارامتر جدید به نام Age اضافه میکنه یا حتی پارامتر Age توی دیتابیس بوده ولی توی Dto یا Contract نبوده.
وقتی فرانت آپدیت نشده باشه و کاربران با نسخه ی قبلی همچنان دارن Api رو کال میکنند و مقدار Name و Family رو میفرستن. این تابع جلوی آپدیت شدن Age رو توی دیتابیس میگیره و از مقادیر پیشفرض و قبلی شما محافظت میکنه.
این در حالیه که تابع Update کاری نداره شما چی رو پر میکنید یا نمیکنید، شما هرچی بفرستید کل جدول رو بروزرسانی میکنه.
Name
Family
حالا بکند بعدا میاد یک پارامتر جدید به نام Age اضافه میکنه یا حتی پارامتر Age توی دیتابیس بوده ولی توی Dto یا Contract نبوده.
وقتی فرانت آپدیت نشده باشه و کاربران با نسخه ی قبلی همچنان دارن Api رو کال میکنند و مقدار Name و Family رو میفرستن. این تابع جلوی آپدیت شدن Age رو توی دیتابیس میگیره و از مقادیر پیشفرض و قبلی شما محافظت میکنه.
این در حالیه که تابع Update کاری نداره شما چی رو پر میکنید یا نمیکنید، شما هرچی بفرستید کل جدول رو بروزرسانی میکنه.
👍4
یه کار عجیب و باحال کردیم.
این فایل های sln رو میبینید که تهش نسخه ی دات نت رو زده؟
اگر هر کدوم از اینارو اجرا کنید سلوشن و کلیه پروژه های داخلش با اون نسخه از دات اجرا میشه بدون اینکه لازم باشه TargetFramework رو توی csproj ها دست بزنید.
یعنی اگر فردا دات نت 9 اومد فقط کافیه اسم فایل رو net9.0 بذارید و اجراش کنید. تمام.
حالا بهتون میگم چطوری اینکار رو بکنید.
@easymicroservice
@easymicroservices
این فایل های sln رو میبینید که تهش نسخه ی دات نت رو زده؟
اگر هر کدوم از اینارو اجرا کنید سلوشن و کلیه پروژه های داخلش با اون نسخه از دات اجرا میشه بدون اینکه لازم باشه TargetFramework رو توی csproj ها دست بزنید.
یعنی اگر فردا دات نت 9 اومد فقط کافیه اسم فایل رو net9.0 بذارید و اجراش کنید. تمام.
حالا بهتون میگم چطوری اینکار رو بکنید.
@easymicroservice
@easymicroservices
👍1
Easy Microservices
یه کار عجیب و باحال کردیم. این فایل های sln رو میبینید که تهش نسخه ی دات نت رو زده؟ اگر هر کدوم از اینارو اجرا کنید سلوشن و کلیه پروژه های داخلش با اون نسخه از دات اجرا میشه بدون اینکه لازم باشه TargetFramework رو توی csproj ها دست بزنید. یعنی اگر فردا دات…
میتونید سورسش رو ایجا ببینید:
https://github.com/EasyMicroservices/Serialization
اما چطوری اینکار رو کردیم؟
توسط شرط هایی که توی csproj ها اضافه کردیم این قابلیت به سیستم اضافه شده:
اینجا بهش گفتیم اگر توی اسم سلوشن -net وجود داشت بیاد TargetFramework رو از توی اسم فایل استخراج کنه در غیر اینصورت اون TargetFramework های پیشفرض رو در نظر بگیره.
@easymicroservice
@easymicroservices
@csharptips
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
GitHub
GitHub - EasyMicroservices/Serialization: Wrapper for any Serialize package
Wrapper for any Serialize package. Contribute to EasyMicroservices/Serialization development by creating an account on GitHub.
👍2
به میکروسرویس و میکروفرانت Places که بچهی تازه متولد شده هست که تو 5 ساعت پیاده سازی شده سلام کنید 😁.
این کوچولو قراره مدیریت شهرها و کشورها و استانها رو براتون انجام بده.
حالشو ببرید.
رابط کاربری با Blazor زده شده و بکندش هم با Asp Core
@easymicroservices
@easymicroservice
این کوچولو قراره مدیریت شهرها و کشورها و استانها رو براتون انجام بده.
حالشو ببرید.
رابط کاربری با Blazor زده شده و بکندش هم با Asp Core
@easymicroservices
@easymicroservice
👍2
پکیج BinaryGo هنوز هم بعد از اینکه دات نت 8 اومد از grpc و zeroformatter سریعتره.
و سریالایزشن json اش هم از textjson مایکروسافت سریعتر عمل میکنه.
خیلی وقته این پکیج رو به دلیل کمبود وقت توسعه ندادم ولی هنوزم پرچمش بالاست:
https://github.com/Ali-YousefiTelori/BinaryGo
@CsharpTips
@easymicroservices
@easymicroservice
و سریالایزشن json اش هم از textjson مایکروسافت سریعتر عمل میکنه.
خیلی وقته این پکیج رو به دلیل کمبود وقت توسعه ندادم ولی هنوزم پرچمش بالاست:
https://github.com/Ali-YousefiTelori/BinaryGo
@CsharpTips
@easymicroservices
@easymicroservice
👌2
میکروکامپوننت های سمت فرانت رو ما چطوری هندل میکنیم؟
قسمت آبی رنگ api های شما هستند که میکروکامپوننتها به اون متصل میشن.
قسمت های سبز رنگ رو که میبینید اونا کامپوننت هایی هستند که مستقیم با api ها در تماس هستند. و میتونن به هر زبانی توی برنامه نویسی نوشته بشن. و کاملا هر کامپوننت از دیگر کامپوننت ها تفکیک شدست.
قسمت نارنجی رنگ کد پروژه ی شماست که از کامپوننت ها استفاده میکنه و در نهایت یک اپلیکیشن تحویل مشتری میده.
#میکروکامپوننت
#میکروفرانت
تلگرام:
@easymicroservice
@easymicroservices
@csharptips
قسمت آبی رنگ api های شما هستند که میکروکامپوننتها به اون متصل میشن.
قسمت های سبز رنگ رو که میبینید اونا کامپوننت هایی هستند که مستقیم با api ها در تماس هستند. و میتونن به هر زبانی توی برنامه نویسی نوشته بشن. و کاملا هر کامپوننت از دیگر کامپوننت ها تفکیک شدست.
قسمت نارنجی رنگ کد پروژه ی شماست که از کامپوننت ها استفاده میکنه و در نهایت یک اپلیکیشن تحویل مشتری میده.
#میکروکامپوننت
#میکروفرانت
تلگرام:
@easymicroservice
@easymicroservices
@csharptips
به نظر شما یادگیری Docker سخت هست؟ و کار کردن باهاش رو چیز بزرگی میبینید؟
Final Results
15%
آره سخته ولی سراغش نرفتم
10%
آره سخته و مفاهیمش خیلی پیچیدست
37%
نه خیلی هم آسونه دارم باهاش کار میکنم
29%
نه فکر نمیکنم سخت باشه
8%
نظری ندارم
Easy Microservices
به نظر شما یادگیری Docker سخت هست؟ و کار کردن باهاش رو چیز بزرگی میبینید؟
خب، میخوایم چندتا از دستورات و همچنین کار با داکر رو یاد بگیریم ولی این نکته رو بگم که داکر از گیت هم آسون تره. در واقع اونقدر آسون هست که سریع بتونید یاد بگیرید و باهاش کار کنید.
اگر بخوام یک توضیحی در مورد داکر بدم که چی هست که از پیر و جوون همه متوجه اش بشید اینه:
یک کیس رو وقتی روشن میکنید و سیستم عامل براتون اجرا میشه یک محیط کاملا ایزوله براتون ایجاد میکنه که شامل هارد و رم و سی پی یو هست و شما میتونید توی سیستم عامل اپلیکیشن هاتون رو نصب کنید و اجرا کنید و باهاشون کار کنید.
حالا اگر بهتون بگم که توی سیستم عاملی که دارید باهاش کار میکنید آیا میتونید یک محیط ایزوله درست کنید که از خود محیط سیستم عامل شما جدا باشه؟
مثلا اگر دوتا اپلیکیشن داشته باشید که دیتابیس و دیسک و ابزار های خودشون رو دارن ولی نمیخواید کارهایی که این اپلیکیشن ها میکنن هیچ دخل و تصرفی روی کیس اصلی شما داشته باشن، یا حتی هیچ دخل و تصرفی نسبت به هم داشته باشن.
خب اگر یکم با کامپیوتر کار کرده باشید حتما با ماشین های مجازی آشنایی دارید ابزارهایی مثل VMware و HyperV و VBox و ... که این امکان رو به شما میدن که محیط های ایزوله بسازید و توی ماشین های مجازی ای که ساختید سیستم عامل مورد نظرتون رو نصب کنید و توش هرکاری که دوست دارید بکنید. یعنی اگر توی اون سیستم عامل مجازی ویروس هم اجرا کنید فقط همون سیستم عامل میترکه و کاری به سیستم عامل شما نداره به این میگن محیط ایزوله.
یادمه اون موقع که داشتم آنتی ویروس مینوشتم برای اینکه ویروس ها و عملکردشون رو شناسایی کنم اونارو توی محیط ایزوله اجرا میکردم و ببینم این ویروس ها چه بلایی سر ماشین های مجازی میارن 😂.
اگر تعاریف بالا رو متوجه شدید داکر همینه بچه ها، و خیلی هم از مدیریت یک ماشین مجازی کار کردن باهاش آسون تره.
تو مقالهی بعدی بهتون میگم که چطوری یک سورس رو توی داکر به صورت ایزوله اجرا کنید و توی سیستم عامل خودتون ازش استفاده کنید.
#داکر
#docker
@easymicroservices
@easymicroservice
@csharptips
اگر بخوام یک توضیحی در مورد داکر بدم که چی هست که از پیر و جوون همه متوجه اش بشید اینه:
یک کیس رو وقتی روشن میکنید و سیستم عامل براتون اجرا میشه یک محیط کاملا ایزوله براتون ایجاد میکنه که شامل هارد و رم و سی پی یو هست و شما میتونید توی سیستم عامل اپلیکیشن هاتون رو نصب کنید و اجرا کنید و باهاشون کار کنید.
حالا اگر بهتون بگم که توی سیستم عاملی که دارید باهاش کار میکنید آیا میتونید یک محیط ایزوله درست کنید که از خود محیط سیستم عامل شما جدا باشه؟
مثلا اگر دوتا اپلیکیشن داشته باشید که دیتابیس و دیسک و ابزار های خودشون رو دارن ولی نمیخواید کارهایی که این اپلیکیشن ها میکنن هیچ دخل و تصرفی روی کیس اصلی شما داشته باشن، یا حتی هیچ دخل و تصرفی نسبت به هم داشته باشن.
خب اگر یکم با کامپیوتر کار کرده باشید حتما با ماشین های مجازی آشنایی دارید ابزارهایی مثل VMware و HyperV و VBox و ... که این امکان رو به شما میدن که محیط های ایزوله بسازید و توی ماشین های مجازی ای که ساختید سیستم عامل مورد نظرتون رو نصب کنید و توش هرکاری که دوست دارید بکنید. یعنی اگر توی اون سیستم عامل مجازی ویروس هم اجرا کنید فقط همون سیستم عامل میترکه و کاری به سیستم عامل شما نداره به این میگن محیط ایزوله.
یادمه اون موقع که داشتم آنتی ویروس مینوشتم برای اینکه ویروس ها و عملکردشون رو شناسایی کنم اونارو توی محیط ایزوله اجرا میکردم و ببینم این ویروس ها چه بلایی سر ماشین های مجازی میارن 😂.
اگر تعاریف بالا رو متوجه شدید داکر همینه بچه ها، و خیلی هم از مدیریت یک ماشین مجازی کار کردن باهاش آسون تره.
تو مقالهی بعدی بهتون میگم که چطوری یک سورس رو توی داکر به صورت ایزوله اجرا کنید و توی سیستم عامل خودتون ازش استفاده کنید.
#داکر
#docker
@easymicroservices
@easymicroservice
@csharptips
👍4
این یک فایل داکر هست که ما توی میکروسرویس White Label ساختیم.
همین چند خط کد کار مارو راه میندازه و همونطور که میبینید خیلی آسونه من چند خط اول رو براتون توضیح میدم تا ببینید چقدر آسون کار میکنه.
@csharptips
@easymicroservice
@easymicroservices
#docker
همین چند خط کد کار مارو راه میندازه و همونطور که میبینید خیلی آسونه من چند خط اول رو براتون توضیح میدم تا ببینید چقدر آسون کار میکنه.
@csharptips
@easymicroservice
@easymicroservices
#docker
👍2
Easy Microservices
این یک فایل داکر هست که ما توی میکروسرویس White Label ساختیم. همین چند خط کد کار مارو راه میندازه و همونطور که میبینید خیلی آسونه من چند خط اول رو براتون توضیح میدم تا ببینید چقدر آسون کار میکنه. @csharptips @easymicroservice @easymicroservices #docker
دوتا مفهوم مهم که توی داکر باید متوجه بشید Images و Containers هستند.
اگر بخوام مثل پست قبلی ساده توضیح بدم.
در واقع Image هارو سورس کدی ببینید که قراره توی یک محیطی اجرا کنید. و Containers ها رو تب های مرورگر ببینید که همشون به یک سورس وصل هستند ولی کاملا مستقل از هم اجرا شدن و کاری با هم ندارن . حالا یکم تعریف رو تخصصی تر کنم، Images ها در واقع همون جایی هستند که سیستم عامل مجازی شما نصب میشه که میتونه لینوکس یا ویندوز یا ... باشه. و Container ها در واقع بسته های ایزوله ای هستند که روی اون سیستم عامل اجرا میشن. مثلا شما یک سیستم عامل لینوکس انتخاب و نصب میکنی بعد داخلش 5 تا کانتینر میسازی که هرکدوم از این کانتینرها میتونن یک سورس اپلیکیشن شمارو در خودشون اجرا کنن. شبیه کاری که هاست ها می کنن و شما میتونید صد تا وبسایت رو روی یک سیستم عامل اجرا کنید یا کاری که IIS یا Apache میکنه.
چیزی که توی تصویر میبینید یه سری دستور هست برای ساخت و اجرای Image و هرکسی این فایل رو داشته باشه میتونه با یه سری دستور توی داکر Image رو بسازه و وبسایت رو به صورت ایزوله اجرا کنه که جلوتر توضیح میدم.
@csharptips
@easymicroservice
@easymicroservices
#docker
اگر بخوام مثل پست قبلی ساده توضیح بدم.
در واقع Image هارو سورس کدی ببینید که قراره توی یک محیطی اجرا کنید. و Containers ها رو تب های مرورگر ببینید که همشون به یک سورس وصل هستند ولی کاملا مستقل از هم اجرا شدن و کاری با هم ندارن . حالا یکم تعریف رو تخصصی تر کنم، Images ها در واقع همون جایی هستند که سیستم عامل مجازی شما نصب میشه که میتونه لینوکس یا ویندوز یا ... باشه. و Container ها در واقع بسته های ایزوله ای هستند که روی اون سیستم عامل اجرا میشن. مثلا شما یک سیستم عامل لینوکس انتخاب و نصب میکنی بعد داخلش 5 تا کانتینر میسازی که هرکدوم از این کانتینرها میتونن یک سورس اپلیکیشن شمارو در خودشون اجرا کنن. شبیه کاری که هاست ها می کنن و شما میتونید صد تا وبسایت رو روی یک سیستم عامل اجرا کنید یا کاری که IIS یا Apache میکنه.
چیزی که توی تصویر میبینید یه سری دستور هست برای ساخت و اجرای Image و هرکسی این فایل رو داشته باشه میتونه با یه سری دستور توی داکر Image رو بسازه و وبسایت رو به صورت ایزوله اجرا کنه که جلوتر توضیح میدم.
@csharptips
@easymicroservice
@easymicroservices
#docker
👍3
Easy Microservices
این یک فایل داکر هست که ما توی میکروسرویس White Label ساختیم. همین چند خط کد کار مارو راه میندازه و همونطور که میبینید خیلی آسونه من چند خط اول رو براتون توضیح میدم تا ببینید چقدر آسون کار میکنه. @csharptips @easymicroservice @easymicroservices #docker
توی خط اول ما دستور زیر رو داریم:
با این دستور شما پایهی Image خودتون رو مشخص میکنید. فرض کنید میخواهید توی برنامه نویسی از یک کلاس ارث ببرید و اون کلاسی که ازش ارث میبرید یک سری مشخصات پایه رو توی خودش داره که قسمت زیادی از کار شمارو راه میاندازه.
الان این دستور داره از سایت مایکروسافت اطلاعات پایهی کانتینر رو برای دات نت 6 فراهم میکنه. مثلا sdk دات نت 6 روی Image شما نصب میشه تا بتونید سورس های دات نت 6 رو روش اجرا کنید.
بچهها مشابه همین دستورات رو برای Github Actions و Azure Pipeline ها هم دارید که برای مباحث CI/CD میتونید ازشون استفاده کنید. برای اینکه یکم با مباحث Devops هم آشنا بشید جلوتر بهتون میگم که توی گیتهاب و آژور اینا به چه شکل هستند و چیکار میکنند.
بزن لایک رو و شیر کن که انگیزه بگیرم زودتر مطالب منتشر کنم 😍.
#docker
#داکر
@csharptips
@easymicroservice
@easymicroservices
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS Build
با این دستور شما پایهی Image خودتون رو مشخص میکنید. فرض کنید میخواهید توی برنامه نویسی از یک کلاس ارث ببرید و اون کلاسی که ازش ارث میبرید یک سری مشخصات پایه رو توی خودش داره که قسمت زیادی از کار شمارو راه میاندازه.
الان این دستور داره از سایت مایکروسافت اطلاعات پایهی کانتینر رو برای دات نت 6 فراهم میکنه. مثلا sdk دات نت 6 روی Image شما نصب میشه تا بتونید سورس های دات نت 6 رو روش اجرا کنید.
بچهها مشابه همین دستورات رو برای Github Actions و Azure Pipeline ها هم دارید که برای مباحث CI/CD میتونید ازشون استفاده کنید. برای اینکه یکم با مباحث Devops هم آشنا بشید جلوتر بهتون میگم که توی گیتهاب و آژور اینا به چه شکل هستند و چیکار میکنند.
بزن لایک رو و شیر کن که انگیزه بگیرم زودتر مطالب منتشر کنم 😍.
#docker
#داکر
@csharptips
@easymicroservice
@easymicroservices
👍6👏1
Easy Microservices
این یک فایل داکر هست که ما توی میکروسرویس White Label ساختیم. همین چند خط کد کار مارو راه میندازه و همونطور که میبینید خیلی آسونه من چند خط اول رو براتون توضیح میدم تا ببینید چقدر آسون کار میکنه. @csharptips @easymicroservice @easymicroservices #docker
بعدش دوتا دستور زیر رو داریم
با استفاده از WORKDIR به داکر میگید که فایل ها رو کجا بریزه. سورس شما توی اون پوشه قرار میگیره و بعد از این هر دستوری بزنید توی اون پوشه انجام میشه. برای مثال بعد از این دستور COPY رو داریم که سورس رو کپی میکنه توی اون پوشه.
بعد از این دوتا دستور، دستور RUN رو داریم، اینجا شما یک دستور رو توی سیستم عامل اجرا میکنید. با دستورات و کامند های دات نت که آشنا باشید از اینجا به بعد همش دستورات دات نت هست و ربطی به داکر نداره.
توی خط اول بهش گفتم پکیج های پروژمو دانلود کن و پروژمو آماده کن.
توی خط دوم گفتم پروژه دات نتم رو کامپایل بگیر
توی خط سوم گفتم تست هام رو اجرا کن روی دات نت 6.0
توی خط چهارم هم گفتم پروژمو پابلیش بگیر.
#docker
#داکر
@csharptips
@easymicroservice
@easymicroservices
WORKDIR /source
COPY . .
با استفاده از WORKDIR به داکر میگید که فایل ها رو کجا بریزه. سورس شما توی اون پوشه قرار میگیره و بعد از این هر دستوری بزنید توی اون پوشه انجام میشه. برای مثال بعد از این دستور COPY رو داریم که سورس رو کپی میکنه توی اون پوشه.
بعد از این دوتا دستور، دستور RUN رو داریم، اینجا شما یک دستور رو توی سیستم عامل اجرا میکنید. با دستورات و کامند های دات نت که آشنا باشید از اینجا به بعد همش دستورات دات نت هست و ربطی به داکر نداره.
RUN dotnet restore EasyMicroservices.WhiteLabelsMicroservice-net6.0.sln
RUN dotnet build EasyMicroservices.WhiteLabelsMicroservice-net6.0.sln --no-restore
RUN dotnet test EasyMicroservices.WhiteLabelsMicroservice-net6.0.sln --no-build --verbosity normal -f net6.0
RUN dotnet publish EasyMicroservices.WhiteLabelsMicroservice-net6.0.sln -c release -o /app --no-restore
توی خط اول بهش گفتم پکیج های پروژمو دانلود کن و پروژمو آماده کن.
توی خط دوم گفتم پروژه دات نتم رو کامپایل بگیر
توی خط سوم گفتم تست هام رو اجرا کن روی دات نت 6.0
توی خط چهارم هم گفتم پروژمو پابلیش بگیر.
#docker
#داکر
@csharptips
@easymicroservice
@easymicroservices
👍5
نرم افزار داکر رو میتونید از لنیک زیر دانلود کنید:
https://www.docker.com/products/docker-desktop/
بعدش توش ثبت نام کنید و لاگین بشید.
بعد از اون شما به یک سیستم عامل نیاز دارید تا Image ها و Container هاتونو بتونید توش اجرا کنید. برای نصب سیستم عامل لینوکس به این دستور نیاز دارید:
بسته به نیازتون هر نسخه از سیستم عاملی که داکر ساپورت میکنه رو میتونید نصب کنید.که اینجا من نسخه ی 18.04 رو نصب کردم. البته میتونید نسخه های کاستوم نشده رو هم نصب کنید که حجم کمتری دارند و کلی کارای دیگه.
بعد از اینکه تنظیمات اولیه ی داکر رو انجام دادید میتونید از دستور زیر برای ساخت Image خودتون استفاده کنید:
اون نقطه ای که اون وسط میبینید محل موجود بودن فایل DockerFile شماست که توی سورسی که همون اول بهتون دادم وجود داره و آموزش ها رو بر اساس همون فایل بردیم جلو. حالا اگه مسیرتون جای دیگه بود میتونید به جای نقطه یک مسیر به داکر بدید تا فایل ساخت Image رو پیدا کنه.
فایل image شما به نام mytesttag که توی دستور زدید ساخته میشه و با دستور زیر میتونید لیست Image هاتونو ببینید:
خب بعد از این فقط کافیه که image خودتون رو توی یک container اجرا کنید:
خوب بریم دستور بالا رو بررسی کنیم ببینیم چیکار میکنه.
فلگ -d مشخص میکنه که کانتینر در پس زمینه اجرا بشه و روی کنسول فعلی که دارید دستورات رو میزنید اجرا نشه و اگر میخواهید همه چیز رو توی همین کنسولی که دستور رو میزنید ببینید میتونید فلگ رو بردارید.
فلگ -p هم باعث میشه که کانتینر روی یک پورت خاص گوش بزنگ باشه. الان کانتینر روی پورت 8080 روی localhost سیستم شما گوش بزنگ میمونه و توی مرورگر بزنید پورت 8080 رو به کانتینر میزنه حالا کانتینر میاد این پورت رو به پورت 1041 که جلوش زدم فروارد میکنه و پاسخ رو به شما بر میگردونه.
اینطوری شما میتونید چندتا کانتینتر بیارید بالا که همشون روی پورت 1041 گوش بزنگ هستند ولی پورت های کانتینر باید متفاوت باشه. مثلا 8080 و 8081 و 8082 و الی آخر.
برای همین میتونیم روی ایزوله بودن و مستقل بودن محیط ها روش حساب کنیم.
در ادامه یک فاصله و اسم image تون رو میدید و با یک فایل اسم کانتینر که اینجا mycontainer هست رو مشخص میکنیم.
همین. شما الان یاد گرفتید که توی داکر ایمیج بسازید و کانتینر بسازید و اپتون رو توی کانتینر های مختلف اجرا کنید.
آسون بود؟
@csharptips
@easymicroservice
@easymicroservices
#داکر
#docker
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
Docker
Docker Desktop: The #1 Containerization Tool for Developers | Docker
Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.
👍4
چرا باید از پترن MVVM توی میکروکامپوننتها استفاده کنیم؟ مزیت این پترن روی معماری میکروکامپوننت چیه؟
همانطور که در تصویر میبینید ما به ازای رابط کاربری برای هر کامپوننت بهتره که فقط یک View Model داشته باشیم. View Model شامل بیزینس لاجیک یا به عبارتی Code Behind شما میشن.
فرض کنید من یک میکرو کامپوننت میزنم که قراره فقط صفحهی لاگین رو پوشش بده.
طراحی، پیاده سازی UI ممکنه توی سه تا بیزنس زیر متفاوت باشه:
1.دسکتاپ
2.وب
3.موبایل
4.پنل
آیا به ازای هر کدوم از این رابط کاربری ها باید یکبار بیزینس لاجیک ها و Api call ها رو پیاده سازی کنم؟ خیر.
برای همین ما یک لایه به نام View Model میسازیم تا تمامی UI ها از اون رابط کاربری استفاده کنند. اینطوری رابط کاربری از لاجیک کاملا جداسازی شده و وابستگی بینشون از بین میره و توسعه سریعتر و خطایابی آسونتر از همه مهمتر تست نویسی رو آسونتر میکنیم.
@easymicroservice
@easymicroservices
@csharptips
#microcomponent
#میکروکامپوننت
#میکروفرانت
#microfrontend
همانطور که در تصویر میبینید ما به ازای رابط کاربری برای هر کامپوننت بهتره که فقط یک View Model داشته باشیم. View Model شامل بیزینس لاجیک یا به عبارتی Code Behind شما میشن.
فرض کنید من یک میکرو کامپوننت میزنم که قراره فقط صفحهی لاگین رو پوشش بده.
طراحی، پیاده سازی UI ممکنه توی سه تا بیزنس زیر متفاوت باشه:
1.دسکتاپ
2.وب
3.موبایل
4.پنل
آیا به ازای هر کدوم از این رابط کاربری ها باید یکبار بیزینس لاجیک ها و Api call ها رو پیاده سازی کنم؟ خیر.
برای همین ما یک لایه به نام View Model میسازیم تا تمامی UI ها از اون رابط کاربری استفاده کنند. اینطوری رابط کاربری از لاجیک کاملا جداسازی شده و وابستگی بینشون از بین میره و توسعه سریعتر و خطایابی آسونتر از همه مهمتر تست نویسی رو آسونتر میکنیم.
@easymicroservice
@easymicroservices
@csharptips
#microcomponent
#میکروکامپوننت
#میکروفرانت
#microfrontend
به نظر شما یادگیری MessageBroker ها سخت هست؟
Final Results
12%
آره سخته ولی سراغش نرفتم
13%
آره سخته و مفاهیمش خیلی پیچیدست
40%
نه خیلی هم آسونه دارم باهاش کار میکنم
35%
نظری ندارم (دیدن نظرات)
پکیج 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
این اینترفیس میتونه سطوح زیر رو لاگ کنه:
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
GitHub
GitHub - EasyMicroservices/Logger: Wrapper for logging
Wrapper for logging. Contribute to EasyMicroservices/Logger development by creating an account on GitHub.
👍3
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
ارثبری در رابط کاربری مانند برنامهنویسی نیست و پیادهسازی آن بهمراتب دشوارتر است، چرا که ابزارهای رابط کاربری هنوز در حال توسعهاند و به آن بلوغ نرسیدهاند که بتوان روی آنها معماری دقیق و کاملی را پیاده کرد.
امروز ما میخواهیم یک نمونه از ارثبری در رابط کاربری را به شما نشان دهیم تا ببینید که ما در 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
GitHub
GitHub - EasyMicroservices/UI-Kits
Contribute to EasyMicroservices/UI-Kits development by creating an account on GitHub.
👍3🔥3
چرا خیلیها فکر میکنن میکروسرویسها کند هستند؟ من از یکی از بچه ها پرسیدم گفتم که پروژهی ERP خودتون رو به سمت مایکروسرویس هم میبرین؟ گفت بیزنس ما این رو نمیخواد، ما نمیخوایم مشتریهامون صبر کنن تا یک عملیات پست صحنه انجام بشه و بعد ایونت بده به کاربر که بوم کارت انجام شد بفرما، ما میخوایم کاربر در لحظه کاری که درخواست میکنه رو دریافت کنه.
کی گفته مایکروسرویسها فقط اینطوری کار میکنن؟ استفاده از بروکرها یک پترن هست که خود استفاده از اونها هم استراتژی های مختلفی داره که یکی از اونها باعث میشه که شما یک درخواست کاربر رو بفرستی و پردازش انجام بشه و بعدا پاسخ رو دریافت کنی. اما شما به همون روش که توی اپلیکیشنهای مونولیت میتونی درخواست مستقیم بزنی و پاسخ رو به مشتری برگردونی توی مایکروسرویسها هم به همین ترتیب پترنهایی در بروکرها هست مثلا پترن Request/Replay که همین کار رو انجام میده.
از طرفی شما میتونید به روشهای مختلف دیگه مثل Direct Message و ... توسط اگریگیتورها این قابلیت رو در میکروسرویسها داشته باشید.
اما اگر سوال اینجاست که در هر صورت اینکار کندتر از مونولیت هست پاسخ اینه در میکروسرویس روشهای دیگه ای وجود داره که شما پرفورمنس بسیار بالاتری نسبت به مونولیت داشته باشی برای مثال شما میتونی در مایکروسرویس ها از ماژولها استفاده کنی که مستقیم به دیتابیس دسترسی دارن و خود مایکروسرویس مخصوص اون ماژول هم داره از اون ماژول استفاده میکنه. منظور اینه روش ها برای رفع نیازهای شما زیاد هست و محدودیتی از این بابت وجود نداره این بستگی داره که خواستهی شما چی باشه.
تنها ترس بیزنسها باید این باشه که به سمت مایکروسرویس رفتن کار آسونی نیست و برای بیزنسهای بزرگه که هدف ما توی Easy Microservices رفع این مشکل هست که شما در نهایت بتونی برای پروژه های بزرگ و پروژه های کوچیک به سمتش بری، شاید در اوایل اسمش رو نذاری که ما مایکروسرویس هستیم ولی برای تبدیلش به مایکروسرویس کافیه یه روز وقت بذاری و کدهاتو مایکروسرویسی کنی.
معماری ما اینطوریه که بسته به اسکیل پروژهی شما ساختارها شکسته میشن، ما قبلا ساختارها رو براتون شکستیم و فقط کافیه که استفادشون کنید. برای همین آسون میشه و دیگه مهم نیست شما مونولیت هستی یا مایکروسرویس، هر وقت بخوای میتونی کل مایکروسرویسهاتو مونولیت کنی، هر وقت خواستی میتونی مجدد همشو مایکروسرویس کنی یا هردوشو داشته باشی تا دیگه دعوایی بین اینکه کدوم بهتره نباشه.
@easymicroservice
@easymicroservices
@csharptips
کی گفته مایکروسرویسها فقط اینطوری کار میکنن؟ استفاده از بروکرها یک پترن هست که خود استفاده از اونها هم استراتژی های مختلفی داره که یکی از اونها باعث میشه که شما یک درخواست کاربر رو بفرستی و پردازش انجام بشه و بعدا پاسخ رو دریافت کنی. اما شما به همون روش که توی اپلیکیشنهای مونولیت میتونی درخواست مستقیم بزنی و پاسخ رو به مشتری برگردونی توی مایکروسرویسها هم به همین ترتیب پترنهایی در بروکرها هست مثلا پترن Request/Replay که همین کار رو انجام میده.
از طرفی شما میتونید به روشهای مختلف دیگه مثل Direct Message و ... توسط اگریگیتورها این قابلیت رو در میکروسرویسها داشته باشید.
اما اگر سوال اینجاست که در هر صورت اینکار کندتر از مونولیت هست پاسخ اینه در میکروسرویس روشهای دیگه ای وجود داره که شما پرفورمنس بسیار بالاتری نسبت به مونولیت داشته باشی برای مثال شما میتونی در مایکروسرویس ها از ماژولها استفاده کنی که مستقیم به دیتابیس دسترسی دارن و خود مایکروسرویس مخصوص اون ماژول هم داره از اون ماژول استفاده میکنه. منظور اینه روش ها برای رفع نیازهای شما زیاد هست و محدودیتی از این بابت وجود نداره این بستگی داره که خواستهی شما چی باشه.
تنها ترس بیزنسها باید این باشه که به سمت مایکروسرویس رفتن کار آسونی نیست و برای بیزنسهای بزرگه که هدف ما توی Easy Microservices رفع این مشکل هست که شما در نهایت بتونی برای پروژه های بزرگ و پروژه های کوچیک به سمتش بری، شاید در اوایل اسمش رو نذاری که ما مایکروسرویس هستیم ولی برای تبدیلش به مایکروسرویس کافیه یه روز وقت بذاری و کدهاتو مایکروسرویسی کنی.
معماری ما اینطوریه که بسته به اسکیل پروژهی شما ساختارها شکسته میشن، ما قبلا ساختارها رو براتون شکستیم و فقط کافیه که استفادشون کنید. برای همین آسون میشه و دیگه مهم نیست شما مونولیت هستی یا مایکروسرویس، هر وقت بخوای میتونی کل مایکروسرویسهاتو مونولیت کنی، هر وقت خواستی میتونی مجدد همشو مایکروسرویس کنی یا هردوشو داشته باشی تا دیگه دعوایی بین اینکه کدوم بهتره نباشه.
@easymicroservice
@easymicroservices
@csharptips