🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ پویا پارسایی
تمام موارد مربوط به logic نباید در کنترلر باشد؟
جامعه لاراول ایجاد شده در ۲۵ خرداد ۱۴۰۱

سلام و عرض ادب

یک نکته ای که توی دوره روش تاکید میشه اینه که نباید logic برنامه مون توی controller باشه، و باید ببریمش تو سرویسمون، حالا سوالی که داشتم از کجا تشخیص بدیم که این کد ما مربوط میشه به logic که ببریمش توی سرویس.

به طور مثال اینجا:


namespace App\\Http\\Controllers;
use App\\Models\\Video;
class VideoController extends Controller
{
    public function show(Video $video)
    {
        $video->load('comments.user');
        return view('videos.show', compact('video'));
    }
}

اینجا لازمه که این خط رو:

$video->load('comments.user');

ببریم توی سرویسمون پیاده سازیش کنیم و بعد توی کنترلر متد سرویسمون رو صدا بزنیم؟

مثلا اینجوری:

$this->videoService->load('comments.user');

چجوری تشخیص بدیم که کدوم کدها به جای کنترلر باید بره توی سرویسمون پیاده سازی بشه؟

سلام ..

ببینید لاجیک در واقع یعنی اون کار اصلی که داره صورت میگیره ... یعنی مثلا ساخت ویدیو میشه اون کار اصلی و زمانی که ما بخوایم اون رو انجام بدیم باید اون رو ببریم داخل یک سرویس. به صورت کلی شما باید کاری که به صورت تنها و فارغ از کنترلر میتونه انجام بشه رو ببرید داخل یک سرویس. مثلا ما الان ساخت ویدیورو میتونیم فارغ از کنترلر صدا بزنیم، مثلا داخل کنسول. برای اینکه این موضوع رو بهتر درک کنید پیشنهاد میکنم پروژهای دوره لاراول کاربردی رو حتما مشاهده کنید. موضوع دیگه هم اینکه این مورد با تجربه بیشتر به دست میاد، زمانی که شما چندین برنامه بنویسید و به خاطر اینکه مثلا لاجیک رو داخل کنترلر پیاده‌سازی نکردید به مشکل برخورد کنید متوجه میشید که به چه صورت باید این مورد رو انجام بدید.


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


$this->videoService->show(12);


بهترین پاسخ
مهرداد سامی ۳۰ خرداد ۱۴۰۱، ۰۷:۱۱