> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/design-patterns/laravel-design-patterns.md).

# Laravel - Design Patterns

Laravel, PHP ফ্রেমওয়ার্কগুলির মধ্যে অন্যতম জনপ্রিয় এবং শক্তিশালী একটি Framework, যা ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টকে অনেক সহজ এবং দ্রুততর করে তোলে। তবে আপনি কি জানেন, Laravel কীভাবে এই শক্তিশালী ফ্রেমওয়ার্ককে তৈরি করেছে? আসলে Laravel বেশ কিছু **ডিজাইন প্যাটার্ন** ব্যবহার করে, যা তাকে তার ক্ষমতায় শীর্ষে নিয়ে গেছে। চলুন, দেখে নেওয়া যাক Laravel কীভাবে এই ডিজাইন প্যাটার্নগুলি ব্যবহার করে।

### 1. **Singleton Pattern**

Laravel তে **Singleton** প্যাটার্নও ব্যবহার করা হয়। এটি একমাত্র একটি ইন্সট্যান্স ব্যবহার করে সার্ভিস কন্টেইনারের মধ্যে সমস্ত কাজ পরিচালনা করে। যেমন, ডেটাবেস কানেকশন বা অথেন্টিকেশন—এই গুলি সবসময় একটাই ইনস্ট্যান্সে চলে, যা পুরো অ্যাপ্লিকেশন জুড়ে ব্যবহৃত হয়।

### 2. **Facade Pattern**

Laravel-এ **Facade** প্যাটার্ন ব্যবহার করা হয় যাতে আপনি সহজেই সার্ভিসগুলির সাথে কাজ করতে পারেন। ফ্যাসেড এর মাধ্যমে Laravel অনেক জটিল কাজকে সহজ এবং Cleanly উপস্থাপন করে। যেমন, `Cache::put()`, `DB::table()`, অথবা `Auth::user()`—এগুলি ফ্যাসেড যা আপনাকে সরাসরি সার্ভিস কল করতে সহায়তা করে।

### 4. **Observer Pattern**

**Observer** প্যাটার্ন Laravel-এর **Eloquent events** সিস্টেমে ব্যবহৃত হয়। যেমন, যখন কোন মডেল তৈরি, আপডেট বা ডিলিট হয়, তখন অবজার্ভার সেই ইভেন্টের উপর নজর রাখে এবং নির্দিষ্ট কাজগুলো এক্সিকিউট করে।

### 5. **Strategy Pattern**

Laravel-এর **Authentication** সিস্টেমে **Strategy** প্যাটার্ন ব্যবহৃত হয়। এখানে বিভিন্ন অথেন্টিকেশন কৌশল (যেমন সেশন অথবা টোকেন ভিত্তিক) ব্যবহার করা যেতে পারে, তবে কোডে কোন ধরনের পরিবর্তন ছাড়াই।

### 6. **Repository Pattern**

Laravel এ **Repository** প্যাটার্ন ব্যবহার করা হয় যাতে ডেটা অ্যাক্সেস এবং বিজনেস লজিক আলাদা রাখা যায়। এটি ডেটাবেস কোডকে ক্লিন এবং মেইনটেইনযোগ্য রাখে।

### 7. **Factory Pattern**

Laravel এ **Factory** প্যাটার্ন ব্যবহৃত হয় যখন আপনি ডেটাবেসের জন্য মডেল ইন্সট্যান্স তৈরি করেন বা টেস্টিং করতে চান। Laravel এর `Factory` ক্লাস আপনার জন্য ফেক ডেটা তৈরি করতে সাহায্য করে, যা ডেভেলপমেন্ট বা সিডিং-এর সময় কাজে আসে।

### 8. **Adapter Pattern**

**Adapter** প্যাটার্ন Laravel-এ বিভিন্ন স্টোরেজ সিস্টেমের সাথে কাজ করার সময় ব্যবহৃত হয়। আপনি যদি Local Disk, S3 বা অন্য কোনো স্টোরেজ ব্যবহার করতে চান, তাহলে **Storage** ফ্যাসেডের মাধ্যমে একেই অভিন্ন পদ্ধতিতে ব্যবহার করতে পারেন।

### 9. **Chain of Responsibility**

Laravel এর **Middleware** সিস্টেমে **Chain of Responsibility** প্যাটার্ন ব্যবহৃত হয়। মিডলওয়্যার রিকোয়েস্ট এবং রেসপন্স চেইনে কাজ করে, যাতে একটি সিরিজে প্রক্রিয়াজাতকরণ হয়।

***

Laravel শুধুমাত্র একটি PHP ফ্রেমওয়ার্ক নয়, এটি এমন এক শক্তিশালী টুল যা বিভিন্ন ডিজাইন প্যাটার্ন ব্যবহার করে আপনার কাজকে অনেক সহজ করে তোলে। **Singleton**, **Facade**, **Observer**, **Strategy**, **Repository**, **Factory**, **Adapter**, এবং **Chain of Responsibility**—এই সব প্যাটার্ন Laravel কে এমন একটি টুল হিসেবে পরিণত করেছে যা আপনার ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টকে আরও দ্রুত, সহজ এবং স্কেলেবল করে তোলে। Laravel আপনাকে মনে করিয়ে দেয়—একটি ভালো ডিজাইন প্যাটার্নই পারে আপনার কোডকে এক ধাপ এগিয়ে নিয়ে যেতে!
