احسان رضایی

یک توسعه دهنده

آخرین مطالب

جستجوی تمام متن با لاراول اسکات Laravel Scout

جستجوی تمام متن با لاراول اسکات Laravel Scout

 

لاراول اسکات / Laravel Scout ابزاری برای قابلیت جستجوی تمام متن(full-text search) در مدل هاست. از درایور هایی مانند Algolia، Meilisearch و خود database لاراول(در حال حاضر MySQL یا PostgreSQL) پشتیانی میکنه.

با یک مثال ساده نصب و استفاده از Scout رو ادامه میدم، فرض کنید جدولی به نام contents با فیلدهای id, title, abstract و text داریم که محتوای وبسایت شما رو در بر میگیره.

نصب لاراول اسکات / Laravel Scout

ابتدا با استفاده از کامپورز و دستور زیر لاراول اسکات رو نصب میکنیم.

composer require laravel/scout

سپس با artisan vendor:publish فایل پیکربندی اسکات رو به پوشه config اضافه میکنیم.

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

فایل پیکربندی رو باز کنید. (config/scout.php)

همونطور که میبینید driver به طور پیشفرض algolia ست شده. در این مثال تصمیم دارم از PostgreSQL استفاده کنم پس داخل .env مقدار SCOUT_DRIVER رو database قرار میدم. تمام!

SCOUT_DRIVER=database
ادامه...

معرفی API Resources در لاراول

هنگام پیاده سازی API یکی از شیوه های بسیار کاربردی و مفیدی که میشه استفاده کرد API Resources هست. با استفاده از این روش به جای پاس دادن مدل یا آرایه ای از مدل ها به عنوان response، لایه ای بین Eloquent و خروجی JSON تعریف میشه. در این لایه که Resource/منبع نام داره دقیقا مشخص میکنیم چه دیتایی به عنوان JSON پاس بدیم. این کار باعث میشه response همون چیزی باشه که نیازش داریم، بدون اضافات. یا اینکه ممکن هست لازم بشه همیشه همراه با مدل، روابط خاصی رو هم داشته باشیم و یا در جاهای خاص، خروجی متفاوتی از یک مدل رو به نمایش بذاریم.

به عنوان مثال جدول کاربران شامل نام و نام خانوادگی، بیو، ایمیل، تاریخ ایجاد، بروزرسانی و حذف(deleted_at) رو در نظر بگیرید. برای سرویس لیست کاربران قرار نیست متن بیو رو نشون بدیم. deleted_at هم که برای soft delete هست و 99 درصد اوقات کلا نیازی به نمایش نداریم. پس همونطور که جلوتر پیاده سازیش رو توضیح میدم، دوتا Resource ایجاد میکنیم، یکی برای لیست کاربران که فیلدهای id, name, email  در اون تعریف میشه و یکی هم برای نمایش تکی کاربر که شامل تمام فیلدهاست.

شاید با خودتون فکر کنید بدون API Resources در لاراول هم میشه این کار رو انجام داد. بله اما تمیز نیست و قابلیت استفاده مجدد مثل Resources هم ندارید.

ادامه...

معرفی لاراول پاینت laravel pint

overview-laravel-pint

لاراول پاینت / laravel pint یه code style fixer بر پایه PHP-CS-Fixer هست که به طور خودکار اشتباهات خارج از سبک و اصول کدنویسی رو اصلاح میکنه. البته خود PHP-CS-Fixer قابلیت ادقام با اکثر editor و IDE های محبوب رو داره اما به نظرم آوردنش توی لاراول و استفاده ازش آسونتره.
لاراول پاینت / laravel pint موقع ادغام سورس کدهای خارجی/قدیمی یا زمانی که کد شما دچار بدهی فنی شده کاربرد داره.

 

لاراول پاینت / laravel pint به طور کلی چه کارهایی رو انجام میده؟

- مرتب کردن کامنت های چند خطی

- اصلاح سینتکس و مرتب کردن تو رفتگی آرایه‌ها(داخل کد های قدیمی آرایه رو با array() تعریف میکردیم اما سینتکس جدیدش به [] تغییر پیدا کرده.)

- خط خالی بعد از namespace و tag های php

- ترکیب isset و unset های متوالی

// before
if (isset($a) && isset($b)) {}

unset($a);
unset($b);

// after
if (isset($a, $b)) {}

unset($a, $b);
ادامه...

یک پیشنهاد هنگام جستجوی شغل جدید

سلام،
ساعت 10 شب 30 آبان 1401. حال هممون خوب نیست...
بعد از کلی وقت اومدم توی لینکدین تا وضعیت شغلیم رو open to work بزنم. متوجه شدم خیلیا مثل من به علت اوضاع بد موجود شغلشون رو از دست دادن. حس کردم وقت نوشتن تجربیاتم در این زمینه است. من فقر رو با پوست و خون و استخونم درک کردم، اگر ازم بپرسین بزرگترین ترست چیه میگم بی پولی. لازم دونستم بگم توی این شرایط بهتره چکار کرد و توصیه ای براتون دارم.
اینجا قرار نیست توضیح بدم چطور رزومه بهتری بنویسید یا چطور مصاحبه کنید، از یه مقدار عقب ترش میگم و خوشحال میشم این مطلب به دردتون بخوره.

ادامه...

الگوی طراحی مخزن در لاراول(Repository Design Pattern)

حتما چنین کدی رو قبلا دیدین:

    public function index() : JsonResponse
    {
        $cars = Car::with('facilities', 'type', 'color', 'rentalDetail')->all();
        return response()->json($cars, 200);
    }

هوم... . مورد بدی توش دیده نمیشه. یک سرویس ساده که لیست خودرو ها رو میده. اما منطق/logic توی کنترلر نوشته شده. هر چند به عقیده من آوردن منطق در کنترلر برای app های کوچک مشکلی به وجود نمیاره اما با رشد نرم افزار بیشتر و بیشتر نیاز به یک ساختار منسجم و متمرکز رو حس میکنید.

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

    public function index() : JsonResponse
    {
        $cars = $this->carRepository->get();
        return response()->json($cars, 200);
    }

این روش مزیت های زیادی داره از جمله:

- ایجاد ساختاری منسجم و متمرکز
- حذف کد های تکراری
- توسعه و نگهداری آسانتر
- کاهش خطا و خطایابی سریعتر
- از بین بردن وابستگی های بین مدل و کنترلر
- کد تمیز و واضحتر

خب به نظرم توضیحات تا همین اندازه کافی هست و بهتره بریم سراغ یک نمونه ساده از پیاده سازی این روش تا مزایایی که بهمون میده رو بیشتر درک کنید.

ادامه...

کیو انتخاب کنم کدومو جواب کنم؟

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

در درجه اول اگر به موردی علاقه دارین امتیاز ویژه ای براش در نظر بگیرید چون خیلی توی موفقیت شما موثر خواهد بود.

میرسیم به بازار کار. دغدغه مهمیه. بازار خودتون رو انتخاب کنید. نیازمندی های داخل کشور با خارج از اون کمی متفاوته. فرض رو بر داخل میگیریم. آگهی های استخدام داخل رو با توجه به علاقه و شرایطی که دارین بررسی کنید.
مثلا اگر محل زندگی شما جوری هست که مجبور به دورکاری هستید، آگهی های استخدام دورکاری رو چک کنید. نیازمندی هاشون، حقوق و دستمزد و... به انتخاب شما کمک میکنه.
فرض کنید بین یادگیری Angular و React گیر کردیم. الان که مشغول نوشتن این مطلب هستم توی یکی از سایت های کاریابی Angular صد و ده تا و React دویست و پنجاه آگهی استخدام داره.
توی مرحله بعد میریم سراغ میزان حقوق دستمزد هر کدومشون و...
همین سرچ کوچیک نشون میده امروز React Developer شانس بیشتری برای استخدام داره.
این کارو توی بازه ها و سایت های مختلف باید انجام داد(هفتگی یا ماهانه). چون گرفتن آمار در یک روز و یک منبع ممکنه شما رو به اشتباه بندازه.
حالا بعد از کلی سبک و سنگین کردن میتونید مشورت بگیرید. اینجا دیگه متوجه تعصب طرف مقابلتون خواهید شد.

کتاب‌ها

کتاب الگوهای طراحی به بیان ساده(design patterns / دیزاین پترن)

در مهندسی نرم افزار، design patterns(الگوهای طراحی) راه حل‌های قابل استفاده برای مشکلاتی هستند که معمولاً در طراحی نرم‌افزار اتفاق می افتند.

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

کتاب refactoring / ریفکتورینگ

Refactoring مجموعه‌ای از تکنیک‌هاست که به منظور اصلاح و بهبود کدهای قبلی بدون تغییر در عملکرد و رفتارشان جهت خوانایی، کارامدی و قابلیت نگهداری بیشتر انجام می‌شود.

در کتاب Refactoring اثر Martin Fowler نوشته شده: refactoring تکنیک مرتب/منظم سازی برای تجدید ساختار کد موجود است. تغییر ساختار داخلی کد بدون تغییر رفتار خارجی آن.

refactoring یک سرمایه‌گذاری و راه حلی برای مقابله با کد کثیف و بدهی فنی است که باعث کاهش هزینه‌های توسعه نرم‌افزار در آینده خواهد شد.