/ 3 min read
ইনভার্শন অব কন্ট্রোল নীতি
এই ব্লগে আমি জাভা ওয়েব প্রোগ্রামিং এবং ইনভার্শন অব কন্ট্রোল ও ডিপেন্ডেন্সি ইনজেকশনের বিষয়ে আলোচনা করতে চলেছি।
Last Updated:
সবাইকে সাগতম আমার নতুন ব্লগে। সম্প্রতি আমি একটি বই পড়ি আ ন ম বজলুর রহমান স্যারের। যার নাম জাভা ওয়েব প্রোগ্রামিং।
বইয়ের বিষয়বস্তু
এখানে জাভার একদম মৌলিক কম্পোনেন্ট (যেমন: Servlet, JSP, JDBC, ইত্যাদি) দিয়ে সার্ভার সাইট জাভা ওয়েব অ্যাপ্লিকেশন তৈরির ব্যপারে আলোচনা করা হয়েছে। এখানেই শেষের একটি আধ্যয়ে আলোচনা করা ছিল ইনভার্শন অব কন্ট্রোল ও ডিপেনডেন্সি ইনজেকশন নিয়ে।
আমার কাছে মনে হয়েছে এই বইটি আমাকে ইনভার্শন অব কন্ট্রোল ও ডিপেনডেন্সি ইনজেকশনের গুরুত্বটা নিখুঁতভাবে বোঝাতে পেরেছে।
উদাহরণ: UserService ক্লাস
এখন ধরুন আমাদের একটি ক্লাস আছে UserService নামে যার কাজ হলো ইউজার রিলেটেড বিভিন্ন business লজিক হ্যান্ডেল করা।
ডিপেনডেন্সির ধরন
আমরা জানি ডিপেনডেন্সি দুই ধরনের হয়:
- স্টংলি কাপলড ডিপেনডেন্সি (Strongly coupled dependency)
- লুজলি কাপলড ডিপেনডেন্সি (Loosely coupled dependency)
লুজলি কাপলড ডিপেনডেন্সি
এখন এর সমাধান হলো এই দুইটি ক্লাসকে লুজলি কাপলড ডিপেনডেন্সি হিসেবে পরিবর্তন করা।
UserRepository ইন্টারফেস
PasswordEncryption ইন্টারফেস
পরিবর্তিত UserService ক্লাস
ইনভার্শন অব কন্ট্রোল
এখন UserService-কে একটু পরিবর্তন করে UserRepository এবং PasswordEncryption ইন্টারফেসের অবজেক্টে UserService-এর কনস্ট্রাক্টর এর মাধ্যেমে নিয়ে কাজ করবো।
এখন যদি আমাদের Sha256PasswordEncryption প্রয়োজন হয়:
তাহলে এখানে ডিপেনডেন্সি সরবরাহ করার কন্ট্রোলটি ইনভার্ট হয়েছে। UserService-কে নিজে থেকে ডিপেনডেন্সি তৈরি করতে হচ্ছে না। বরং এটি অন্য কেউ করছে। একেই বলা হয় ইনভার্শন অব কন্ট্রোল (Inversion of Control)।
উপসংহার
এটি একটি সফটওয়্যার ইঞ্জিনিয়ারিং নীতি (software engineering principle) যার ব্যবহার ব্যপক। প্রায় সমস্ত সফটওয়্যার framework এটি ব্যবহার করেই (যেমন: Spring, .NET, Laravel, Django, Rails এত্যাদি)।
এটিই ছিল ইনভার্শন অব কন্ট্রোল নিয়ে আমার আলোচনা। অন্য কোন ব্লগে এর পরবর্তীতে বিষয় ডিপেনডেন্সি ইনজেকশন নিয়ে আলোচনা করা হবে।
সবাই করে ধন্যবাদ, খোদা হাফেজ।