OOP- এ নির্ভরতা বিপরীকরণের অর্থ হল আপনি কোনও ইন্টারফেসের বিরুদ্ধে কোড করেন যা কোনও বস্তুর প্রয়োগের দ্বারা সরবরাহ করা হয়।
উচ্চতর ভাষার ক্রিয়াকলাপগুলিকে সমর্থন করে এমন ভাষাগুলি প্রায়শই কোনও অবজেক্টের পরিবর্তে ফাংশন হিসাবে আচরণের মাধ্যমে সাধারণ নির্ভরতা ইনভার্সন সমস্যাগুলি সমাধান করতে পারে যা ওও-অর্থে একটি ইন্টারফেস প্রয়োগ করে।
এই জাতীয় ভাষায়, ফাংশনের স্বাক্ষরটি ইন্টারফেসে পরিণত হতে পারে এবং পছন্দসই আচরণ প্রদানের জন্য একটি ফাংশন একটি traditionalতিহ্যগত বস্তুর পরিবর্তে পাস করা হয়। মাঝের প্যাটার্নের গর্ত এটির জন্য একটি ভাল উদাহরণ।
এটি আপনাকে কম কোড এবং আরও অভিব্যক্তি সহ একই ফলাফল অর্জন করতে দেয়, কারণ আপনাকে কলারের জন্য কাঙ্ক্ষিত আচরণ প্রদানের জন্য (OOP) ইন্টারফেসের সাথে সঙ্গতিপূর্ণ একটি সম্পূর্ণ শ্রেণি প্রয়োগ করার দরকার নেই। পরিবর্তে, আপনি কেবল একটি সাধারণ ফাংশন সংজ্ঞা পাস করতে পারেন। সংক্ষেপে: কোডটি বজায় রাখা প্রায়শই সহজ, যখন উচ্চতর অর্ডার ফাংশন ব্যবহার করে তখন আরও অভিব্যক্তিপূর্ণ এবং আরও নমনীয়।
সি # তে একটি উদাহরণ
প্রথাগত পদ্ধতি:
public IEnumerable<Customer> FilterCustomers(IFilter<Customer> filter, IEnumerable<Customers> customers)
{
foreach(var customer in customers)
{
if(filter.Matches(customer))
{
yield return customer;
}
}
}
//now you've got to implement all these filters
class CustomerNameFilter : IFilter<Customer> /*...*/
class CustomerBirthdayFilter : IFilter<Customer> /*...*/
//the invocation looks like this
var filteredDataByName = FilterCustomers(new CustomerNameFilter("SomeName"), customers);
var filteredDataBybirthDay = FilterCustomers(new CustomerBirthdayFilter(SomeDate), customers);
উচ্চতর ক্রমের সাথে:
public IEnumerable<Customer> FilterCustomers(Func<Customer, bool> filter, IEnumerable<Customers> customers)
{
foreach(var customer in customers)
{
if(filter(customer))
{
yield return customer;
}
}
}
এখন বাস্তবায়ন এবং প্রার্থনা কম জটিল হয়ে ওঠে। আমাদের আর আইফিল্টার বাস্তবায়ন সরবরাহ করার দরকার নেই। ফিল্টারগুলির জন্য আমাদের আর ক্লাস প্রয়োগ করার দরকার নেই।
var filteredDataByName = FilterCustomers(x => x.Name.Equals("CustomerName"), customers);
var filteredDataByBirthday = FilterCustomers(x => x.Birthday == SomeDateTime, customers);
অবশ্যই, এটি ইতিমধ্যে সি # তে লিনকিউ দ্বারা করা যেতে পারে। আমি এই উদাহরণটি কেবল উদাহরণস্বরূপ ব্যবহার করেছি যে কোনও ইন্টারফেস প্রয়োগকারী বস্তুর পরিবর্তে উচ্চতর অর্ডার ফাংশনগুলি ব্যবহার করা সহজ এবং আরও নমনীয়।