সার্ভিসেস ডিফাইন এবং কনফিগার করা

সার্ভিসেস এবং Dependency Injection - সিম্ফনি (Symfony) - Web Development

276

Symfony ফ্রেমওয়ার্কে সার্ভিসেস অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে, যা অ্যাপ্লিকেশনের বিভিন্ন কাজ (যেমন, ডেটাবেস অ্যাক্সেস, কাস্টম লজিক, API ইন্টিগ্রেশন ইত্যাদি) পরিচালনা করতে সহায়ক। Symfony ডিপেন্ডেন্সি ইনজেকশন প্যাটার্ন ব্যবহার করে সার্ভিসেস পরিচালনা করে, যা কোড মডুলার, পুনঃব্যবহারযোগ্য এবং সহজে টেস্টযোগ্য করে তোলে।

এই গাইডে আমরা দেখব কিভাবে Symfony-তে সার্ভিস ডিফাইন করা হয় এবং কনফিগার করা হয়।


Symfony সার্ভিস কী?

সার্ভিস হল একটি ক্লাস বা অবজেক্ট যা কোনো নির্দিষ্ট কাজ বা কার্যক্রম সম্পাদন করে। এটি প্রায়ই ডিপেন্ডেন্সি ইনজেকশন প্যাটার্ন ব্যবহার করে অ্যাপ্লিকেশনের অন্যান্য অংশে অন্তর্ভুক্ত করা হয়। Symfony ফ্রেমওয়ার্কে সার্ভিসের মাধ্যমে সাধারণত ডেটাবেস অ্যাক্সেস, মেইল সিস্টেম, কাস্টম লজিক ইত্যাদি পরিচালিত হয়।


সার্ভিস ডিফাইন এবং কনফিগার করার প্রক্রিয়া

1. সার্ভিস ডিফাইন করা

Symfony-তে একটি সার্ভিস ডিফাইন করার জন্য, সাধারণত services.yaml কনফিগারেশন ফাইল ব্যবহার করা হয়, যা config/services.yaml ফাইলে থাকে। এখানে আপনি সার্ভিস কনফিগারেশন, ডিপেন্ডেন্সি, এবং অতিরিক্ত সেটিংস ডিফাইন করেন।

Example: সার্ভিস ডিফাইন করা

ধরা যাক, আপনার একটি MailerService ক্লাস রয়েছে, যা মেইল পাঠানোর কাজ করে। সেটি একটি সার্ভিস হিসেবে ডিফাইন করতে হবে।

MailerService.php:

namespace App\Service;

class MailerService
{
    public function sendEmail(string $to, string $subject, string $message)
    {
        // Mail sending logic here...
        echo "Sending email to: " . $to;
    }
}

services.yaml:

services:
    App\Service\MailerService:
        public: true

এখানে:

  • App\Service\MailerService ক্লাসকে একটি সার্ভিস হিসেবে ডিফাইন করা হয়েছে।
  • public: true মানে সার্ভিসটি অ্যাপ্লিকেশনের বাইরে থেকে অ্যাক্সেস করা যাবে। আপনি যদি শুধুমাত্র ইনজেকশনের মাধ্যমে সার্ভিসটি ব্যবহার করতে চান, তাহলে এটি public: false রাখতে পারেন।

2. সার্ভিস কনফিগারেশন

আপনি বিভিন্ন প্রোপার্টি এবং সেটিংস কনফিগার করতে পারেন, যেমন:

  • arguments: সার্ভিসের কনস্ট্রাকটর ইনজেকশন ডিপেন্ডেন্সি।
  • tags: সার্ভিস ট্যাগ, যা বিশেষভাবে সার্ভিসের কাজের জন্য ব্যবহার করা হয়।
  • bind: কনস্ট্রাকটর প্যারামিটার বা প্রপার্টি ইনজেকশন।

Example: সার্ভিস কনফিগার করা কনস্ট্রাকটর ইনজেকশন সহ

ধরা যাক, আপনার MailerService একটি LoggerService এর উপর নির্ভরশীল, যাতে মেইল পাঠানোর সময় লগ করা যায়।

LoggerService.php:

namespace App\Service;

class LoggerService
{
    public function log(string $message)
    {
        // Log the message
        echo "Logging message: " . $message;
    }
}

MailerService.php এখন LoggerService এর উপর নির্ভরশীল:

namespace App\Service;

class MailerService
{
    private $logger;

    public function __construct(LoggerService $logger)
    {
        $this->logger = $logger;
    }

    public function sendEmail(string $to, string $subject, string $message)
    {
        $this->logger->log('Sending email to ' . $to);
        echo "Sending email to: " . $to;
    }
}

services.yaml:

services:
    App\Service\MailerService:
        arguments:
            $logger: '@App\Service\LoggerService'
    
    App\Service\LoggerService: ~

এখানে:

  • MailerService এর কনস্ট্রাকটরে LoggerService ইনজেক্ট করা হয়েছে।
  • arguments ব্যবহার করে MailerService এর জন্য LoggerService ডিপেন্ডেন্সি দেওয়া হয়েছে।

3. সার্ভিস ইনজেকশন

Symfony ফ্রেমওয়ার্ক ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করে সার্ভিসগুলো ইনজেক্ট করে। এই সার্ভিসগুলি কন্ট্রোলার, কমান্ড, ইভেন্ট লিসনার ইত্যাদিতে ইনজেক্ট করা যায়।

MailerController.php:

namespace App\Controller;

use App\Service\MailerService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class MailerController extends AbstractController
{
    private $mailerService;

    public function __construct(MailerService $mailerService)
    {
        $this->mailerService = $mailerService;
    }

    public function sendMail(): Response
    {
        $this->mailerService->sendEmail('example@example.com', 'Test Subject', 'Test Message');
        return new Response('Email Sent!');
    }
}

এখানে:

  • MailerService কন্ট্রোলারে ইনজেক্ট করা হয়েছে কনস্ট্রাকটর ইনজেকশন এর মাধ্যমে।

4. সার্ভিসে সিংগেলটন এবং প্রোটোটাইপ প্যাটার্ন

Symfony-এর ডিফল্ট সার্ভিস প্যাটার্ন হল সিংগেলটন। এর মানে হচ্ছে সার্ভিসের একটি মাত্র একক ইনস্ট্যান্স তৈরি হবে এবং তা বারবার ব্যবহার হবে। তবে, আপনি চাইলে সার্ভিসটি প্রোটোটাইপ হিসেবে কনফিগার করতে পারেন, যাতে প্রতি রিকুয়েস্টে নতুন ইনস্ট্যান্স তৈরি হয়।

Example: প্রোটোটাইপ সার্ভিস কনফিগার করা:

services:
    App\Service\MailerService:
        scope: prototype

এখানে:

  • scope: prototype এর মাধ্যমে সার্ভিসটি প্রতিবার নতুন ইনস্ট্যান্স তৈরি করবে।

5. সার্ভিস ডেকোরেটর (Service Decorators)

সার্ভিস ডেকোরেটর ব্যবহার করে আপনি একটি সার্ভিসের কার্যকারিতা বাড়াতে পারেন, যেখানে মূল সার্ভিসের আচরণ অপরিবর্তিত থাকে, তবে আপনি অতিরিক্ত লজিক যোগ করতে পারেন।

Example: সার্ভিস ডেকোরেটর

services:
    App\Service\MailerService:
        decorates: 'App\Service\MailerService'
        arguments: ['@App\Service\MailerService']

এখানে:

  • decorates নির্দেশ করে যে MailerService সার্ভিসটি ডেকোরেটেড হবে।
  • অতিরিক্ত কার্যকলাপ MailerService সার্ভিসে যুক্ত করা যাবে।

সার্ভিস কনফিগারেশন এবং ইনজেকশন এর সুবিধা

  1. ডিপেন্ডেন্সি ম্যানেজমেন্ট:
    Symfony ডিপেন্ডেন্সি ইনজেকশন ব্যবস্থার মাধ্যমে সার্ভিসের ডিপেন্ডেন্সি সহজেই ম্যানেজ করা যায়।
  2. কোড রিডেবিলিটি এবং পুনঃব্যবহারযোগ্যতা:
    সার্ভিসগুলোর মাধ্যমে কোড পুনঃব্যবহারযোগ্য এবং আরও মডুলার হয়, যা রক্ষণাবেক্ষণ সহজ করে।
  3. টেস্টযোগ্য কোড:
    সার্ভিস ইনজেকশন প্যাটার্ন কোডটিকে সহজে টেস্টেবল করে তোলে। টেস্টে আসল সার্ভিসের পরিবর্তে মক সার্ভিস ব্যবহার করা সহজ।

সারাংশ

Symfony-তে সার্ভিস ডিফাইন এবং কনফিগার করা সহজ এবং নমনীয়। আপনি services.yaml ফাইলে সার্ভিস ডিফাইন করতে পারেন এবং সার্ভিসের ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করে অন্য ক্লাসে এটি ইনজেক্ট করতে পারেন। Symfony এর ডিপেন্ডেন্সি ইনজেকশন সিস্টেম কোড মডুলার, স্কেলেবল এবং সহজে রক্ষণাবেক্ষণযোগ্য করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...