اصول برنامه نویسی بهینه: مدل های بزرگ،‌ کنترلرهای کوچک!

درسته، این یک رویکرد خوب برای طراحی سیستم‌های بزرگ و پیچیده است. با این رویکرد، مدل‌ها باید مسئولیت‌های مربوط به داده‌ها و منطق کسب و کار را بر عهده داشته باشند، در حالی که کنترلرها باید به عنوان واسط بین مدل‌ها و نماها عمل کنند و مسئولیت‌های مربوط به پردازش و توسط کاربر ارتباطی را بر عهده داشته باشند.

این رویکرد به شما کمک می‌کند تا کنترلرها را کوچک نگه دارید و آن‌ها را برای انجام وظایف مرتبط با واسط کاربری و مسیریابی بین مدل‌ها و نماها محدود کنید. این باعث می‌شود که کنترلرها ساده‌تر و قابل تست‌تر باشند.

همچنین، با نگه داشتن مدل‌ها بزرگ و تمرکز بر روی آن‌ها، می‌توانید منطق کسب و کار خود را به صورت منطقی و منظم سازماندهی کنید و از تکرار کدها جلوگیری کنید.

استفاده از الگوهای طراحی مانند Repository Pattern و Service Layer هم می‌تواند به شما کمک کند تا مدل‌ها را از کنترلرها جدا کرده و کد را سازماندهی و مدیریت بهتری دهید.

به طور کلی، رویکرد “مدل‌های بزرگ، کنترلرهای کوچک” بهبود قابلیت خوانایی، تست و توسعه سیستم‌های شما را تضمین می‌کند.

اگر از Query Builder یا raw SQL queries استفاده میکنید، تمام منطق پایگاه داده را در model ها یا Repository classes قرار بدهید.

روش اشتباه:

public function index()
{
    $clients = Client::verified()
        ->with(['orders' => function ($q) {
            $q->where('created_at', '>', Carbon::today()->subWeek());
        }])
        ->get();

    return view('index', ['clients' => $clients]);
}

روش بهتر:

public function index()
{
    return view('index', ['clients' => $this->client->getWithNewOrders()]);
}

class Client extends Model
{
    public function getWithNewOrders()
    {
        return $this->verified()
            ->with(['orders' => function ($q) {
                $q->where('created_at', '>', Carbon::today()->subWeek());
            }])
            ->get();
    }
}