Clean Code در PHP — اصول کد تمیز برای توسعهدهنده Laravel
Clean Code یعنی کدی که شش ماه بعد خودتان بدون ترس بازش کنید — نه کدی که فقط در مصاحبه خوب به نظر میرسد. در PHP و Laravel با حجم بالای CRUD، الگوهای framework و deadline، اصول ساده اگر رعایت شوند بیشترین بازده را دارند.
نامگذاری معنادار
متغیر $d یا $data2 هزینه ذهنی میسازد. نام باید intent را بگوید:
// بد
function calc($a, $b) { return $a * $b * 0.09; }
// خوب
function calculateVatAmount(int $subtotal, float $vatRate): int
{
return (int) round($subtotal * $vatRate);
}
boolean با is/has/can شروع شود: $isPublished، $hasPermission.
توابع کوتاه — یک سطح abstraction
قانون عملی: اگر برای فهمیدن تابع باید scroll کنید، بخشبندی کنید. Controller action ایدهآل زیر ۱۵ خط — منطق در Action یا Service.
public function store(StorePostRequest $request, CreatePostAction $action)
{
$post = $action->handle($request->toDto(), $request->user());
return new PostResource($post);
}
DRY — اما نه hysterical
تکرار واقعی (همان bug در سه جا) را extract کنید. دو loop شبیه که آینده diverge میشوند — تکرار OK (AHA principle).
Magic number و string
// بد
if ($order->status === 3) { ... }
// خوب — enum PHP 8.1+
if ($order->status === OrderStatus::Shipped) { ... }
کامنت درست
کامنت «چرا» نه «چه». اگر کد نیاز به توضیح «چه» دارد، نام یا ساختار را عوض کنید. exception: regex پیچیده، workaround موقت با ticket number.
Error handling صریح
catch خالی ممنوع. exception معنادار — OrderNotFoundException بهتر از Exception generic.
Type hints و return type
PHP 8.3: typed property، union، readonly — compiler-as-documentation. PHP 8.3.
فرمت یکسان
Laravel Pint یا PHP-CS-Fixer — بحث style در PR حذف شود. PSR-12 baseline.
Code smellهای رایج Laravel
- God Controller — همه logic در یک action
- Fat Model با ۵۰۰ خط unrelated
- Helper global برای هر چیز
- config('x.y') پراکنده بدون constant
SOLID تکمیلکننده Clean Code است.
Refactor امن
- تست بنویسید یا feature test موجود
- یک smell — یک commit
- رفتار عوض نشود — فقط ساختار
Feature test شبکه امن refactor.
جمعبندی
Clean Code habit روزانه است. بعدی: DTO، Value Object. معماری: لایهای.