উইকিপিডিয়া বলেছেন
"সফ্টওয়্যার সত্তা (শ্রেণি, মডিউল, ফাংশন, ইত্যাদি) এক্সটেনশনের জন্য উন্মুক্ত হওয়া উচিত, তবে পরিবর্তনের জন্য বন্ধ করা উচিত"
শব্দগুলি ফাংশনটি আমার চোখে পড়েছিল, এবং আমি এখন অবাক হয়েছি যে আমরা যদি ধরে নিতে পারি যে কোনও পদ্ধতির জন্য একটি ওভারলোড তৈরি করা ওপেন / বদ্ধ নীতিটির উদাহরণ হিসাবে বিবেচনা করা যায় কি না?
আমাকে একটি উদাহরণ ব্যাখ্যা করুন। আপনার পরিষেবা স্তরে আপনার একটি পদ্ধতি রয়েছে তা বিবেচনা করুন, যা প্রায় 1000 জায়গায় ব্যবহৃত হয়। পদ্ধতিটি ইউজারআইডি হয়ে যায় এবং ব্যবহারকারী প্রশাসক কিনা তা নির্ধারণ করে:
bool IsAdmin(userId)
এখন বিবেচনা করুন যে কোথাও এটি নির্ধারণ করা প্রয়োজন যে ব্যবহারকারীর ব্যবহারকারীর নাম ভিত্তিতে, ব্যবহারকারীর আইডির ভিত্তিতে প্রশাসক রয়েছে কি না admin যদি আমরা উপরে বর্ণিত পদ্ধতির স্বাক্ষরটি পরিবর্তন করি তবে আমরা 1000 টি স্থানে কোডটি ভেঙে ফেলেছি (ফাংশনগুলি সংশোধন করে বন্ধ করা উচিত)। এইভাবে আমরা ব্যবহারকারীর নাম পেতে একটি ওভারলোড তৈরি করতে পারি, ব্যবহারকারীর নাম এবং মূল পদ্ধতির উপর ভিত্তি করে ব্যবহারকারী আইডি খুঁজে পেতে পারি:
public bool IsAdmin(string username)
{
int userId = UserManager.GetUser(username).Id;
return IsAdmin(userId);
}
এইভাবে, আমরা এর জন্য একটি ওভারলোড তৈরির মাধ্যমে আমাদের ফাংশনটি প্রসারিত করেছি (ফাংশনগুলি এক্সটেনশনের জন্য উন্মুক্ত হওয়া উচিত)।
এটি কি ওপেন / বদ্ধ নীতিগত উদাহরণ?