چرا استفاده از پروسیجر ها در انجام عملیات های واکشی داده ها از دیتابیس در لاراول متداول نیست

- 9 ماه پیش
توسط سجاد آپدیت شد
یونس خدادادی ( 78 تجربه )
9 ماه پیش

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

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

پیشاپیش به جهت پاسخ علمی و دقیق و منطقی شما نهایت تشکر رو دارم ..

سجاد ( 3101 تجربه )
9 ماه پیش

سلام
امیدوارم به درستی متوجه منظور شما شده باشم.

در فریمورک ها و به عنوان مثال لاراول که شما اشاره داشتید، به صورت مستقیم sql زده نمیشه بلکه معمولا از مدل ORM استفاده می کنند تا احتمال باگ هایی که ممکن هست پیش بیاد رو کم کنند.
بنابراین برنامه نویس صرفا با توابعی جهت کار با sql سر و کار داره که خودشون در زمان اجرا به حالت دیگری تعبیر می شوند.
برای مثال توضیحات ابتدایی دو صفحه ی زیر را مطالعه بفرمایید:
https://laravel.com/docs/5.5/queries
https://laravel.com/docs/5.5/eloquent

به عنوان نمونه دستور زیر با اینکه SQL مستقیم نیست، خروجی مدنظر را بر می گرداند:

$users = DB::table('users')->select('name', 'email as user_email')->get();

+
اگر منظور شما نکته دیگری بوده، لطفا بفرمایید که در حد توان خدمتتون توضیح بدم.

یونس خدادادی ( 78 تجربه )
9 ماه پیش

ممنون بابت پاسخ و پیگیری شما ..
من متوجه عرض شما بوده و اطلاعاتی در رابطه با مدل و روش کار با دیتابیس و واکشی داده ها در لاراول بدست آوردم ..

مسئله اینه که با همه این اوصاف ( استفاده از کد اس کیو ال به صورت مستقیم و یا استفاده از Eloquent ORM ) برنامه نویسی که از لاراول استفاده میکنه در نهایت به کمک لاراول یه کوئری رو میسازه و اون کوئری رو به سمت دیتابیس ارسال میکنه ..

در حالی که این کوئری رو میشه از قبل در پروسیجر و درون DBMS‌ قرار داد و درون کد برنامه فقط نام پروسیجر رو فراخوانی کرد ..

استفاده از پروسیجر مزیت های زیادی داره و تقریبا استاندارد خیلی از پروژه ها هست ..
از مزیت های استفاده از پروسیجر ها میشه به
۱- مخفی ماندن منطق و مدل طراحی سمت دیتابیس از دسترس برنامه نویس ها
۲- جلوگیری از اجرای کوئری های نامعتارف و مخرب و ناخواسته ( از سمت برنامه نویس، ..) .. به عنوان مثال برنامه نویس حتی اسامی جداول رو هم نمیدونه که بخواد کوئری ناخواسته ای رو اجرا کنه ..
۳-امکان دسترسی راحت تر و سریعتر و بدون دردسر به کوئری جهت تغییر احتمالی..

من یه جستجوی طولانی پیرامون این موضوع تو بحث های خارجی زدم و به دو نکته اساسی رسیدم که خیلی به من کمک کرد

اولین نکته :
لاراول برای ساده سازی روال کار با دیتابیس ها و اینکه هزینه های تولید پروژه ها رو کاهش بده و درکنارش یه سیستم امن و مطمئن در اختیار برنامه نویس ها قرار بده اساس کار با دیتابیس ها و تولید کوئری هاش رو بر پایه تکنولوژی های خودش قرار داده ..
که باعث میشه بخش بزرگی از هزینه ها ( شامل لزوم وجود فردی متبحر در زمینه کار با دیتابیس های مختلف ) رو کاهش بده و به این طریق کمک بزرگی به برنامه نویس ها میکنه ..
و برنامه نویس ها بدون اینکه نیاز باشه کار با مدیریت DBMS های مختلف رو یاد بگیرند، به کمک ابزارهای لاراول به راحتی و بدون دردسر کوئری های خودشون رو پیاده سازی میکنن و در صورت نیاز بدون دردسر به دیتابیس دیگه ای مهاجرت میکنن با کمترین تغییر در کوئری ها ..

در واقع وقتی شما بتونی کوئری خودت رو با لاراول پیاده سازی کنی دیگه نیاز نیست خودت رو درگیر روش و تفاوت هایی که در نحوه پیاده سازی کوئری ها در دیتابیس های مختلف هست بکنی و نگرانی خاصی در زمانی که قصد مهاجرت به یه دیتابیس دیگه رو داری نخواهی داشت .. و صد البته امنیت تضمین شده ای هم در تفسیر و تبدل و ارتباط با دیتابیس هم داری ..

دومین نکته :
افراد مختلفی ( ایرانی و غیر ایرانی ) که در شرکت های بزرگ کار میکنن تاکید داشتن که معمولا از همه امکانات و ابزارهای لاراول در زمینه کار با دیتابیس استفاده نمیکن و غالبا اون مدلی که به صلاح دید خودشون هست رو پیاده سازی میکنن .. و درضمن هیچ اجباری برای استفاده از همه ابزارهای لاراول بر برنامه نویس لاراول نیست


اما در نهایت مدل مورد استفاده در لاراول ( تولید کوئری درون کد و ارسالش به دیتابیس) در کنار مزایای زیادی که داره ، معایبی هم داره که قبلا هم بهش اشاره کردم :
۱- مخفی نماندن منطق و مدل طراحی سمت دیتابیس از دسترس همه برنامه نویس ها
۲- جلوگیری نکردن از اجرای کوئری های نامعتارف و ناخواسته و مخرب ( از سمت برنامه نویس، ..)
۳- عدم دسترسی سریع و راحتی در تغییر کوئری های درون کدبرنامه در مقایسه با پروسیجرها ..

سجاد ( 3101 تجربه )
9 ماه پیش

از این نظر با شما موافقم هستم، البته این موضوع رو عیب نمی دونم، چون جامعه هدف اصلی این فریمورک برنامه نویسان PHP هستند. ( هرچند که در بروزرسانی های اخیر به سمتی در حال حرکت هست که به عنوان یک سیستم API مطمئن برای سرویس های فرانت اند هم شناخته بشه. )

همانطور که اشاره فرمودید لاراول برای کار با دیتابیس ابزارهای متفاوتی ارائه داده که افراد برحسب نیاز استفاده می کنند.

برای ارسال پاسخ باید وارد سایت شوید