ReSharper 2024.2 منتشر شد
NET 8.0.401 SDK. منتشر شد
Today, we are releasing an update to .NET 8.0.400 SDK due to an issue with (MSBuild Crash when publishing containers)[dotnet/sdk#42731].
The .NET 8.0.401 release is available for download. This SDK includes the previously released .NET 8.0.8 Runtime and is in support of Visual Studio 17.11 release. The latest 8.0 release is always listed at .NET 8.0 Releases.
آیا استفاده از FullName یک کلاس تضادی با Clean Code دارد؟
آنچه که در خصوص global using فرمودید و با توجه به تشابه اسامی کلاسها، باید از Alias استفاده کنم و در زمان استفاده لزوما بجای استفاده از آدرس کامل و طولانی فضای نام، از نام Alias استفاده کنم.
آیا استفاده از FullName یک کلاس تضادی با Clean Code دارد؟
تمام Entityهایی که ساختم دارای Schema هستند و تمامی Modelها نیز در پوشه هایی هم نام با Schema قرار داده شده اند. برای مثال من دو کلاس در مسیرهای زیر دارم (Application = schema):
Models.Output.Application.ActionMethods.ActionMethod(); Domain.Entities.Application.ActionMethods.ActionMethod();
اگر فضای نام را using کنم و بخوام در یک متد از هر دو کلاس نمونه سازی کنم خطای زیر صادر میشه (Ambiguous reference):
using Ces.Caspian.Models.Output.Application.ActionMethods; using Ces.Caspian.Domain.Entities.Application.ActionMethods; { var a = new ActionMethod(); var b = new ActionMethod(); } //'ActionMethod' is an ambiguous reference between 'Ces.Caspian.Domain.Entities.Application.ActionMethods.ActionMethod' and 'Ces.Caspian.Models.Output.Application.ActionMethods.ActionMethod'
مگر آنکه در زمان نمونه سازی از نام کامل استفاده کنم:
var a = new Models.Output.Application.ActionMethods.ActionMethod(); var b = new Domain.Entities.Application.ActionMethods.ActionMethod();
تمامی کلاس هایی که در پروژه Model قرار دارند همان نقش DTO را دارند. چه به عنوان ورود اطلاعات و چه به عنوان خروجی. آیا نامگذاری Modelها اشکال دارند؟ در واقع سعی کردم از افزودن پیشوند و پسوند اضافه به نام Modelها پرهیز کنم.
آیا استفاده از FullName یک کلاس تضادی با Clean Code دارد؟
اینکه شما علاقه دارید برای یک کار شخصی شاید نکته نداشته باشد؛ ولی توجه داشته باشید که رعایت کردن یکسری قراردادها در کدنویسی که از سمت جامعه فعال در آن پلتفرم، دات نت در اینجا، پذیرفته شده است، پراهمیت است. از قابلیت های جدید مانند global usings برای کاهش این موارد هم می توانید استفاده کنید. همچنین پیشنهاد می کنم از یک فایل editorconfig با تنظیمات پیشنهادی جامعه دات نت به همراه Code analyzers استفاده کنید تا این موارد را زودتر گوش زد کنند.
Composition در واقع اشاره می کند به روابط بین Object ها در فضای Object-Oriented. همچنین یکی از اصول طراحی با عنوان Favor composition over inheritance در همین زمینه برای رسیدن به Polymorphic behavior و Code reuse مطرح است. مثال های لینک زیر را بررسی کنید:
سلام
در بکارگیری کلاس ها، ثابت ها و... علاقه زیادی دارم تا از نام کامل استفاده کنم و در بیشتر کلاس ها اصلا using ندارم. اگرچه که خطوط کمی طولانی میشن و اجبارا برای خوانایی بهتر خطوط را میشکنم ولی در زمان مرور کدها کمی راحت تر هستم. سوالم اینه که آیا این کار تضادی با کد نویسی تمیز داره یا پیشنهاد میکنید برای خلوت کردن کدها حتما فضای نام را using کنم.
تشکر
منظور از Composition الگوی طراحیه؟
پاسخ Jimmy Bogard را در رابطه با این موضوع مطالعه کنید:
https://github.com/jbogard/MediatR/issues/434#issuecomment-527446360
The indirection of a handler is good at the application level, but just got confusing once we got inside a handler (and it introduced coupling)
پیشنهاد می کنم برای Reusability از Composition بهره بگیرید و قسمتی که لازم است به صورت مشترک استفاده شود را در قالب یکسری کلاس Refactor کرده و استفاده کنید.
در نگارشهای اخیر داتنت، NET CLI. به همراه تغییرات قابل توجهی بودهاست که در این مطلب و نظرات آن، موارد مهم این تغییرات را بررسی خواهیم کرد.
console logger بهبود یافتهی داتنت 8
یکی از تغییرات بسیار جالب توجه و مفید NET CLI. در داتنت 8، امکان دسترسی به خروجی لاگهای ساختار یافتهی اعمال خط فرمان آن است:
اگر پروژهی خود را با استفاده از دستور dotnet build، کامپایل میکنید، خروجی پیشفرض این دستور خط فرمان، کلی و بدون ارائهی جزئیات است؛ اما میتوان آنرا در داتنت 8، به شکل تصویر فوق، تغییر داد و به این مزایا رسید:
- امکان مشاهدهی زمان کامپایل هر قسمت به صورت جداگانه
- امکان مشاهدهی پویای درصد انجام عملیات
- امکان مشاهدهی جزئیات کامپایل هر target framework به صورت مجزا
- دسترسی به یک خروجی رنگی و زیباتر
این خروجی را که به صورت پیشفرض فعال نیست، میتوان به دو صورت:
الف) سراسری و با اجرای دستور PowerShell زیر:
[Environment]::SetEnvironmentVariable("MSBUILDTERMINALLOGGER", "auto", "User")
که متغیر محیطی MSBUILDTERMINALLOGGER را به auto تنظیم میکند،
ب) و یا با استفاده از سوئیچ tl-- به ازای هر دستور dotnet build، به صورت جداگانهای فعال کرد:
dotnet build --tl
یک نکته: این قابلیت جالب و مهم، در دات نت 9، به صورت پیشفرض فعال است و نیازی به تنظیم خاصی ندارد.
سلام
یک پروژه با کتابخانه MediatR ایجاد کردم و برای عملیات CRUD به ازای تمام Entityها Handlerهای مورد نیاز را پیاده سازی کردم. برخی از این Handlerها در زمان اجرای Bussiness مربوط به خودش، نیاز داره تا اطلاعاتی را در یک جدول دیگر در بانک اطلاعاتی ذخیره کنه ولی افزودن اطلاعات جدید در جدول دوم، مستلزم لحاظ نمودن Business مربوط به Handler دوم است. به تمامی Handlerها IEntityRepository مربوط به Entity که در Domain تعریف شده است تزریق می شود. در لایه Infrastructure نیز تمام متدهای موجود در IEntityRepository تحت نام EntityRepository پیاده سازی شده اند.
سوال:
- آیا با توجه به سناریوی بالا، امکان تزریق MediatR.IMediator در Handler اول وجود دارد (از حیث Best Practice بودن)؟
- اگر آیتم یک مناسب نباشد آیا باید یک لایه دیگری به پروژه افزوده شود تا امکان استفاده از Handlerهای مشترک وجود داشته باشد؟
- در یکی از منابع اینترنتی به آیتم شماره یک عنوان Anti Pattern داده بودند. آیا درست است؟
تشکر
We are thrilled to announce the highly anticipated .NET Conf 2024, a free, three-day virtual developer event celebrating the release of .NET 9. Co-organized by the .NET community and Microsoft, this annual tradition continues to grow, and we’re more excited than ever to bring you the latest innovations in .NET. Mark your calendars for November 12th to 14th, 2024, and prepare to be inspired by a wealth of knowledge, creativity, and community engagement.
NET 9 Preview 7. منتشر شد
CVE-2024-38168 | .NET Denial of Service Vulnerability | .NET 8.0 |
CVE-2024-38167 | .NET Information Disclosure Vulnerability | .NET 8.0 |
.NET August updates
The following table includes release notes and binaries for the updates.
.NET 6.0.NET 8.0 | ||
Release Notes | 6.0.33 | 8.0.8 |
Installers and binaries | 6.0.33 | 8.0.8 |
Container Images | images | images |
Linux packages | 6.0.33 | 8.0.8 |
Known Issues | 6.0 | 8.0 |