Mohsen Etmd
3 سال پیش توسط Mohsen Etmd مطرح شد
0 پاسخ

خوانایی کد یا پرفورمنس در لاراول

یکی از مشکلاتی که من در لاراول دارم این هست که گاهی برای خوانایی کد باید پرفورمنس رو فدا کنیم(هر چند شاید خیلی این مقدار ناچیز باشه.) به عنوان مثال کدهای زیر رو ببینید.

$transactions = Transaction::with('user')->get();

در این حالت کد خوانایی بسیاری داره ولی خوب 2 تا کوئری زده میشه و فیلدهایی که ما لازم هم نداریم از جداول دریافت میشه به عنوان مثال من از جدول users تنها ستون شماره موبایل رو می خوام ولی همه ستون ها دریافت میشه.

        $transactions = Transaction::query()->with(['user' => function ($query) {
            return $query->select('user_id', 'mobile as mobile');
        }])->get(['transactions.created_at',
            'transactions.amount',
            'transactions.id']);

در این کد فیلد هایی که قرار است دریافت بشه وارد شده ولی باز هم دو تا کوئری زده میشه و خوب خطوط کد زیاد شده و خوانایی کد هم کمتر شده. دیگر اینکه اگر اطلاعات دیگری از جدول user در آینده بخواهیم این دستور باید ویرایش بشه چون همه اطلاعات رو بر نمی گردونه.

        $transactions = Transaction::select(['users.mobile as mobile',
            'transactions.created_at',
            'transactions.amount',
            'transactions.id'])->join('users', function ($join) {
            $join->on('users.user_id', 'transactions.user_id');
        })->get();

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