@one_programmer
پیاده سازی یک راه حل لاگ حرفه ایی. Sentry
ذخیره سازی و Visualization لاگ ها همیشه جزو اولویت های همه پروژه های بزرگ بوده، مخصوصا وقتی بحث میکروسرویس وسط باشه و نیاز باشه لاگ ها رو به هم وصل کنید بین میکروسرویس های مختلف.
حتما راه حل ELK رو شنیدید، این راه حل خیلی خوب هست اما تنها انتخاب شما نیست، انتخاب دیگه sentry هست. خیلی از شرکت های بزرگ از sentry استفاده میکنن، این شرکت ها مثل CloudFlare, Disney , atlassian , bitnami, reddit , datadog هستن که شرکت های بزرگی هستن.
این Sentry میاد لاگ ها جمع آوری، دست بندی و... میکنه و داخل پنل خودش بهتون نشون میده. این پنل قابلیت های فوق العاده ایی داره، خیلی راحت بین میلیون ها لاگ میتونید کوئری بزنید و انواع فیلتر ها رو اعمال کنید، به سرویس هایی مثل gitlab و jira وصل بشید و لاگ رو فیکس کنید. برای لاگی alert ست کنید و... . یه قابلیت خیلی خوبش دسته بندی لاگ ها هست. حتما براتون پیش اومده که لاگ هایی که کم هست بین لاگ های زیاد گم میشن،اما در sentry لاگ ها دسته بندی میشن و مثل group by کردن تعداد لاگ رو نشون میده. براتون فیلتر میذاره که مثلا لاگ ها هر چند روز رخ میده یه لاگ خاص.
برای استفاده از sentry چند راه حل دارید، sdk زبان خودتون رو نصب کنید و به سایت sentry برید و از اکانت free اون که محدودیت داره استفاده کنید. راه حل دیگه اینه که سرور sentry رو به صورت docker داخل سیستم خودتون بیارید بالا.
برای تمام زبان های برنامه نویسی sdk داره میتونید اضافه کنید.
برای نصب سرور sentry میتونید داخل لینک زیر برید و نصب کنید. اگه لینوکس هستید که راحت هست اما اگر ویندوز هستید با wsl2 راحت میتونید نصب کنید.
https://github.com/getsentry/onpremise
سایت خود sentry
https://sentry.io/welcome/
@one_programmer
پیاده سازی یک راه حل لاگ حرفه ایی. Sentry
ذخیره سازی و Visualization لاگ ها همیشه جزو اولویت های همه پروژه های بزرگ بوده، مخصوصا وقتی بحث میکروسرویس وسط باشه و نیاز باشه لاگ ها رو به هم وصل کنید بین میکروسرویس های مختلف.
حتما راه حل ELK رو شنیدید، این راه حل خیلی خوب هست اما تنها انتخاب شما نیست، انتخاب دیگه sentry هست. خیلی از شرکت های بزرگ از sentry استفاده میکنن، این شرکت ها مثل CloudFlare, Disney , atlassian , bitnami, reddit , datadog هستن که شرکت های بزرگی هستن.
این Sentry میاد لاگ ها جمع آوری، دست بندی و... میکنه و داخل پنل خودش بهتون نشون میده. این پنل قابلیت های فوق العاده ایی داره، خیلی راحت بین میلیون ها لاگ میتونید کوئری بزنید و انواع فیلتر ها رو اعمال کنید، به سرویس هایی مثل gitlab و jira وصل بشید و لاگ رو فیکس کنید. برای لاگی alert ست کنید و... . یه قابلیت خیلی خوبش دسته بندی لاگ ها هست. حتما براتون پیش اومده که لاگ هایی که کم هست بین لاگ های زیاد گم میشن،اما در sentry لاگ ها دسته بندی میشن و مثل group by کردن تعداد لاگ رو نشون میده. براتون فیلتر میذاره که مثلا لاگ ها هر چند روز رخ میده یه لاگ خاص.
برای استفاده از sentry چند راه حل دارید، sdk زبان خودتون رو نصب کنید و به سایت sentry برید و از اکانت free اون که محدودیت داره استفاده کنید. راه حل دیگه اینه که سرور sentry رو به صورت docker داخل سیستم خودتون بیارید بالا.
برای تمام زبان های برنامه نویسی sdk داره میتونید اضافه کنید.
برای نصب سرور sentry میتونید داخل لینک زیر برید و نصب کنید. اگه لینوکس هستید که راحت هست اما اگر ویندوز هستید با wsl2 راحت میتونید نصب کنید.
https://github.com/getsentry/onpremise
سایت خود sentry
https://sentry.io/welcome/
@one_programmer
GitHub
GitHub - getsentry/self-hosted: Sentry, feature-complete and packaged up for low-volume deployments and proofs-of-concept
Sentry, feature-complete and packaged up for low-volume deployments and proofs-of-concept - getsentry/self-hosted
@one_programmer
چطور کار هامون رو به صورت Async و concurrent انجام بدیم ؟؟ قسمت دوم
Do async and concurrent work with Channel in c# Part II
این عنوان دومین مقاله بنده در مورد این هست که چطور کارهامون رو به صورت بازدهی بالا به صورت Async و concurrent انجام بدیم . در اینجا منظور از کارهای هست که همیشه دغدغه خیلی از برنامه نویس ها هست.
مثل مواردی:
1- برای ورود کاربر otp کد ارسال میکنیم و میخواهیم درگیر کندی پروایدر sms نشویم.
2- میخواهیم به ازای درخواست های کاربر اطلاعات اون رو به صورت async جایی ذخیره کنیم.
3-میخواهیم با پروایدر کار کنیم که کند هست
همه این موارد ما میخواهیم اون کار ها رو به شکلی انجام دهیم که باعث کندی برنامه نشیم و Request ارسالی کاربر رو نگه نداریم و در اسرع وقت بتوانیم به درخواست ها پاسخ دهیم. اینکار باعث این میشود که Api ما بتواند سریع به درخواست ها پاسخ دهد و بازدهی بالا برود
در این مقاله قسمت دوم ما با استفاده از Channel میاییم اینکار رو انجام می دهیم.
در قسمت یک ما با استفاده از Tpl DataFlow اینکار رو انجام می دهیم.
قسمت دوم
https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-channel-in-c-part-ii-2373d9d94390
قسمت اول
https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-actionblock-dataflow-in-c-f5da63ff3692
@one_programmer
چطور کار هامون رو به صورت Async و concurrent انجام بدیم ؟؟ قسمت دوم
Do async and concurrent work with Channel in c# Part II
این عنوان دومین مقاله بنده در مورد این هست که چطور کارهامون رو به صورت بازدهی بالا به صورت Async و concurrent انجام بدیم . در اینجا منظور از کارهای هست که همیشه دغدغه خیلی از برنامه نویس ها هست.
مثل مواردی:
1- برای ورود کاربر otp کد ارسال میکنیم و میخواهیم درگیر کندی پروایدر sms نشویم.
2- میخواهیم به ازای درخواست های کاربر اطلاعات اون رو به صورت async جایی ذخیره کنیم.
3-میخواهیم با پروایدر کار کنیم که کند هست
همه این موارد ما میخواهیم اون کار ها رو به شکلی انجام دهیم که باعث کندی برنامه نشیم و Request ارسالی کاربر رو نگه نداریم و در اسرع وقت بتوانیم به درخواست ها پاسخ دهیم. اینکار باعث این میشود که Api ما بتواند سریع به درخواست ها پاسخ دهد و بازدهی بالا برود
در این مقاله قسمت دوم ما با استفاده از Channel میاییم اینکار رو انجام می دهیم.
در قسمت یک ما با استفاده از Tpl DataFlow اینکار رو انجام می دهیم.
قسمت دوم
https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-channel-in-c-part-ii-2373d9d94390
قسمت اول
https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-actionblock-dataflow-in-c-f5da63ff3692
@one_programmer
Medium
Do async and concurrent work with Channel in c# Part II
In the previous section, using DataFlow and ActionBlock, we learned how to do some work in Async and not wait for the request. In this…
@one_programmer
یک سری از مفاهیم به ظاهر ساده هستند که هر روز با اونها سروکار داریم، اما بهتره که درک دقیق تری نسبت بهشون داشته باشیم و هر چند وقت مروری روی اونها داشته باشیم. یک از این مفاهیم انواع داده ای هستند. انواع داده ای با توجه به نحوه ذخیره سازی در حافظه، در #C به دو نوع ReferenceTypes و ValueTypes تقسیم میشن. انواع مقداری از Stack تخصیص داده میشن و مستقیما حاوی دیتا هستند، بعد از تمام شدن scope که توی اون قرار دارند، از stack حذف میشن.اما انواع ارجاعی از Heap تخصیص داده میشن و آدرس مربوط به دیتا رو نگه می دارن. بعد از اتمام scope ای که توی اون قرار دارند، همچنان در حافظه باقی میمونن تا اینکه garbage collecto حذفشون کنه. توی این مقاله مفاهیم، نحوه ذخیره سازی و ارسال اونها به عنوان پارامتر بررسی شده.
https://vrgl.ir/G1nFf
@one_programmer
#vahid_tajari
یک سری از مفاهیم به ظاهر ساده هستند که هر روز با اونها سروکار داریم، اما بهتره که درک دقیق تری نسبت بهشون داشته باشیم و هر چند وقت مروری روی اونها داشته باشیم. یک از این مفاهیم انواع داده ای هستند. انواع داده ای با توجه به نحوه ذخیره سازی در حافظه، در #C به دو نوع ReferenceTypes و ValueTypes تقسیم میشن. انواع مقداری از Stack تخصیص داده میشن و مستقیما حاوی دیتا هستند، بعد از تمام شدن scope که توی اون قرار دارند، از stack حذف میشن.اما انواع ارجاعی از Heap تخصیص داده میشن و آدرس مربوط به دیتا رو نگه می دارن. بعد از اتمام scope ای که توی اون قرار دارند، همچنان در حافظه باقی میمونن تا اینکه garbage collecto حذفشون کنه. توی این مقاله مفاهیم، نحوه ذخیره سازی و ارسال اونها به عنوان پارامتر بررسی شده.
https://vrgl.ir/G1nFf
@one_programmer
#vahid_tajari
ویرگول
بررسی انواع مقداری Value Types و انواع ارجاعی Reference Types در #C
در سی شارپ انواع دادهای با توجه به نحوه ذخیرهسازی در حافظه به دو دستهی انواع مقداری و انواع ارجاعی تقسیم میشوند در این پست مفاهیم و ا…
@one_programmer
کش کردن اتوماتیک خروجی متد ها
حتما براتون پیش اومده که نیاز بوده خروجی متدی رو کش بکنید، وقتی اینکار رو کردید. داخل بیزینس متد تون کد کش کردن رو نوشتید. اینکار خیلی شاید درست نباشه که کش کردن کنار بیزینس متد نوشته باشه. و اینکه برای برای بقیه متد ها هم باید این کد رو کپی کنید.
راه حل اینکار استفاده از attribute ها هست. شما میتونید به روش aop خروجی هر متدی که نیاز دارید رو کش کنید. لینک repository که برای اینکار توسعه دادم رو میزارم. در این repo یک interceport تعریف شده که قبل از اجرا متد اجرا می شود. فقط متد هایی که به CacheMethod مزین شده باشند. کلید کش را با استفاده از اسم متد و ورودی ها ساخته و اتوماتیک کش میکند. مقادیر کش شده با استفاده از MessagePack ساخته شده و با lz4 فشرده شده است که حجم کش را بسیار کم میکند و خیلی سریع عمل میکند.
کد:
https://github.com/EngRajabi/Cache.Aspect
مقاله:
https://medium.com/@mohsen_rajabi/asp-core-automating-cache-with-aspect-programing-autofac-dynamic-proxy-8e6b84df44e4
@one_programmer
کش کردن اتوماتیک خروجی متد ها
حتما براتون پیش اومده که نیاز بوده خروجی متدی رو کش بکنید، وقتی اینکار رو کردید. داخل بیزینس متد تون کد کش کردن رو نوشتید. اینکار خیلی شاید درست نباشه که کش کردن کنار بیزینس متد نوشته باشه. و اینکه برای برای بقیه متد ها هم باید این کد رو کپی کنید.
راه حل اینکار استفاده از attribute ها هست. شما میتونید به روش aop خروجی هر متدی که نیاز دارید رو کش کنید. لینک repository که برای اینکار توسعه دادم رو میزارم. در این repo یک interceport تعریف شده که قبل از اجرا متد اجرا می شود. فقط متد هایی که به CacheMethod مزین شده باشند. کلید کش را با استفاده از اسم متد و ورودی ها ساخته و اتوماتیک کش میکند. مقادیر کش شده با استفاده از MessagePack ساخته شده و با lz4 فشرده شده است که حجم کش را بسیار کم میکند و خیلی سریع عمل میکند.
کد:
https://github.com/EngRajabi/Cache.Aspect
مقاله:
https://medium.com/@mohsen_rajabi/asp-core-automating-cache-with-aspect-programing-autofac-dynamic-proxy-8e6b84df44e4
@one_programmer
GitHub
GitHub - EngRajabi/Cache.Aspect: Asp Core Cache Aspect Programing (Autofac + Dynamic Proxy)
Asp Core Cache Aspect Programing (Autofac + Dynamic Proxy) - GitHub - EngRajabi/Cache.Aspect: Asp Core Cache Aspect Programing (Autofac + Dynamic Proxy)
@one_programmer
How in MediatR we can have events (Notifications) Async and completely real Parallel
https://medium.com/@mohsen_rajabi/how-in-mediatr-we-can-have-events-notifications-async-and-completely-real-parallel-2068f24912e6
@one_programmer
How in MediatR we can have events (Notifications) Async and completely real Parallel
https://medium.com/@mohsen_rajabi/how-in-mediatr-we-can-have-events-notifications-async-and-completely-real-parallel-2068f24912e6
@one_programmer
Medium
How in MediatR we can have events (Notifications) async and completely real Parallel
Update: 2024/08/30
@one_programmer
چکونه در سی شارپ Regex خیلی سریع بنویسیم
How to write a very fast regex in C #. Best Practice
https://medium.com/@mohsen_rajabi/how-to-write-a-regex-very-fast-in-c-best-practice-875d386c0485
@one_programmer
چکونه در سی شارپ Regex خیلی سریع بنویسیم
How to write a very fast regex in C #. Best Practice
https://medium.com/@mohsen_rajabi/how-to-write-a-regex-very-fast-in-c-best-practice-875d386c0485
@one_programmer
Medium
How to write a very fast regex in C#. Best Practice
C# Regex Best Practice
@one_programmer
سلام به دنیا Source Generator ها در Net. !!! 😊😊
قابلیت Source Generation تازه به .net اضافه شده. این قابلیت کمک میکنه توسعه دهنده ها در زمان Compile یکسری کد تولید کنن و در dll پروژه قرار بدن.
این مزیت اینکار چی هست
- میشه یه سری کد که در زمان اجرا تولید میشن رو به این شکل به زمان Compile آورد و پرفورمنس وحشتناکی رو تجربه کرد
- حذف refelection ها. میشه یه سری کار reflection که در زمان اجرا انجام میشن و کند هم هستند رو به زمان Compile اورد
ماکروسافت یکسری از فیچر های جدیدش رو با Source Generator نوشته. مثل system.text.json (التبه باید سنتکس خاصی ازش استفاده کنید)
حالا من یه پکیچ نوشتم با Source Generator برای کار با enum ها. حتما براتون پیش اومده که attribute داشته باشید بالا enum یا بخواهید tostring انجام بدید. این پکیچ همه اینکار ها رو زمان Compile براتون انجام میده و بازدهی بالا 20 برابر داره. اگر بخواهید attribute بالا enum ها رو واکشی کنید، این بازدهی به 480/000 هزار برابر میرسه. باور نکنید !!!
لینک پروژه و بنچمارک:
https://github.com/EngRajabi/Enum.Source.Generator
@one_programmer
سلام به دنیا Source Generator ها در Net. !!! 😊😊
قابلیت Source Generation تازه به .net اضافه شده. این قابلیت کمک میکنه توسعه دهنده ها در زمان Compile یکسری کد تولید کنن و در dll پروژه قرار بدن.
این مزیت اینکار چی هست
- میشه یه سری کد که در زمان اجرا تولید میشن رو به این شکل به زمان Compile آورد و پرفورمنس وحشتناکی رو تجربه کرد
- حذف refelection ها. میشه یه سری کار reflection که در زمان اجرا انجام میشن و کند هم هستند رو به زمان Compile اورد
ماکروسافت یکسری از فیچر های جدیدش رو با Source Generator نوشته. مثل system.text.json (التبه باید سنتکس خاصی ازش استفاده کنید)
حالا من یه پکیچ نوشتم با Source Generator برای کار با enum ها. حتما براتون پیش اومده که attribute داشته باشید بالا enum یا بخواهید tostring انجام بدید. این پکیچ همه اینکار ها رو زمان Compile براتون انجام میده و بازدهی بالا 20 برابر داره. اگر بخواهید attribute بالا enum ها رو واکشی کنید، این بازدهی به 480/000 هزار برابر میرسه. باور نکنید !!!
لینک پروژه و بنچمارک:
https://github.com/EngRajabi/Enum.Source.Generator
@one_programmer
@one_programmer
چگونه یک پروژه Net. با ساختار حرفه ایی را در سال 2023 شروع کنیم
در این مقاله در مورد این صحبت میکنیم که چطوری در سال 2023 میتونیم یک پروژه ی حرفه ایی و ساختار یافته رو شروع کنیم.
چگونه میتونیم اصول Clean Code رو در پروژه مون Automate کنیم ؟
چگونه میتونیم با ابزار ها کد های پیچیده رو تشخیص بدیم ؟
چگونه میتونیم در پروژه های بزرگ دست خط یکسان داشته باشیم ؟
ساختار استاندارد چیست ؟
ماکروسافت توی این زمینه چی میگه ؟
توسعه دهندگان ماکروسافت چی پیشنهاد میدن ؟
چه ابزار هایی برای Automate کردن ریویو کد و کمتر کردن باگ وجود داره ؟ آیا متریکی برای کد پیچیده وجود داره ؟
جواب همه سوال ها رو در مقاله زیر خلاصه کردم. امیدوارم مفید باشه.
مقاله: https://medium.com/@mohsen_rajabi/how-to-start-a-net-project-in-2023-96bdb615a98d
@one_programmer
چگونه یک پروژه Net. با ساختار حرفه ایی را در سال 2023 شروع کنیم
در این مقاله در مورد این صحبت میکنیم که چطوری در سال 2023 میتونیم یک پروژه ی حرفه ایی و ساختار یافته رو شروع کنیم.
چگونه میتونیم اصول Clean Code رو در پروژه مون Automate کنیم ؟
چگونه میتونیم با ابزار ها کد های پیچیده رو تشخیص بدیم ؟
چگونه میتونیم در پروژه های بزرگ دست خط یکسان داشته باشیم ؟
ساختار استاندارد چیست ؟
ماکروسافت توی این زمینه چی میگه ؟
توسعه دهندگان ماکروسافت چی پیشنهاد میدن ؟
چه ابزار هایی برای Automate کردن ریویو کد و کمتر کردن باگ وجود داره ؟ آیا متریکی برای کد پیچیده وجود داره ؟
جواب همه سوال ها رو در مقاله زیر خلاصه کردم. امیدوارم مفید باشه.
مقاله: https://medium.com/@mohsen_rajabi/how-to-start-a-net-project-in-2023-96bdb615a98d
@one_programmer
Medium
How to Start an Advanced .NET Project in 2024 Part I
@one_programmer
کم کم داریم به لحظات ملکوتی هزار تست نزدیک میشیم.
خیلی حس خوبی هست وقتی تغییراتت رو میدی و با خیال راحت تست ها رو پاس میکنی و مطئمن میشی که همه چی درست هست.
پر قدرت ادامه میدیم 💪
#dotnet #mofid #mofidapp #unittest #unittesting #MofidSecurities
لینکدین: https://www.linkedin.com/posts/mohsen-rajabi72_dotnet-mofid-mofidapp-activity-7067012062366838784-fcM7?utm_source=share&utm_medium=member_desktop
@one_programmer
کم کم داریم به لحظات ملکوتی هزار تست نزدیک میشیم.
خیلی حس خوبی هست وقتی تغییراتت رو میدی و با خیال راحت تست ها رو پاس میکنی و مطئمن میشی که همه چی درست هست.
پر قدرت ادامه میدیم 💪
#dotnet #mofid #mofidapp #unittest #unittesting #MofidSecurities
لینکدین: https://www.linkedin.com/posts/mohsen-rajabi72_dotnet-mofid-mofidapp-activity-7067012062366838784-fcM7?utm_source=share&utm_medium=member_desktop
@one_programmer
Linkedin
Mohsen Rajabi on LinkedIn: #dotnet #mofid #mofidapp #unittest #unittesting #aspnetcore #aspnet… | 25 comments
کم کم داریم به لحظات ملکوتی هزار تست نزدیک میشیم.
خیلی حس خوبی هست وقتی تغییراتت رو میدی و با خیال راحت تست ها رو پاس میکنی و مطئمن میشی که همه چی درست هست.
پر… | 25 comments on LinkedIn
خیلی حس خوبی هست وقتی تغییراتت رو میدی و با خیال راحت تست ها رو پاس میکنی و مطئمن میشی که همه چی درست هست.
پر… | 25 comments on LinkedIn
@one_programmer
قسمت دوم مقاله "چگونه یک پروژه Net. با ساختار حرفه ایی را در سال 2024 شروع کنیم" منتشر شد.
How to Start an Advanced .NET Project in 2024 Part II
در ضمن قسمت قبل رو آپدیت کردم اگه جدیدا مطالعه نکردید نگاه بکنید
در قسمت قبل این موارد رو مطرح کردیم:
در این مقاله در مورد این صحبت میکنیم که چطوری در سال 2024 میتونیم یک پروژه ی حرفه ایی و ساختار یافته رو شروع کنیم.
چگونه میتونیم اصول Clean Code رو در پروژه مون Automate کنیم ؟
چگونه میتونیم با ابزار ها کد های پیچیده رو تشخیص بدیم ؟
چگونه میتونیم در پروژه های بزرگ دست خط یکسان داشته باشیم ؟
ساختار استاندارد چیست ؟
ماکروسافت توی این زمینه چی میگه ؟
توسعه دهندگان ماکروسافت چی پیشنهاد میدن ؟
چه ابزار هایی برای Automate کردن ریویو کد و کمتر کردن باگ وجود داره ؟ آیا متریکی برای کد پیچیده وجود داره ؟
-------------
در قسمت دوم اومدیم پا رو فراتر گذاشتیم و دیدیم که چطوری میتونیم کاری بکنیم
- کد ها قبل اینکه کامیت بشن تمیز و مرتب بشن و indent ها درست باشه حتی فاصله ها و namespace ها مرتب باشه
- چطوری متن کامیت مسیج رو چک کنیم که طبق استاندارد باشه و سعی بکنیم توسعه دهندگان رو مجبور بکنیم متن استاندارد و معنی دارن وارد کنند
جواب همه سوال ها رو در مقاله زیر خلاصه کردم. امیدوارم مفید باشه.
مقاله: https://medium.com/@mohsen_rajabi/how-to-start-an-advanced-net-project-in-2024-part-ii-2736da39b301
@one_programmer
قسمت دوم مقاله "چگونه یک پروژه Net. با ساختار حرفه ایی را در سال 2024 شروع کنیم" منتشر شد.
How to Start an Advanced .NET Project in 2024 Part II
در ضمن قسمت قبل رو آپدیت کردم اگه جدیدا مطالعه نکردید نگاه بکنید
در قسمت قبل این موارد رو مطرح کردیم:
در این مقاله در مورد این صحبت میکنیم که چطوری در سال 2024 میتونیم یک پروژه ی حرفه ایی و ساختار یافته رو شروع کنیم.
چگونه میتونیم اصول Clean Code رو در پروژه مون Automate کنیم ؟
چگونه میتونیم با ابزار ها کد های پیچیده رو تشخیص بدیم ؟
چگونه میتونیم در پروژه های بزرگ دست خط یکسان داشته باشیم ؟
ساختار استاندارد چیست ؟
ماکروسافت توی این زمینه چی میگه ؟
توسعه دهندگان ماکروسافت چی پیشنهاد میدن ؟
چه ابزار هایی برای Automate کردن ریویو کد و کمتر کردن باگ وجود داره ؟ آیا متریکی برای کد پیچیده وجود داره ؟
-------------
در قسمت دوم اومدیم پا رو فراتر گذاشتیم و دیدیم که چطوری میتونیم کاری بکنیم
- کد ها قبل اینکه کامیت بشن تمیز و مرتب بشن و indent ها درست باشه حتی فاصله ها و namespace ها مرتب باشه
- چطوری متن کامیت مسیج رو چک کنیم که طبق استاندارد باشه و سعی بکنیم توسعه دهندگان رو مجبور بکنیم متن استاندارد و معنی دارن وارد کنند
جواب همه سوال ها رو در مقاله زیر خلاصه کردم. امیدوارم مفید باشه.
مقاله: https://medium.com/@mohsen_rajabi/how-to-start-an-advanced-net-project-in-2024-part-ii-2736da39b301
@one_programmer
Medium
How to Start an Advanced .NET Project in 2024 Part II
How to Start an Advanced .NET Project in 2024 Part II