Header Ads

Header ADS

Laravel Facades

 Facades (ফ্যাসাড) Laravel-এর একটি শক্তিশালী ফিচার যা স্ট্যাটিক ইন্টারফেস প্রদান করে অ্যাপ্লিকেশনের সেবাগুলোকে অ্যাক্সেস করার জন্য। এটি মূলত Laravel-এর সার্ভিস কন্টেইনারে রেজিস্টার্ড ক্লাসগুলোর জন্য একটি "স্ট্যাটিক প্রক্সি" হিসেবে কাজ করে।

Facades কি?

Facades হল:

  • ক্লাসের স্ট্যাটিক রেপ্রেজেন্টেশন (আসল অবজেক্ট নয়)

  • সার্ভিস কন্টেইনারে রেজিস্টার্ড ক্লাসের শর্টকাট

  • ইউজার-ফ্রেন্ডলি সিনট্যাক্স প্রদান করে

কেন Facades ব্যবহার করবেন?

  1. সহজ সিনট্যাক্স: কম্প্লেক্স ডিপেন্ডেন্সি ইনজেকশন ছাড়াই

  2. প্রডাক্টিভিটি: দ্রুত কোড লিখতে সাহায্য করে

  3. পাঠযোগ্যতা: কোড সহজে বোঝা যায়

বেসিক উদাহরণ

php
Copy
Download
use Illuminate\Support\Facades\Cache;

// Cache ফ্যাসাড ব্যবহার
Cache::put('key', 'value', $minutes);

এটি নিচের কোডের সমতুল্য:

php
Copy
Download
$cache = app('cache');
$cache->put('key', 'value', $minutes);

কিভাবে Facades কাজ করে?

  1. আপনি একটি ফ্যাসাড কল করেন (যেমন Cache::get())

  2. Laravel ম্যাজিক মেথড __callStatic() ব্যবহার করে

  3. সার্ভিস কন্টেইনার থেকে সংশ্লিষ্ট অবজেক্ট রেজল্ভ করে

  4. মেথড কলটি আসল অবজেক্টে ডেলিগেট করে

বিল্ট-ইন Facades উদাহরণ

Facadeআসল ক্লাসব্যবহার
AuthIlluminate\Auth\AuthManagerঅথেন্টিকেশন
DBIlluminate\Database\DatabaseManagerডাটাবেস
RouteIlluminate\Routing\Routerরাউটিং
SessionIlluminate\Session\SessionManagerসেশন
StorageIlluminate\Filesystem\FilesystemManagerফাইল সিস্টেম

কাস্টম Facade তৈরি

১. প্রথমে একটি ক্লাস তৈরি করুন

php
Copy
Download
// app/Services/PaymentGateway.php
namespace App\Services;

class PaymentGateway {
    public function charge($amount) {
        // পেমেন্ট লজিক
    }
}

২. সার্ভিস প্রোভাইডারে রেজিস্টার করুন

php
Copy
Download
// AppServiceProvider.php
public function register()
{
    $this->app->singleton('payment', function ($app) {
        return new \App\Services\PaymentGateway();
    });
}

৩. Facade ক্লাস তৈরি করুন

php
Copy
Download
// app/Facades/Payment.php
namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class Payment extends Facade {
    protected static function getFacadeAccessor() {
        return 'payment';
    }
}

৪. ব্যবহার করুন

php
Copy
Download
use App\Facades\Payment;

Payment::charge(100);

Facades vs ডিপেন্ডেন্সি ইনজেকশন

FeatureFacadesDependency Injection
সিনট্যাক্সস্ট্যাটিক (Cache::get())ইনস্ট্যান্স ($cache->get())
টেস্টেবিলিটিমক করতে সহজনেটিভলি টেস্টেবল
রিডেবিলিটিসংক্ষিপ্তএক্সপ্লিসিট ডিপেন্ডেন্সি

Facades এর সুবিধা

  1. দ্রুত ডেভেলপমেন্ট: কম কোডে বেশি কাজ

  2. পাঠযোগ্যতা: সহজে বোঝা যায়

  3. লার্নিং কার্ভ: নতুনদের জন্য সহজ

Facades এর অসুবিধা

  1. হিডেন ডিপেন্ডেন্সি: ক্লাসের নির্ভরতা স্পষ্ট নয়

  2. স্ট্যাটিক ব্যবহার: কিছু ডেভেলপার এড়িয়ে চলেন

  3. গ্লোবাল স্টেট: টেস্টিং এ সমস্যা করতে পারে

বাস্তব উদাহরণ

php
Copy
Download
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;

// ফ্যাসাড ব্যবহার করে মেইল পাঠানো
Mail::to('user@example.com')->send(new WelcomeEmail());

// ফাইল সিস্টেম এক্সেস
use Illuminate\Support\Facades\Storage;

Storage::disk('local')->put('file.txt', 'Content');

Facades টেস্টিং

Facades মক করা খুব সহজ:

php
Copy
Download
use Illuminate\Support\Facades\Cache;

public function test_cache()
{
    Cache::shouldReceive('get')
         ->with('key')
         ->andReturn('value');
         
    $result = Cache::get('key');
    $this->assertEquals('value', $result);
}

Facades Laravel-এর একটি শক্তিশালী এবস্ট্রাকশন লেয়ার যা ডেভেলপমেন্টকে দ্রুততর এবং সহজ করে তোলে, তবে বড় প্রজেক্টে ডিপেন্ডেন্সি ইনজেকশন প্রেফার করা যেতে পারে।

No comments

Theme images by fpm. Powered by Blogger.