Clean Code
Clean Code یعنی کدی که تغییر آن کمریسک و خواندن آن سریع باشد.
اصول پایه
- هر کلاس یک مسئولیت اصلی داشته باشد
- لایه ورودی فقط orchestration انجام دهد
- business logic داخل use case یا service قرار بگیرد
- validation داخل لایه مشخص و قابل ردیابی انجام شود
- duplication واقعی حذف شود
- abstraction فقط وقتی اضافه شود که پیچیدگی واقعی را کم کند
Separation of Concerns
هر لایه باید مسئولیت خودش را انجام دهد:
- Entry Point: دریافت input و فراخوانی use case
- Validation Layer: اعتبارسنجی و کنترل اولیه ورودی
- Use Case / Service: business rule و orchestration
- Persistence Layer: query یا ذخیرهسازی پیچیده
- Domain Model: رفتار نزدیک به داده و invariantهای اصلی
- Presentation Layer: rendering یا response mapping
DRY
تکرار کورکورانه بد است، اما حذف زودهنگام هر شباهت ظاهری هم میتواند کد را پیچیده کند.
قبل از استخراج abstraction بررسی کنید:
- آیا دو بخش واقعا یک دلیل مشترک برای تغییر دارند؟
- آیا abstraction نام واضح دارد؟
- آیا خوانایی بهتر میشود؟
موارد ممنوع
- methodهای بسیار بلند
- شرطهای تو در تو بیش از حد
- لایه ورودی دارای query و business rule
- helper برای business logic
- کد dead یا کامنتشده