Dependency Injection (DI) কনটেইনার কী?

Dependency Injection এবং Service Container - ফ্যালকন (Phalcon) - Web Development

233

Dependency Injection (DI) হল একটি ডিজাইন প্যাটার্ন যা ফ্যালকন (Phalcon) ফ্রেমওয়ার্কে ব্যবহার করা হয় অ্যাপ্লিকেশনটির বিভিন্ন কম্পোনেন্ট বা ক্লাসগুলির মধ্যে ডিপেনডেন্সি (অথবা নির্ভরশীলতা) ইনজেক্ট করতে। ফ্যালকন এ DI কনটেইনার ব্যবহারের মাধ্যমে, আপনি একটি ক্লাসের বা সার্ভিসের নির্ভরশীলতা অন্য কোথাও থেকে প্রদান করতে পারেন, পরিবর্তে তা নিজে তৈরি করার।

DI কনটেইনার হল একটি সেন্ট্রালized সার্ভিস কনটেইনার, যেখানে আপনার অ্যাপ্লিকেশনের বিভিন্ন সার্ভিস বা অবজেক্টগুলি রেজিস্টার করা থাকে। যখন আপনি কোনও সার্ভিসের প্রয়োজন অনুভব করেন, তখন DI কনটেইনার সেটি তৈরি করে এবং ইনজেক্ট করে।

এই প্যাটার্নের সাহায্যে ডিপেনডেন্সি ম্যানেজমেন্ট এবং টেস্টিং সহজ হয়, কারণ আপনি কন্ট্রোলারের মধ্যে নির্ভরশীল ক্লাস বা সার্ভিস সরাসরি ইনস্ট্যানশিয়েট করতে না গিয়ে, কেবল DI কনটেইনারের মাধ্যমে ইনজেক্ট করতে পারেন।


DI কনটেইনারের মূল বৈশিষ্ট্য

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

Phalcon এ DI কনটেইনার কিভাবে কাজ করে?

Phalcon এ DI কনটেইনার একটি Phalcon\DI\Container অবজেক্ট, যা অ্যাপ্লিকেশনের সার্ভিসগুলির জন্য ব্যবহৃত হয়। কনটেইনারে আপনি সমস্ত সার্ভিস রেজিস্টার করতে পারেন এবং পরে সেগুলিকে ক্লাসের মধ্যে ইনজেক্ট করতে পারেন।

1. DI কনটেইনার সেটআপ

Phalcon এ DI কনটেইনার সেটআপ করতে, প্রথমে Phalcon\Di\FactoryDefault ব্যবহার করা হয় যা ডিফল্ট কনটেইনার প্রদান করে।

use Phalcon\Di\FactoryDefault;

$di = new FactoryDefault();

এখানে, FactoryDefault একটি ডিফল্ট DI কনটেইনার সরবরাহ করে, যা Phalcon এর সাথে পূর্বনির্ধারিত কিছু সার্ভিস যেমন ডেটাবেস, ক্যাশ, ইত্যাদি অন্তর্ভুক্ত করে।

2. সার্ভিস রেজিস্ট্রেশন

কোনো সার্ভিস বা ক্লাস DI কনটেইনারে রেজিস্টার করার জন্য, set() মেথড ব্যবহার করা হয়। উদাহরণস্বরূপ, একটি ডেটাবেস সার্ভিস রেজিস্টার করা:

$di->set('db', function() {
    return new Phalcon\Db\Adapter\Pdo\Mysql([
        "host"     => "localhost",
        "username" => "root",
        "password" => "",
        "dbname"   => "test_db"
    ]);
});

এখানে, db নামের একটি সার্ভিস Phalcon\Db\Adapter\Pdo\Mysql এর মাধ্যমে রেজিস্টার করা হয়েছে।

3. DI কনটেইনার থেকে সার্ভিস অ্যাক্সেস

একবার একটি সার্ভিস কনটেইনারে রেজিস্টার হয়ে গেলে, আপনি এটি অ্যাপ্লিকেশনের যেকোনো জায়গা থেকে অ্যাক্সেস করতে পারেন। উদাহরণস্বরূপ:

$db = $di->get('db');

এখানে, get('db') মেথডের মাধ্যমে db সার্ভিসটি কনটেইনার থেকে নেয়া হচ্ছে এবং $db এর মাধ্যমে আপনি ডেটাবেস অপারেশন করতে পারবেন।

4. ইনজেকশন ব্যবহার

Phalcon এ আপনি DI কনটেইনার ব্যবহার করে আপনার কন্ট্রোলার বা অন্যান্য ক্লাসে নির্ভরশীল সার্ভিসগুলো ইনজেক্ট করতে পারেন। উদাহরণস্বরূপ:

use Phalcon\Mvc\Controller;

class IndexController extends Controller
{
    protected $db;

    public function onConstruct()
    {
        // DI কনটেইনার থেকে db সার্ভিস ইনজেক্ট করা
        $this->db = $this->di->get('db');
    }

    public function indexAction()
    {
        $result = $this->db->query("SELECT * FROM users");
        print_r($result->fetchAll());
    }
}

এখানে, onConstruct মেথডের মাধ্যমে DI কনটেইনার থেকে db সার্ভিস ইনজেক্ট করা হয়েছে, যাতে আপনি তা পরবর্তী মেথডে ব্যবহার করতে পারেন।


5. DI কনটেইনারের লাইফটাইম ম্যানেজমেন্ট

Phalcon এর DI কনটেইনারে আপনি সার্ভিসের লাইফটাইম কনফিগার করতে পারেন। দুই ধরনের লাইফটাইম থাকে:

  • প্রত্যেকবার নতুন ইনস্ট্যান্স: সার্ভিসটি প্রতি রিকোয়েস্টে নতুন করে তৈরি হবে।
  • সিঙ্গেলটন (Singleton): সার্ভিসটি শুধুমাত্র একবার তৈরি হবে এবং সেই একই ইনস্ট্যান্স পরবর্তী রিকোয়েস্টগুলিতে ব্যবহৃত হবে।
// সিঙ্গেলটন
$di->setShared('db', function() {
    return new Phalcon\Db\Adapter\Pdo\Mysql([
        "host"     => "localhost",
        "username" => "root",
        "password" => "",
        "dbname"   => "test_db"
    ]);
});

এখানে, setShared ব্যবহার করে db সার্ভিসটি সিঙ্গেলটন হিসেবে রেজিস্টার করা হয়েছে, যার মানে সার্ভিসটি একবার তৈরি হবে এবং পরবর্তী রিকোয়েস্টে একই ইনস্ট্যান্স ব্যবহৃত হবে।


সারাংশ

Phalcon ফ্রেমওয়ার্কে Dependency Injection (DI) কনটেইনার একটি অত্যন্ত শক্তিশালী এবং গুরুত্বপূর্ণ উপাদান, যা অ্যাপ্লিকেশনের বিভিন্ন সার্ভিস এবং ডিপেনডেন্সির মধ্যে সম্পর্ক সহজে পরিচালনা করে। এটি সার্ভিস রেজিস্টার করা, ডিপেনডেন্সি ইনজেকশন, এবং লাইফটাইম ম্যানেজমেন্টের জন্য ব্যবহার করা হয়। DI কনটেইনার ব্যবহারের মাধ্যমে আপনার অ্যাপ্লিকেশন আরও মডুলার, স্কেলেবল, এবং টেস্টেবল হয়। Phalcon এর DI সিস্টেম ডেভেলপারদের কোড অর্গানাইজেশনে সাহায্য করে এবং অ্যাপ্লিকেশনের কার্যকারিতা উন্নত করে।

Content added By
Promotion

Are you sure to start over?

Loading...