پیشگفتار ✨

به کتاب Clean Code in C# خوش آمدید. در این کتاب یاد می‌گیرید چگونه کدهای مشکل‌دار را شناسایی کنید؛ کدهایی که با وجود اینکه کامپایل می‌شوند، اما از نظر خوانایی (Readability)، قابلیت نگهداری (Maintainability) و قابلیت توسعه (Extensibility) ضعیف هستند. همچنین با ابزارها و الگوهای طراحی (Patterns) مختلف آشنا می‌شوید و روش‌های بازآرایی کد (Refactoring) برای تمیز کردن آن را یاد می‌گیرید.

این کتاب برای چه کسانی است؟ 👨‍💻👩‍💻

این کتاب برای برنامه‌نویسانی نوشته شده است که درک خوبی از زبان برنامه‌نویسی C# دارند و می‌خواهند در شناسایی کدهای مشکل‌دار و نوشتن کد تمیز در C# راهنمایی بگیرند.
گروه اصلی خوانندگان این کتاب شامل برنامه‌نویسان تازه‌فارغ‌التحصیل تا میان‌رده است، اما حتی برنامه‌نویسان ارشد نیز ممکن است مطالب ارزشمندی در آن پیدا کنند.

این کتاب چه مباحثی را پوشش می‌دهد؟ 📚

فصل 1: استانداردها و اصول کدنویسی در C#

در این فصل نمونه‌هایی از کد خوب و کد بد را مقایسه می‌کنید. با مطالعه این فصل، متوجه می‌شوید چرا به استانداردهای کدنویسی، اصول، متدولوژی‌ها و قراردادهای کدنویسی (Code Conventions) نیاز دارید. همچنین درباره ماژولار بودن (Modularity) و راهنماهای طراحی مانند KISS، YAGNI، DRY، SOLID و تیغ اوکام (Occam's Razor) یاد می‌گیرید.

فصل 2: بازبینی کد – فرایند و اهمیت

این فصل شما را با فرایند بازبینی کد (Code Review) آشنا می‌کند و دلایل اهمیت آن را بیان می‌کند. در این فصل با مراحل آماده‌سازی کد برای بازبینی، هدایت یک جلسه بازبینی، دانستن مواردی که باید بررسی شوند، زمان مناسب ارسال کد برای بازبینی و نحوه ارائه و دریافت بازخورد آشنا خواهید شد.

فصل 3: کلاس‌ها، اشیا و ساختارهای داده

موضوعات گسترده‌ای از جمله سازمان‌دهی کلاس‌ها، کامنت‌های مستندسازی، انسجام (Cohesion)، کوپلینگ (Coupling)، قانون دمتِر (Law of Demeter) و اشیای تغییرناپذیر (Immutable) و ساختارهای داده را بررسی می‌کند. در پایان این فصل، قادر خواهید بود کدهایی بنویسید که ساختار منظم دارند، تنها یک مسئولیت مشخص دارند، مستندات مرتبط در اختیار کاربران قرار دهند و قابل توسعه باشند.

فصل 4: نوشتن توابع تمیز

به شما کمک می‌کند برنامه‌نویسی تابعی (Functional Programming) را درک کنید، متدها را کوچک نگه دارید و از تکرار کد و پارامترهای متعدد پرهیز کنید. در پایان این فصل، می‌توانید برنامه‌نویسی تابعی را توصیف کنید، کدهای تابعی بنویسید، از بیش از دو پارامتر در متدها اجتناب کنید، اشیا و ساختارهای داده تغییرناپذیر ایجاد کنید، متدهای کوچک بنویسید و به اصل مسئولیت یگانه (Single Responsibility Principle) پایبند باشید.

فصل 5: مدیریت استثناها (Exception Handling)

موضوعاتی مانند استثناهای بررسی‌شده (Checked) و بررسی‌نشده (Unchecked)، NullPointerException و راه‌های جلوگیری از آن‌ها، استثناهای قوانین کسب‌وکار، ارائه داده‌های معنادار و ساخت استثناهای سفارشی را پوشش می‌دهد.

فصل 6: تست واحد (Unit Testing)

در این فصل با متدولوژی توسعه مبتنی بر رفتار (Behavior-Driven Development یا BDD) با استفاده از SpecFlow و توسعه مبتنی بر تست (Test-Driven Development یا TDD) با استفاده از MSTest و NUnit آشنا می‌شوید. یاد می‌گیرید چگونه آبجکت‌های ساختگی (Mock Objects) را با استفاده از Moq ایجاد کنید و چگونه با استفاده از TDD تست‌هایی بنویسید که ابتدا شکست می‌خورند، سپس آن‌ها را به موفقیت برسانید و در نهایت کد را بازآرایی کنید.

فصل 7: تست سیستم انتها به انتها (End-to-End System Testing)

این فصل شما را در یک پروژه نمونه با فرایند دستی تست انتها به انتها (E2E) آشنا می‌کند. در این فصل تست E2E، کدنویسی و تست کارخانه‌ها (Factories)، تزریق وابستگی (Dependency Injection) در کد و تست، و ماژولار کردن تست‌ها را یاد می‌گیرید و روش‌های استفاده از ماژولار بودن را بررسی می‌کنید.

فصل 8: چندریسمانی و هم‌زمانی (Threading and Concurrency)

بر چرخه عمر یک Thread تمرکز دارد؛ اضافه کردن پارامترها به Threadها؛ استفاده از ThreadPool، Mutex و رشته‌های همگام (Synchronous Threads)؛ کار با رشته‌های موازی با استفاده از Semaphoreها؛ محدود کردن تعداد Threadها و پردازنده‌های استفاده شده توسط ThreadPool؛ جلوگیری از بن‌بست (Deadlock) و شرایط رقابتی (Race Condition)؛ متدهای استاتیک و سازنده‌ها؛ تغییرپذیری و تغییرناپذیری؛ و ایمنی رشته‌ای (Thread-Safety).

فصل 9: طراحی و توسعه APIها

کمک می‌کند تا بفهمید API چیست، پراکسی API، راهنماهای طراحی API، طراحی API با استفاده از RAML و توسعه Swagger API. در این فصل، یک API مستقل از زبان را با RAML طراحی و در C# توسعه می‌دهید و API خود را با استفاده از Swagger مستندسازی می‌کنید.

فصل 10: ایمن‌سازی APIها با کلیدهای API و Azure Key Vault

به شما نشان می‌دهد چگونه یک کلید API شخص ثالث دریافت کنید، آن را در Azure Key Vault ذخیره کرده و از طریق یک API که خودتان ساخته و در Azure مستقر کرده‌اید، بازیابی کنید. سپس احراز هویت (Authentication) و مجوزدهی (Authorization) مبتنی بر کلید API را پیاده‌سازی کرده و API خود را ایمن می‌کنید.

فصل 11: پرداختن به نگرانی‌های متقاطع (Cross-Cutting Concerns)

شما را با استفاده از PostSharp برای رسیدگی به نگرانی‌های متقاطع آشنا می‌کند. این کار با استفاده از جنبه‌ها (Aspects) و ویژگی‌ها (Attributes) انجام می‌شود که پایه توسعه مبتنی بر جنبه (Aspect-Oriented Development) هستند. همچنین یاد می‌گیرید چگونه از پراکسی‌ها (Proxies) و دکوراتورها (Decorators) استفاده کنید.

فصل 12: استفاده از ابزارها برای بهبود کیفیت کد

شما را با ابزارهای مختلفی آشنا می‌کند که در نوشتن کد باکیفیت و بهبود کیفیت کدهای موجود به شما کمک می‌کنند. با معیارهای کد (Code Metrics)، تحلیل کد (Code Analysis)، Quick Actions، ابزارهای JetBrains شامل dotTrace Profiler و Resharper و همچنین Telerik JustDecompile آشنا می‌شوید.

فصل 13: بازآرایی کد C# – شناسایی بوی کد (Code Smells)

اولین فصل از دو فصل مربوط به بازآرایی است. در این فصل انواع کدهای مشکل‌دار را شناسایی می‌کنید و یاد می‌گیرید چگونه آن‌ها را به کد تمیز، خوانا، قابل نگهداری و توسعه‌پذیر تبدیل کنید. مشکلات کد به ترتیب حروف الفبا فهرست شده‌اند. موضوعاتی مانند وابستگی کلاس‌ها، کدهای غیرقابل تغییر، کالکشن‌ها و انفجار ترکیبی (Combinatorial Explosion) بررسی می‌شوند.

فصل 14: بازآرایی کد C# – پیاده‌سازی الگوهای طراحی (Design Patterns)

در این فصل با الگوهای طراحی خلاقانه (Creational) و ساختاری (Structural) آشنا می‌شوید. همچنین به طور مختصر به الگوهای رفتاری (Behavioral) اشاره می‌شود. در پایان، نکات نهایی درباره کد تمیز و بازآرایی بیان خواهد شد.

چگونه بیشترین بهره را از این کتاب ببرید؟ 💡

بیشتر فصل‌های این کتاب را می‌توان به‌صورت مستقل و به هر ترتیبی مطالعه کرد. اما برای اینکه بیشترین بهره را از این کتاب ببرید، توصیه می‌کنم فصل‌ها را به همان ترتیبی که ارائه شده‌اند بخوانید.

هنگام مطالعه هر فصل، دستورالعمل‌ها را دنبال کنید و وظایف (Tasks) مطرح‌شده را انجام دهید. سپس در پایان هر فصل، به پرسش‌ها پاسخ دهید و مطالعه‌های تکمیلی پیشنهادی را انجام دهید تا مطالب یادگرفته‌شده در ذهن شما تثبیت شوند.

برای اینکه بیشترین سود را از محتوای این کتاب ببرید، پیشنهاد می‌شود الزامات زیر را رعایت کنید:

نرم‌افزار/سخت‌افزار پوشش داده شده در کتاب نیازمندی‌ها
Visual Studio 2019 Windows 10, macOS
Atom Windows 10, macOS, Linux: https://atom.io/
Azure resources Azure subscription: https://azure.microsoft.com/en-gb/
Azure Key Vault Azure subscription: https://azure.microsoft.com/en-gb/
The Morningstar API Obtain your own API key from https://rapidapi.com/integraatio/api/morningstar1
Postman Windows 10, macOS, Linux: https://www.postman.com/

قبل از شروع مطالعه و انجام تمرین‌های این کتاب، بهتر است موارد زیر را آماده داشته باشید تا تجربه بهتری داشته باشید:

اگر از نسخه دیجیتالی کتاب استفاده می‌کنید، توصیه می‌شود کدها را خودتان تایپ کنید یا به مخزن گیت‌هاب (GitHub Repository) این کتاب (لینک در بخش بعدی ارائه شده است) مراجعه کنید. این کار به شما کمک می‌کند از بروز خطاهای احتمالی ناشی از کپی و پیست کردن کدها جلوگیری شود.

لازم است تجربه‌ی اولیه‌ای در استفاده از Visual Studio 2019 Community Edition یا نسخه‌های بالاتر داشته باشید و با مهارت‌های پایه‌ی زبان C# از جمله نوشتن برنامه‌های کنسولی (Console Applications) آشنا باشید. بسیاری از مثال‌های کتاب به شکل برنامه‌های کنسولی C# ارائه شده‌اند.

پروژه اصلی کتاب با استفاده از ASP.NET انجام می‌شود. اگر توانایی ساخت وب‌سایت‌های ASP.NET با استفاده از Framework و Core را داشته باشید، بسیار مفید خواهد بود. اما نگران نباشید، مراحل لازم به‌طور کامل در کتاب راهنمایی خواهند شد.

دریافت فایل‌های کد نمونه 💻

می‌توانید فایل‌های کد نمونه این کتاب را از حساب کاربری خود در وب‌سایت www.packt.com
دانلود کنید. اگر کتاب را از جای دیگری خریداری کرده‌اید، می‌توانید به صفحه www.packtpub.com/support
مراجعه و ثبت‌نام کنید تا فایل‌ها مستقیماً برایتان ایمیل شوند.

مراحل دانلود کدها:

وارد حساب کاربری خود شوید یا ثبت‌نام کنید در www.packt.com

به تب Support بروید.

روی گزینه Code Downloads کلیک کنید.

نام کتاب را در بخش Search وارد کرده و دستورالعمل‌های روی صفحه را دنبال کنید.

بعد از دانلود فایل‌ها، حتماً مطمئن شوید که پوشه را با جدیدترین نسخه یکی از ابزارهای زیر استخراج (Unzip) کنید:

Windows: WinRAR یا 7-Zip

Mac: Zipeg، iZip یا UnRarX

Linux: 7-Zip یا PeaZip

همچنین بسته کدهای این کتاب در GitHub نیز قرار داده شده است:
https://github.com/PacktPublishing/Clean-Code-in-C-

در صورت به‌روزرسانی کدها، تغییرات در همین مخزن گیت‌هاب اعمال خواهند شد.

همچنین سایر بسته‌های کد مربوط به کتاب‌ها و ویدیوهای دیگر انتشارات Packt در این آدرس در دسترس هستند:
https://github.com/PacktPublishing/

حتماً آن‌ها را بررسی کنید!

دانلود تصاویر رنگی 📑

ما یک فایل PDF نیز ارائه کرده‌ایم که شامل تصاویر رنگی از اسکرین‌شات‌ها و دیاگرام‌های استفاده‌شده در این کتاب است. می‌توانید آن را از این لینک دانلود کنید:
https://static.packt-cdn.com/downloads/9781838982973_ColorImages.pdf

قراردادهای استفاده‌شده در این کتاب ✍️

در سراسر کتاب از قراردادهای نوشتاری خاصی استفاده شده است:

The InMemoryRepository class implements the GetApiKey() method of IRepository. This returns a dictionary of API keys. These keys will be stored in our _apiKeys dictionary member variable.

بلوک‌های کد به این شکل نمایش داده می‌شوند:

using CH10_DividendCalendar.Security.Authentication;
using System.Threading.Tasks;

namespace CH10_DividendCalendar.Repository
{
    public interface IRepository
    {
        Task<ApiKey> GetApiKey(string providedApiKey);
    }
}

دستورات خط فرمان (Command-Line Input/Output) به این صورت نوشته می‌شوند:

az group create --name "<YourResourceGroupName>" --location "East US"

Bold (پررنگ): برای نمایش اصطلاحات جدید، کلمات مهم یا آیتم‌هایی که روی صفحه مشاهده می‌کنید استفاده شده است.
نمونه:

To create the app service, right-click the project you created and select Publish from the menu.

ارتباط با ما 📩

بازخورد خوانندگان همیشه برای ما ارزشمند است.


دیدگاه‌ها و نقدها ⭐

پس از مطالعه و استفاده از این کتاب، خوشحال می‌شویم نظر خود را به‌صورت نقد و بررسی در سایتی که کتاب را از آن خریده‌اید ثبت کنید. این کار باعث می‌شود:

با تشکر از همراهی شما!

برای اطلاعات بیشتر درباره Packt به سایت زیر مراجعه کنید:
https://packt.com