اصول برنامه نویسی بهینه:منطق برنامه باید در service class باشد

هر کنترلر باید یک وظیفه داشته باشد، بنابراین منطق برنامه را در service classes بنویسید. این یک رویکرد خوب برای طراحی برنامه‌های Laravel است. با قرار دادن منطق برنامه در کلاس‌های سرویس، شما مسئولیت‌های مربوط به منطق کسب و کار را از کنترلرها جدا می‌کنید و کدهای کنترلرها را ساده‌تر و قابل نگهداری‌تر می‌کنید.

در Laravel، کلاس‌های سرویس معمولاً در مسیر app/Services قرار می‌گیرند. این کلاس‌ها مسئولیت انجام عملیات مربوط به منطق کسب و کار را دارند. به عنوان مثال، شما می‌توانید یک کلاس سرویس برای مدیریت کاربران با نام UserService ایجاد کنید که شامل عملیات‌هایی مانند ثبت نام، ورود، به روزرسانی اطلاعات کاربری و … باشد.

با قرار دادن منطق برنامه در کلاس‌های سرویس، شما می‌توانید این کلاس‌ها را به راحتی تست کنید و قابلیت استفاده مجدد بالایی دارند. همچنین، کنترلرها فقط مسئولیت انجام عملیات مربوط به واسط کاربری و مسیریابی را دارند و تمام منطق کسب و کار به کلاس‌های سرویس منتقل می‌شود.

با این رویکرد، هر کنترلر فقط یک وظیفه دارد و منطق برنامه در کلاس‌های سرویس نگهداری می‌شود، که باعث ساده‌تر و قابل تست‌تر شدن کدها و افزایش انعطاف‌پذیری برنامه می‌شود.

روش نامناسب:

public function store(Request $request)
{
    if ($request->hasFile('image')) {
        $request->file('image')->move(public_path('images') . 'temp');
    }
    
    ...
}

روش بهتر:

public function store(Request $request)
{
    $this->articleService->handleUploadedImage($request->file('image'));

    ...
}

class ArticleService
{
    public function handleUploadedImage($image)
    {
        if (!is_null($image)) {
            $image->move(public_path('images') . 'temp');
        }
    }
}