Back-End Developer
ساخت فیلترهای جستجوی پیشرفته در لاراول
در پروژه اخیر ما نیاز به یک جستجوی پیشرفته روی مدل های مختلف داشتیم.این جستجو فیلترهای زیادی را شامل می شد که نیازمند یک سیستم جستجوی منعطف و مقیاس پذیر بود.من تصمیم گرفتم برای این سیستم یک پکیج پیاده سازی کنم که شما می توانید آن را در گیت هاب مشاهده و در پروژهای خود استفاده کنید.
مشکل چیست؟
مشکل از اینجا شروع می شود که شما با مجموعه ای از فیلترها روبرو می شوید که برای اضافه کردن آنها به Query باید شرط های زیادی را برسی کنید.
نوشتن شرط های زیاد حتما از خوانایی کد شما می کاهد و روند توسعه را کُند و پیچیده می کند. همچنین, شما از فیلتر ها وشرط هایی که نوشتید فقط می توانید در یک حوزه استفاده کنید و قابل استفاده مجدد نیز نخواهند بود.
راه حل
شما باید کدهای خود را Refactor کنید !
برای رهایی از این مشکل باید کد خود را به روش Polymorphism برای جایگزین کردن شرط ها Refactor کنید.
برای آشنایی بیشتر این design pattern اینجا کلیک کنید.
مثال عملی
فرض کنید شما نیاز دارید لیست کاربرانی را با پارامترهای درخواستی زیر دریافت کنید:
http://virgool.io/users?age_more_than=25&gender=male&has_published_post=true
پارامتر های درخواستی به صورت زیر خواهند بود:
[
'age_more_than' => '25',
'gender' => 'male',
'has_published_post' => 'true',
]
در روش معمولی ما بصورت زیر فیلتر ها را اعمال میکنیم:
دراینجا به ازای پارامتر های درخواستی, شرط هایی را برسی کردیم.
با اضافه شدن پارامترهای درخواستی, ما باید شرط های دیگری را جهت برسی و محدود کردن Query به تیکه کد بالا اضافه کنیم که تمیزی کد ما را ا بین می برد.
استفاده از پکیج Eloquent-Builder برای حل مشکل
بعد از نصب پکیج معرفی شده, تنها کافیست کد خود را به صورت زیر تغییر دهید:
شما فقط کافیست مدل و لیست پارامترها را به متد to ارسال کنید.
و بعد از آن به ازای پارامترهای درخواستی که قرار است به Query اضافه شوند فیلتر تعریف کنیم.
به همین راحتی!
تعریف یک فیلتر:
برای نمونه من یکی از فیلترهای مثال بالا را پیاده سازی میکنم.به مثال زیر دقت کنید:
برای مشاهده جزئیات بیشتر به آدرس پکیج در گیت هاب مراجعه کنید.
موفق باشید و ممنون بابت وقتی که گذاشتید.
مطلبی دیگر از این انتشارات
چگونه با پایتون ابرِ کلمات فارسی بسازیم؟
مطلبی دیگر از این انتشارات
معرفی چارچوب ایرانی Simplist
مطلبی دیگر از این انتشارات
کپسوله سازی یا همان Encapsulation در جاوا