Laravel Service Container and Service Provider
Laravel-এর Service Container এবং Service Provider হলো এর Dependency Injection system-এর মূল ভিত্তি। নিচে বিস্তারিতভাবে বাংলায় ব্যাখ্যা করছি, উদাহরণসহ।
🧠 Service Container কী?
Laravel-এর Service Container হলো একটি dependency injection container। সহজভাবে বললে, এটা এমন একটা জায়গা যেখানে তুমি class বা interface রেজিস্টার করতে পারো, এবং Laravel প্রয়োজনে এই class গুলোকে automatically instantiate করে দেয়।
এর মূল সুবিধা:
-
Dependency injection সহজে করা যায়
-
Code loosely coupled হয়
-
Testing সহজ হয়
উদাহরণ: সাধারণভাবে Dependency Inject করা
ধরি তুমি একটি PaymentService class বানিয়েছো:
এখন তুমি একটি Controller-এ এটা ব্যবহার করতে চাও:
Laravel নিজে থেকেই PaymentService instantiate করে দিবে Service Container-এর মাধ্যমে।
🧩 Service Provider কী?
Service Provider হলো Laravel-এর এমন একটা জায়গা, যেখানে তুমি নিজের service বা binding গুলো Service Container-এ রেজিস্টার করো।
সব Service Provider App\Providers ডিরেক্টরির ভিতরে থাকে এবং AppServiceProvider.php তে তুমি অনেক customization করতে পারো।
উদাহরণ: Custom Service এবং Provider
Step 1: একটা Custom Service তৈরি করো
Step 2: একটি Custom Service Provider তৈরি করো
Step 3: Provider-এ Binding করো
Step 4: Provider-টা config/app.php-এ রেজিস্টার করো
Step 5: যেকোনো জায়গা থেকে ব্যবহার করো
সংক্ষেপে পার্থক্য:
| বিষয়ে | Service Container | Service Provider |
|---|---|---|
| কি | Dependency resolve করার container | Binding/registration করার জায়গা |
| ভূমিকা | Class instantiate করে | Binding container-এ রেজিস্টার করে |
| কোথায় | Laravel core এ built-in | app/Providers ডিরেক্টরিতে থাকে |
এখন চল আমরা real-life উদাহরণ এবং কিছু advanced concept নিয়ে বিস্তারিত আলোচনা করি—যেমন:
-
✅ Singleton Binding
-
✅ Contextual Binding
-
✅ Interface to Implementation Binding
-
✅ Tagging
-
✅ Facade ব্যবহার করা
✅ 1. Singleton Binding — একবারই Instantiate হবে
যখন তুমি চাও যে একটি class শুধুমাত্র একবার ইন্সট্যান্সিয়েট হবে এবং পুরো অ্যাপে সেই একই instance ব্যবহার হবে।
🔧 উদাহরণ:
এখন যেখানেই তুমি PaymentService চাও, Laravel আগের তৈরি করা instance ই দেয়। এটি Performance ও Memory usage-এর জন্য ভালো।
✅ 2. Contextual Binding — নির্দিষ্ট Context অনুযায়ী ভিন্ন Dependency
ধরো তোমার কাছে দুটি class আছে যাদের একই interface implement করতে হয়, কিন্তু ভিন্ন ভিন্ন Controller এ ভিন্ন Implementation দরকার।
🔧 উদাহরণ:
Step 1: Interface তৈরি করো
Step 2: দুইটা Implementation
Step 3: দুইটা Controller
Step 4: Contextual Binding করো
এখন StripeController-এ StripePayment যাবে আর PaypalController-এ PaypalPayment!
✅ 3. Interface to Implementation Binding
Laravel আপনাকে Interface-based binding করতে দেয়। এটি SOLID principles (বিশেষত Dependency Inversion) অনুসরণ করে।
উদাহরণ:
এখন Laravel জানে, যখনই PaymentGatewayInterface চাই, তখন StripePayment দিতে হবে।
✅ 4. Tagging — একাধিক Service Group করা
Tagging দিয়ে তুমি একাধিক সার্ভিসকে একটা tag এ গ্রুপ করে একসাথে access করতে পারো।
উদাহরণ:
পরে ব্যবহার:
✅ 5. Facade ব্যবহার করে Binding Access
Facade হল Laravel-এর সরল উপায়ে service container-এর মধ্যে থাকা ক্লাস গুলোকে access করা।
উদাহরণ:
এখন তুমি সহজে ব্যবহার করতে পারো:
উপসংহার
| Concept | ব্যবহারের ক্ষেত্র |
|---|---|
| singleton | একবারই instance দরকার |
| contextual binding | একই interface-এর জন্য ভিন্ন class |
| interface binding | loosely coupled architecture |
| tagging | একাধিক class group করে ব্যবহার |
| facade | elegant static style access |
No comments