مفاهیم Clean Code در .NET/.NET Core (قسمت 1)

مقدمهاصول مهندسی نرم افزار ، از کتاب Clean Code ، رابرت مارتین/Robert C. Martin ، اقتباسی برای .NET / .NET Core.این یک راهنمای سبک/style نیست.این راهنمایی برای تولید نرم افزار قابل خواندن ، قابل استفاده مجدد و قابل refactor در .NET / .NET Core است.نیازی به رعایت سفت و سخت از هر اصل در اینجا نیست ، و حتی بر سر تعداد کمی از آنها به طور جهانی توافق شده است.اینها فقط دستورالعمل ها هستند و نه چیز دیگری ، اما آنها در طی سالها تجربه جمعی توسط نویسندگان کد تمیز/Clean Code کدگذاری شده اند.این سری آموزشی شامل موارد زیر است:نامگذاری-Namingخودداری از نام گذاری بد-Avoid using bad namesخودداری از نام گذاری گمراه کننده-Avoid Misleading Namesخودداری از نشانه گزاری مجاری-Avoid Hungarian notationاستفاده از نوع نوشتاری ثابت-Use consistent capitalizationاستفاده از اسامی قابل تلفظ-Use pronounceable namesاستفاده از نشانه گذاری کملکیس-Use Camelcase notationاستفاده از نام دامنه-Use domain nameمتغیرها-Variablesاز تودرتو کردن عمیق خودداری کنید و زود برگردانید-Avoid nesting too deeply and return earlyاز تصورات ذهنی خودداری کنید-Avoid mental mappingخودداری از رشته های جادویی-Avoid magic stringعدم اضافه کردن کانتکس بی مورد-Don't add unneeded contextاستفاده از اسمی متغیر معنادار و قابل تلفظ-Use meaningful and pronounceable variable namesاستفاده از همان واژگان برای همان متغیر-Use the same vocabulary for the same type of variableاستفاده از اسامی قابل جستجو -Use searchable names (two part)استفاده از متغیر های توصیفی-Use explanatory variablesاستفاده از آرگومان های پیش فرض به جای مدار کوتاه یا شرط-Use default arguments instead of short circuiting or conditionalsتوابع-Functionsخودداری از اثرات جانبی-Avoid side effectsخودداری از شرط های منفی-Avoid negative conditionalsخودداری از شرطی کردن-Avoid conditionalsخودداری از بررسی نوع-Avoid type-checking (two part)خودداری از استفاده پرچم در پارامتر متد-Avoid flags in method parametersعدم نوشتن توابع گلوبال-Don't write to global functionsعدم استفاده از الگوی سینگلتون-Don't use a Singleton patternآرگومان های تابع(دو یا کمتر ایده آل است)-Function arguments (2 or fewer ideally)توابع باید یک کار را انجام دهند-Functions should do one thingاسامی تابع باید آنچه را انجام می دهند بگویند-Function names should say what they doتوابع فقط باید یک سطح انتزاع داشته باشند-Functions should only be one level of abstractionتابع صدا زننده و توابع فراخوانی شده باید نزدیک هم باشند-Function callers and called should be closeکپسوله کردن شروط-Encapsulate conditionalsحذف کدهای مرده-Remove dead codeاشیاء و ساختار داده ها-Objects and Data Structuresاستفاده از گتر و ستر-Use getters and settersایجاد اشیایی که را دارای اعضای خصوصی / محافظت هستند-Make objects have private/protected membersکلاس ها-Classesاستفاده از زنجیره متدها-Use method chainingترجیح دادن ترکیب بجای وراثت-Prefer composition over inheritanceاصولSOLIDاصول SOLID چیست؟تنها یک مسئولیت-Single Responsibility Principle (SRP)باز برای توسعه بسته برای تغییر-Open/Closed Principle (OCP)جایگزینی لیسکوف-Liskov Substitution Principle (LSP)تفکیک واسط ها-Interface Segregation Principle (ISP)وارانه سازی وابستگی ها-Dependency Inversion Principle (DIP)خود را تکرار نکنید-Don’t repeat yourself (DRY)آزمایش کردن-Testingمفهوم پایه آزمایش کردن-Basic concept of testingمفهوم هر آزمون-Single concept per testهمزمانی-Concurrencyاستفاده از Async/Awaitمدیریت خطا-Error Handlingمفهوم پایه در مدیریت خطا-Basic concept of error handlingعدم استفاده از 'throw ex' در بلوک کچ-Don't use 'throw ex' in catch blockعدم نادیده گرفتن خطاهای گرفتار شده-Don't ignore caught errorsاستفاده از چند بلوک catch بجای استفاده از شرط ها-Use multiple catch block instead of if conditions.هنگام رخ دادن استثنا stack trace را حفظ کنید-Keep exception stack trace when rethrowing exceptionsقالب بندی-Formattingاستفاده از فایل.editorconfigکامنت گذاری-Commentsخودداری از نشانگرهای موقعیتی-Avoid positional markersکامنت ها را در خارج از کد اصلی قرار ندهید-Don't leave commented out code in your codebaseکامنت ژورنالی نداشته باشید-Don't have journal commentsفقط چیزهایی را کامنت کنید که پیچیدگی منطق تجاری دارند-Only comment things that have business logic complexityمنبع این بخش، برای مشاهده کد تمیز در زبان های دیگر به منبع مراجعه کنید.