کدنویسی بهتر

  1. موارد نام‌گذاری‌
    • نام متد به صورت PascalCase باشد. مثال: GetEmployees
    • نام پارامترها به صورت CamelCase باشد. مثال: employee
    • از نام‌های اختصاری پرهیز شود.
    • از نام‌هایی استفاده شود که خود گویای عملکرد آن متغیر یا متد باشد.
      جدول زیر می‌تواند راهنمای خوبی در این مورد باشد:


  2. تمام Interfaceها با حرف I شروع شوند.
  3. از String Interpolation برای ترکیب stringها استفاده شود.
    • در مواقعی که میزان تولید string زیاد است (مانند Loopها)، از StringBuilder به جای String استفاده شود.
  4. در C# 8.0 به بعد قابلیتی اضافه شده که فرمت switchها تغییر کرده و دارای فرمت خواناتری هستند.
  5. کامنت‌گذاری متدها با توجه به نبود وقت برای آماده‌سازی داکیومنت‌ می‌تواند فهم کد را بهبود دهد.
    • کامنت‌ها در بالای متد یا پارامتر باشد نه انتهای آن.
    • در صورتی که برای متدها کامنت در نظر گرفته می‌شود، موارد XML در کامنت تکمیل شود (مثل پارامترهای ورودی متد).
    • کامنت‌ها فقط با // یا /// باشد و از /*…*/ استفاده نشود.
  6. در مواقعی که نیاز به مدیریت منابع است از Using یا IDisposable استفاده شود.
  7. هنگامی که آبجکتی را Instantiate می‌کنیم می‌توان از Implicit Naming استفاده کرد و سمت راست تساوی نام کامل شیء مورد نظر را آورد و یا تنها سمت راست تساوی را با یک New() مزین کنید!
    var result = new Employee();
    Employee result = new();

    در LINQ، تمامی متن‌ها در زیر بخش from مرتب شوند و به نحوی نوشته شود که بتوان کوئری نوشته شده را به راحتی خواند(گرچه موارد بیشتری در این مورد وجود دارد اما رعایت همین مورد نیز کافی است).
  8. از نوشتن‌ متدهای بسیار بزرگ و پیچیده اجتناب شود ( در صورتی که میزان کدهای یک متد زیاد شد، نیاز است بخشی از عملکرد متد در Private Method دیگری قرار گیرد).
  9. در هر فایلی تنها یک کلاس موجود باشد، و از نوشتن چند کلاس در یک فایل اجتناب شود.
  10. همانند قانون اول SOLID هر متد یا کلاسی تنها و تنها یک کار را انجام دهد و سایر وظایف به متد یا کلاسهای دیگر داده شود. قوانین SOLID بهترین راهنما در داشتن کدهای تمییز است.
  11. زمانی که نیاز است بخشی از کد اصطلاحاً HardCode شود، این موارد به صورت یک فیلد Constant جدا در همان کلاس و در ابتدای آن قرار داده شود.
  12. برای بررسی خالی بودن String از IsNullOrEmpty() استفاده شود.
  13. 14.   هر جایی که نیاز شد از Enum برای بررسی موارد استفاده شود. به هیچ وجه از int یا string برای بررسی مقادیر استفاده نشود.
    مثال (غلط):
    switch(value){
                 case 1:
                 case 2:
                 }

  14. در مواردی که از اشیاء پیچیده استفاده می‌شود (مثال کلاس‌ها) حتماً null بودن آن بررسی شود.
  15. 16.   از ایجاد پارمترهای فراوان برای متدها پرهیز شود، اگر تعداد آن بیش از 4-5 کاراکتر است از کلاس یا struct استفاده کنید.
  16. در استفاده از کالکشن‌ها بهتر است به جای ایجاد List<> از IList<>، ICollection<> یا IEnumerble<> استفاده شود.
  17. در جایی که ارتباطی با دیتابیس ایجاد شده، سوکتی باز می‌شود یا فایلی فراخوانی می‌شود، حتماً از بسته شدن آن اطمینان حاصل کنید.
  18. سعی شود با استفاده از Interfaceها و Abstract کلاس‌ها وابستگی بین کلاس‌ها را از بین برد (Loosely Coupled).
  19. سطوح دسترسی در برنامه‌ها را با استفاده از لایه‌ها موجود تعیین کنید تا هر لایه وظیفه خود را انجام دهد (مثال: در لایه UI نباید دسترسی به دیتابیس وجود داشته باشد).
  20. قوانین کسب‌وکاری را به سطح دیتابیس منتقل نکنید، این موارد باید در لایه بیزینس برنامه وجود داشته باشد.
  21. در صورت امکان، فرآیند کاری که در حال انجام آن هستید را با استفاده از BPMN مصور نمایید، این عمل برای خود شما و سایرین راهنمایی فوق‌العاده است.
  22. پیشنهاد می‌شود Code Review صورت پذیرد و در صورتی که این امکان وجود نداشت حداقل Peer Review برای تبادل دانش بین افراد تیم انجام شود.
  23. بیش از حد از Virtual متدها استفاده نکنید چون باعث ناخوانایی کدها می‌شود.
  24. به جای Throw ex از Throw استفاده کنید تا Stack Trace را از دست ندهید.
  25. استفاده از {} برای بلوک‌بندی کدها (مثل If) باعث خوانایی بیشتر می‌شود.
  26. استفاده از #region قابلیت افزوده‌ای به کدها نمی‌دهد.