বিপরীতকরণ নিয়ন্ত্রণ সফ্টওয়্যার আর্কিটেকচারের একটি জেনেরিক ডিজাইনের নীতি যা পুনরায় ব্যবহারযোগ্য, মডিউলার সফ্টওয়্যার ফ্রেমওয়ার্কগুলি বজায় রাখা সহজ যা সহায়তা করতে সহায়তা করে।
এটি এমন একটি ডিজাইনের নীতি যাতে জেনেরিক-লিখিত গ্রন্থাগার বা পুনরায় ব্যবহারযোগ্য কোড থেকে নিয়ন্ত্রণের ফ্লো "প্রাপ্ত" করা হয়েছে।
এটি আরও ভালভাবে বুঝতে, আমাদের কোডিংয়ের আগের দিনগুলিতে আমরা কীভাবে কোড ব্যবহার করতাম তা দেখতে দিন। পদ্ধতিগত / traditionalতিহ্যবাহী ভাষায়, ব্যবসায়িক যুক্তি সাধারণত অ্যাপ্লিকেশনটির প্রবাহ এবং জেনেরিক বা পুনরায় ব্যবহারযোগ্য কোড / ফাংশনগুলিকে "কল" নিয়ন্ত্রণ করে। উদাহরণস্বরূপ, একটি সাধারণ কনসোল অ্যাপ্লিকেশনটিতে, আমার নিয়ন্ত্রণের প্রবাহটি আমার প্রোগ্রামের নির্দেশাবলী দ্বারা নিয়ন্ত্রিত হয়, এতে কিছু সাধারণ পুনরায় ব্যবহারযোগ্য ফাংশনে কল অন্তর্ভুক্ত থাকতে পারে।
print ("Please enter your name:");
scan (&name);
print ("Please enter your DOB:");
scan (&dob);
//More print and scan statements
<Do Something Interesting>
//Call a Library function to find the age (common code)
print Age
বিপরীতে আইওসির সাথে ফ্রেমওয়ার্কগুলি পুনরায় ব্যবহারযোগ্য কোড যা ব্যবসায়িক যুক্তি "কল" করে।
উদাহরণস্বরূপ, উইন্ডোজ ভিত্তিক সিস্টেমে বোতাম, মেনু, উইন্ডো এবং ডায়লগ বাক্সের মতো ইউআই উপাদান তৈরি করার জন্য একটি কাঠামো ইতিমধ্যে উপলব্ধ। যখন আমি আমার অ্যাপ্লিকেশনটির ব্যবসায়িক যুক্তি লিখি, তখন এটি ফ্রেমওয়ার্কের ইভেন্টগুলি হবে যা আমার ব্যবসায়িক লজিক কোডকে কল করবে (যখন কোনও ইভেন্ট চালিত হয়) এবং তার বিপরীতে নয়।
যদিও, কাঠামোর কোডটি আমার ব্যবসায়ের যুক্তি সম্পর্কে অবগত নয়, এটি এখনও আমার কোডটি কল করতে হবে know ইভেন্ট / প্রতিনিধি, কলব্যাক ইত্যাদি ব্যবহার করে এটি অর্জন করা হয় Here এখানে প্রবাহের নিয়ন্ত্রণটি "বিপরীত"।
সুতরাং, স্থিতিশীলভাবে আবদ্ধ বস্তুর উপর নিয়ন্ত্রণের প্রবাহ নির্ভর করার পরিবর্তে প্রবাহ সামগ্রিক অবজেক্ট গ্রাফ এবং বিভিন্ন বস্তুর মধ্যে সম্পর্কের উপর নির্ভর করে।
নির্ভরতা ইনজেকশন হ'ল একটি নকশা প্যাটার্ন যা বস্তুর নির্ভরতা নিরসনের জন্য আইওসি নীতি প্রয়োগ করে।
সহজ কথায়, আপনি কোড লেখার চেষ্টা করার সময়, আপনি বিভিন্ন ক্লাস তৈরি এবং ব্যবহার করবেন। একটি শ্রেণি (ক্লাস এ) অন্যান্য ক্লাস (ক্লাস বি এবং / অথবা ডি) ব্যবহার করতে পারে। সুতরাং, ক্লাস বি এবং ডি ক্লাস এ এর নির্ভরতা are
একটি সাধারণ উপমা একটি ক্লাস কার হবে। একটি গাড়ি অন্যান্য ক্লাসের মতো ইঞ্জিন, টায়ার এবং আরও অনেক কিছুর উপর নির্ভর করে।
নির্ভরতা ইনজেকশন পরামর্শ দেয় যে ডিপেন্ডেন্ট ক্লাসগুলির পরিবর্তে (ক্লাস কার এখানে) তার নির্ভরতা (ক্লাস ইঞ্জিন এবং ক্লাস টায়ার) তৈরি করার পরিবর্তে ক্লাসকে নির্ভরতার দৃ concrete় উদাহরণ দিয়ে ইঞ্জেকশন করা উচিত।
আরও ব্যবহারিক উদাহরণ দিয়ে বুঝতে দেয়। আপনি নিজের টেক্সটএডিটর লিখছেন তা বিবেচনা করুন। অন্যান্য জিনিসের মধ্যে আপনার কাছে একটি বানানচেকার থাকতে পারে যা ব্যবহারকারীকে তার পাঠ্যের টাইপগুলি পরীক্ষা করতে একটি সুবিধা সরবরাহ করে। এই জাতীয় কোডের একটি সাধারণ বাস্তবায়ন হতে পারে:
Class TextEditor
{
//Lot of rocket science to create the Editor goes here
EnglishSpellChecker objSpellCheck;
String text;
public void TextEditor()
{
objSpellCheck = new EnglishSpellChecker();
}
public ArrayList <typos> CheckSpellings()
{
//return Typos;
}
}
প্রথম দর্শনে, সমস্ত গোলাপী দেখায়। ব্যবহারকারী কিছু লেখা লিখবেন will বিকাশকারী পাঠ্যটি ক্যাপচার করবে এবং চেকস্পিলিং ফাংশনটিতে কল করবে এবং টাইপসের একটি তালিকা খুঁজে পাবে যা সে ব্যবহারকারীর কাছে প্রদর্শন করবে।
যখন কোনও ব্যবহারকারী সম্পাদনায় ফরাসী লেখা শুরু করে তখন একটি দুর্দান্ত দিন পর্যন্ত সবকিছু দুর্দান্ত কাজ করবে বলে মনে হচ্ছে।
আরও ভাষার জন্য সমর্থন সরবরাহ করতে, আমাদের আরও স্পেলচেকার থাকতে হবে। সম্ভবত ফরাসি, জার্মান, স্প্যানিশ ইত্যাদি
এখানে, আমরা "টেক্সটএডিটর শ্রেণীর সাথে দৃ English়ভাবে মিলিত হয়ে" ইংলিশ "স্পেলচেকার সহ একটি শক্তভাবে সংযুক্ত কোড তৈরি করেছি, যার অর্থ আমাদের টেক্সটএডিটর শ্রেণিটি ইংলিশস্পেলচিকারের উপর নির্ভরশীল বা অন্য কথায় ইংরাজীস্পেলচিকার পাঠ্যপরিচয়তার জন্য নির্ভরতা। আমাদের এই নির্ভরতা অপসারণ করতে হবে। তদুপরি, আমাদের পাঠ্য সম্পাদককে চালকের সময়ে বিকাশকারীদের বিবেচনার ভিত্তিতে যেকোনও বানান পরীক্ষকের কংক্রিট রেফারেন্স ধরে রাখার একটি উপায় প্রয়োজন।
সুতরাং, আমরা যেমন ডিআই-এর প্রবর্তন দেখেছি, এটি সুপারিশ করে যে ক্লাসটি তার নির্ভরতাগুলির সাথে ইঞ্জেকশন করা উচিত। সুতরাং, কল করা কোডের দায়িত্ব হওয়া উচিত শ্রেণিবদ্ধ কোড / কোডের সমস্ত নির্ভরতা ইনজেকশনের জন্য। সুতরাং আমরা হিসাবে আমাদের কোড পুনর্গঠন করতে পারেন
interface ISpellChecker
{
Arraylist<typos> CheckSpelling(string Text);
}
Class EnglishSpellChecker : ISpellChecker
{
public override Arraylist<typos> CheckSpelling(string Text)
{
//All Magic goes here.
}
}
Class FrenchSpellChecker : ISpellChecker
{
public override Arraylist<typos> CheckSpelling(string Text)
{
//All Magic goes here.
}
}
আমাদের উদাহরণস্বরূপ, টেক্সটএডিটর শ্রেণীর ISpellChecker প্রকারের কংক্রিট উদাহরণ পাওয়া উচিত।
এখন, নির্ভরতা কন্সট্রাক্টর, একটি পাবলিক সম্পত্তি বা কোনও পদ্ধতিতে ইনজেকশন দেওয়া যেতে পারে।
কনস্ট্রাক্টর ডিআই ব্যবহার করে আমাদের ক্লাস পরিবর্তন করার চেষ্টা করি। পরিবর্তিত টেক্সটএডিটর শ্রেণিটি এরকম কিছু দেখবে:
Class TextEditor
{
ISpellChecker objSpellChecker;
string Text;
public void TextEditor(ISpellChecker objSC)
{
objSpellChecker = objSC;
}
public ArrayList <typos> CheckSpellings()
{
return objSpellChecker.CheckSpelling();
}
}
যাতে কলিং কোডটি পাঠ্য সম্পাদক তৈরি করার সময় পাঠ্যপরিচয়কারীর উদাহরণে উপযুক্ত বানানচিকার প্রকারটি ইনজেক্ট করতে পারে।
আপনি এখানে সম্পূর্ণ নিবন্ধটি পড়তে পারেন