সার্ভিস কী?

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

317

Symfony-তে সার্ভিস (Service) একটি গুরুত্বপূর্ণ ধারণা, যা ডিপেন্ডেন্সি ইনজেকশন (Dependency Injection, DI) এবং মডুলার আর্কিটেকচারের অংশ হিসেবে ব্যবহৃত হয়। সার্ভিস হলো এমন একটি অবজেক্ট, যা নির্দিষ্ট কাজ সম্পাদন করে এবং অ্যাপ্লিকেশনে পুনঃব্যবহারযোগ্য।

এটি সাধারণত কোনো নির্দিষ্ট কাজ বা লজিক সম্পাদন করতে ব্যবহৃত হয়, যেমন ডেটাবেস সংযোগ, লগিং, কনফিগারেশন হ্যান্ডলিং, মেইল পাঠানো ইত্যাদি। সার্ভিসগুলি সাধারণত স্টেটলেস (stateless) হয়, অর্থাৎ তারা কোনো অবস্থা রাখে না এবং একই সার্ভিস একাধিকবার ব্যবহৃত হতে পারে।


সার্ভিস কীভাবে কাজ করে?

Symfony-তে সার্ভিস একটি অবজেক্ট (অথবা ক্লাস) হিসেবে সংজ্ঞায়িত করা হয়, যা কোনো নির্দিষ্ট কাজ বা কার্যক্রম সম্পাদন করতে পারে। সার্ভিস কন্টেইনারের মাধ্যমে অ্যাপ্লিকেশন শুরুর সময় তৈরি করা হয় এবং পরে তা কন্ট্রোলার, কনসোল কমান্ড, অথবা অন্য যেকোনো অংশে সহজেই ইঞ্জেক্ট (inject) করা যায়।


সার্ভিস তৈরির প্রক্রিয়া

  1. সার্ভিস ক্লাস তৈরি করা
    প্রথমে, একটি সাধারণ ক্লাস তৈরি করতে হবে যা একটি নির্দিষ্ট কাজ সম্পাদন করবে।

    উদাহরণ:

    // src/Service/EmailService.php
    namespace App\Service;
    
    class EmailService
    {
        public function sendEmail($to, $subject, $message)
        {
            // মেইল পাঠানোর কোড
            echo "Sending email to $to with subject $subject";
        }
    }
    

    এই EmailService ক্লাসটি একটি কাজ করছে—ইমেইল পাঠানো।

  2. সার্ভিস কনফিগারেশন (services.yaml)
    Symfony সাধারণত সার্ভিস কনফিগারেশন services.yaml ফাইলের মাধ্যমে সম্পাদনা করে। এই ফাইলটি config/services.yaml এ থাকে।

    services.yaml ফাইলে সার্ভিস কনফিগার করা:

    services:
        App\Service\EmailService: ~
    

    এটি EmailService সার্ভিসটি অ্যাপ্লিকেশন থেকে ব্যবহারযোগ্য করে তোলে।


সার্ভিস ব্যবহার করা

এখন, EmailService সার্ভিসটি Symfony কন্ট্রোলার বা অন্য যেকোনো ক্লাসে ব্যবহার করা যেতে পারে।

কন্ট্রোলার-এ সার্ভিস ব্যবহার:

// src/Controller/EmailController.php
namespace App\Controller;

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

class EmailController extends AbstractController
{
    private $emailService;

    // ডিপেন্ডেন্সি ইনজেকশন
    public function __construct(EmailService $emailService)
    {
        $this->emailService = $emailService;
    }

    public function sendEmail(): Response
    {
        // সার্ভিস ব্যবহার
        $this->emailService->sendEmail('user@example.com', 'Hello World', 'This is a test email.');

        return new Response('Email sent successfully!');
    }
}

এখানে EmailService ক্লাসকে কন্ট্রোলারে ইনজেক্ট করা হয়েছে। যখন sendEmail() মেথড কল হবে, তখন এটি EmailService থেকে sendEmail মেথড ব্যবহার করবে।


ডিপেন্ডেন্সি ইনজেকশন (Dependency Injection)

Symfony-তে সার্ভিসগুলোর মধ্যে ডিপেন্ডেন্সি ইনজেকশন ব্যবহৃত হয়। এর মাধ্যমে একটি সার্ভিস (যেমন: EmailService) অন্য সার্ভিসে ইনজেক্ট (প্রদান) করা হয়।

ডিপেন্ডেন্সি ইনজেকশন (DI) দুটি ধরনের হতে পারে:

  1. কনস্ট্রাক্টর ইনজেকশন:
    কন্ট্রোলারের কনস্ট্রাকটর মাধ্যমে সার্ভিস ইনজেক্ট করা হয়। এটি উপরের উদাহরণে দেখানো হয়েছে।
  2. সেটার ইনজেকশন:
    গেটার এবং সেটার মেথডের মাধ্যমে সার্ভিস ইনজেক্ট করা হয়। উদাহরণস্বরূপ:

    // src/Controller/EmailController.php
    public function setEmailService(EmailService $emailService): void
    {
        $this->emailService = $emailService;
    }
    

সার্ভিস কনটেইনার (Service Container)

Symfony সার্ভিস কনটেইনার একটি ধারণা, যা সার্ভিসগুলির সমষ্টি এবং তাদের মধ্যে সম্পর্ক নিয়ন্ত্রণ করে। কন্টেইনার প্রতিটি সার্ভিসের জীবনচক্র (lifecycle) পরিচালনা করে এবং তার ডিপেন্ডেন্সি ইনজেকশন সম্পাদন করে।

Service Container Symfony কনটেইনারের মাধ্যমে সার্ভিসগুলির সবগুলো রেজিস্টার করা হয়। আপনি যখন কোনো সার্ভিসের উপর নির্ভর করেন, Symfony কনটেইনার এটি ইনজেক্ট করে দেয়।


সার্ভিসের উন্নত ব্যবহার

  1. প্যারামিটার ব্যবহার
    আপনি সার্ভিস কনফিগারেশনে প্যারামিটার ব্যবহার করতে পারেন, যেমন ডাটাবেস URL বা API কী।

    services:
        App\Service\EmailService:
            arguments:
                $apiKey: '%env(API_KEY)%'
    
  2. অটো কনফিগারেশন
    Symfony অনেক সার্ভিসকে স্বয়ংক্রিয়ভাবে কনফিগার করে, বিশেষ করে সার্ভিসের __construct মেথডের ডিপেন্ডেন্সি গুলি অটোমেটিক্যালি ইনজেক্ট করা হয়।

সার্ভিসের সুবিধা

  1. কোড পুনঃব্যবহারযোগ্যতা (Reusability):
    সার্ভিস গুলি বিভিন্ন প্লেসে একাধিকবার ব্যবহার করা যায়, ফলে কোড পুনঃব্যবহারযোগ্য হয়।
  2. অর্থপূর্ণ কোড (Decoupling):
    সার্ভিসগুলো একে অপরের থেকে পৃথক থাকে, ফলে একটির পরিবর্তন অন্যটির ওপর প্রভাব ফেলে না।
  3. টেস্টিং সহজতা:
    সার্ভিসগুলো পৃথকভাবে পরীক্ষা করা সহজ। এটি ইউনিট টেস্টিংয়ের জন্য উপযুক্ত।
  4. ডিপেন্ডেন্সি ম্যানেজমেন্ট:
    Symfony সার্ভিস কনটেইনার ডিপেন্ডেন্সি ইনজেকশন পরিচালনা করে, যা সার্ভিসের মধ্যে সম্পর্ক পরিচালনা করতে সাহায্য করে।

সার্ভিস সারাংশ

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

Content added By
Promotion

Are you sure to start over?

Loading...