محمد جواد سلطانی
محمد جواد سلطانی
خواندن ۲ دقیقه·۱ سال پیش

ریپوزیتوری پترن داخل سیستم ماژولار لاراول


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

باید به فکر سادگی کار هم میبودم و نمیخواستم طوری این چالش رو رفع کنم که ده جا دیگه به چالش و باگ های بدتر بخوره ?

با کلی بررسی و هماهنگ شدن با تیم یه راهکار به ذهنمون خرد و اونم respository pattern بود، بنظر خیلی ساده میرسید، میتونستیم یه ریپوزیتوری تعریف کنیم. کد های تکراری رو داخلش بنویسیم و داخل سرویس ماژولار ازش استفاده کنیم.


برای درک بهتر ریپوزیتوری پترن میتونین اینجارو هم ببینین :

https://asperbrothers.com/blog/implement-repository-pattern-in-laravel/


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

برای پیاده سازی ریپوزیتوری پترن داخل لاراول اومدیم و داخل پوشه اپ یه دایرکتوری ساختیم که اینترفیس ها و ریپوزیتوری ها مربوط به هر مدلی که ما میخوایم داخل ماژولمون استفاده کنیم داخلش قرار دادیم.


اگه میخواین کد های مربوط به ریپوزیتوری هارو ببینین، این مقاله داخل مدیوم خیلی بهتر من میتونه بهتون درمورد کداش توضیح بده(: :

https://dev.to/carlomigueldy/getting-started-with-repository-pattern-in-laravel-using-inheritance-and-dependency-injection-2ohe

وقت شناسایی ریپوزیتوری هایی که نوشتیم به ماژولمونه، باید هرچی داشتیم و نداشتیم رو به ماژولمون بشناسونیم. داخل سرویس پرووایدر ماژولمون همه چی رو تعریف میکنیم و حالا با فساد App میتونیم به ریپوزیتوری ها دسترسی داشته باشیم.

تبریک میگم ? ما الان تونستیم یه چالش خیلی بزرگ رو با راه حل های ساده از بین ببریم.

داخل تیم دس تو دس کلی چالش اینطوری داریم که خوشحال میشم بتونیم باهم دیگه حلش کنیم(:

اگه دنبال یه همکاری پر چالش و جذاب هستین و دستتون به سیستم لاراول اشناست و باهاش حال میکنین خوشحال میشم باهم دیگه همکار بشیم.

برای همکاری داخل تلگرام به ایدی @Ahdd_amir پیام بدین.


لاراول
یه پسر نوجوون
شاید از این پست‌ها خوشتان بیاید