ভাদিমের খুব উত্তরের উত্তরটি প্রসারিত করতে আমি "এটি কি বিতর্কিত" প্রশ্নের সাথে "না, সত্যই নয়" এর উত্তর দেব।
সাধারণভাবে, ইন্টারফেস বিভাজন জড়িত বিভিন্ন সামগ্রীর "পরিবর্তনের কারণগুলি" এর সামগ্রিক সংখ্যা হ্রাস করে একটি ভাল জিনিস। মূল নীতিটি হ'ল, যখন একাধিক পদ্ধতির ইন্টারফেস পরিবর্তন করতে হবে, ইন্টারফেসের কোনও একটি প্যারামিটার যুক্ত করতে বলুন, তবে ইন্টারফেসের সমস্ত গ্রাহককে কমপক্ষে পুনরায় সংযুক্ত করতে হবে, এমনকি যদি তারা পরিবর্তিত পদ্ধতিটি ব্যবহার না করে if। "তবে এটি কেবল একটি রিকম্পাইল!", আমি আপনাকে বলতে শুনেছি; এটি সত্য হতে পারে, তবে মনে রাখবেন যে সাধারণত, আপনি যে কোনও কিছু পুনঃনির্মাণ করেন তা অবশ্যই বাইনারিতে পরিবর্তন যত তাড়াতাড়ি গুরুত্বপূর্ণ তা বিবেচনা না করে কোনও সফ্টওয়্যার প্যাচের অংশ হিসাবে আপনাকে বাইরে বের করে দিতে হবে। এই বিধিগুলি মূলত 90 এর দশকের গোড়ার দিকে ধারণা করা হয়েছিল, যখন আপনার পকেটে গড় ডেস্কটপ ওয়ার্কস্টেশনটি ফোনের চেয়ে কম শক্তিশালী ছিল, 14.4k বাউড ডায়াল-আপ ব্লেজিন ছিল, এবং 3.5 "1.44 এমবি" ফ্লপপিস "প্রাথমিক অপসারণযোগ্য মিডিয়া ছিল। এমনকি 3G / 4G এর বর্তমান যুগে, ওয়্যারলেস ইন্টারনেট ব্যবহারকারীরা প্রায়শই সীমাবদ্ধতার সাথে ডেটা প্ল্যান করে থাকেন, তাই আপগ্রেড প্রকাশ করার সময়, যত কম বাইনারি ডাউনলোড করতে হবে, তত ভাল।
তবে, সমস্ত ভাল ধারণার মত, ইন্টারফেসের বিভাজনকে ভুলভাবে প্রয়োগ করা গেলে খারাপ হতে পারে। প্রথমে, এমন সম্ভাবনা রয়েছে যে সেই ইন্টারফেসগুলি (নির্ভরতাগুলি পূরণ করে) তুলনামূলকভাবে অপরিবর্তিত রাখে এমন অবজেক্টটি রাখার সময় আপনি ইন্টারফেসগুলি পৃথক করে, আপনি "গডা অবজেক্ট" বিরোধী ধাঁচের কোনও আত্মীয় যেখানে "হাইড্রা" দিয়ে শেষ করতে পারেন সরল জ্ঞান, বস্তুর সর্বশক্তিমান প্রকৃতি সংকীর্ণ ইন্টারফেসের মাধ্যমে নির্ভরশীল থেকে লুকানো থাকে। আপনি অনেকগুলি নেতৃত্বাধীন দৈত্যের সাথে শেষ করেন যা leastশ্বরের অবজেক্টের হিসাবে বজায় রাখা কমপক্ষে কঠোর এবং তার সমস্ত ইন্টারফেস বজায় রাখার ওভারহেড। এমন কোনও কঠিন সংখ্যক ইন্টারফেস নেই যা আপনার অতিক্রম করা উচিত নয়, তবে প্রতিটি ইন্টারফেসটি আপনি একটি একক বস্তুতে প্রয়োগ করেন এমন প্রশ্নের উত্তর দিয়ে পূর্ববর্তী হওয়া উচিত, "এই ইন্টারফেসটি কি অবজেক্টটিতে অবদান রাখে '?
দ্বিতীয়ত, এসআরপি আপনাকে যা বলে তা সত্ত্বেও, পদ্ধতি অনুসারে একটি ইন্টারফেসের প্রয়োজন হতে পারে না। আপনি "রাভিওলি কোড" দিয়ে শেষ করতে পারেন; এতগুলি কামড়ের আকারের অংশ যেখানে জিনিসগুলি আসলে ঘটে তা সঠিকভাবে খুঁজে বের করার জন্য এটি খুঁজে পাওয়া মুশকিল। যদি ইন্টারফেসের সমস্ত বর্তমান ব্যবহারকারীদের উভয় পদ্ধতির প্রয়োজন হয় তবে দুটি পদ্ধতির সাথে কোনও ইন্টারফেস বিভক্ত করাও অপ্রয়োজনীয়। এমনকি যদি নির্ভরশীল শ্রেণীর একটির কেবল দুটি পদ্ধতির মধ্যে একটির প্রয়োজন হয় তবে এর পদ্ধতিগুলির ধারণাগতভাবে খুব বেশি সংহতি থাকলে ইন্টারফেসটি বিভক্ত করা সাধারণত গ্রহণযোগ্য নয় (ভাল উদাহরণগুলি "অ্যান্টোনমিক পদ্ধতিগুলি যা একে অপরের যথাযথ বিরোধী)।
ইন্টারফেস পৃথককরণ ইন্টারফেসের উপর নির্ভরশীল ক্লাসগুলির উপর ভিত্তি করে হওয়া উচিত:
ইন্টারফেসের উপর যদি কেবলমাত্র এক শ্রেণি নির্ভর করে তবে আলাদা করে রাখবেন না। যদি শ্রেণিটি ইন্টারফেসের এক বা একাধিক পদ্ধতি ব্যবহার না করে এবং এটি ইন্টারফেসের একমাত্র ভোক্তা হয় তবে আপনার পক্ষে এই পদ্ধতিগুলি প্রথম স্থানে প্রকাশ করা উচিত নয় ds
যদি ইন্টারফেসের উপর নির্ভরশীল একাধিক শ্রেণি থাকে এবং সমস্ত নির্ভরকারীরা ইন্টারফেসের সমস্ত পদ্ধতি ব্যবহার করে, আলাদা না করে; যদি আপনাকে অবশ্যই ইন্টারফেস পরিবর্তন করতে হয় (কোনও পদ্ধতি যুক্ত করতে বা স্বাক্ষর পরিবর্তন করতে), সমস্ত বর্তমান গ্রাহকরা আপনি আলাদা করে রাখুন বা না করাকালীন পরিবর্তনের দ্বারা প্রভাবিত হবেন (যদিও আপনি এমন কোনও পদ্ধতি যুক্ত করছেন যা কমপক্ষে একজন নির্ভরশীল প্রয়োজন হবে না, বিবেচনা করুন) সাবধানতার সাথে যদি পরিবর্তনটি নতুন ইন্টারফেস হিসাবে প্রয়োগ করা উচিত, সম্ভবত বিদ্যমানটির থেকে উত্তরাধিকার সূত্রে প্রাপ্ত)।
যদি একাধিক শ্রেণী ইন্টারফেস উপর নির্ভরশীল, এবং তারা না না সব একই পদ্ধতি ব্যবহার, এটা পৃথকীকরণ প্রার্থী আছে। ইন্টারফেসের "সংহতি" দেখুন; সমস্ত পদ্ধতি কি আরও একটি একক, খুব নির্দিষ্ট প্রোগ্রামিং লক্ষ্য অর্জন করে? আপনি যদি ইন্টারফেসের (এবং এর বাস্তবায়নকারীদের) একাধিক মূল উদ্দেশ্য সনাক্ত করতে পারেন তবে "পরিবর্তনের কম কারণ" সহ ছোট ইন্টারফেস তৈরি করতে সেই লাইনগুলির সাথে ইন্টারফেসগুলি বিভক্ত করার বিষয়টি বিবেচনা করুন।