آیا استفاده از FullName یک کلاس تضادی با Clean Code دارد؟
وضعیت: پاسخ داده شده

سلام

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

تشکر

  • #
    ‫۱ ماه قبل، پنجشنبه ۲۵ مرداد ۱۴۰۳، ساعت ۱۷:۵۹

    اینکه شما علاقه دارید برای یک کار شخصی شاید نکته نداشته باشد؛ ولی توجه داشته باشید که رعایت کردن یکسری قراردادها در کدنویسی که از سمت جامعه فعال در آن پلتفرم، دات نت در اینجا، پذیرفته شده است، پراهمیت است. از قابلیت های جدید مانند global usings برای کاهش این موارد هم می توانید استفاده کنید. همچنین پیشنهاد می کنم از یک فایل editorconfig با تنظیمات پیشنهادی جامعه دات نت به همراه Code analyzers استفاده کنید تا این موارد را زودتر گوش زد کنند.

    • #
      ‫۱ ماه قبل، پنجشنبه ۲۵ مرداد ۱۴۰۳، ساعت ۲۰:۵۳

      تمام 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ها پرهیز کنم.

    • #
      ‫۱ ماه قبل، پنجشنبه ۲۵ مرداد ۱۴۰۳، ساعت ۲۱:۰۲

      آنچه که در خصوص global using فرمودید و با توجه به تشابه اسامی کلاسها، باید از Alias استفاده کنم و در زمان استفاده لزوما بجای استفاده از آدرس کامل و طولانی فضای نام، از نام Alias استفاده کنم.