আইএসপি-তে নিবন্ধগুলি পড়ার সময় মনে হয় আইএসপির দুটি বিপরীত সংজ্ঞা রয়েছে:
প্রথম সংজ্ঞা অনুসারে (দেখুন 1 , 2 , 3 ), আইএসপি বলেছে যে ইন্টারফেস প্রয়োগকারী ক্লাসগুলিকে তাদের প্রয়োজন হয় না এমন ক্রিয়াকলাপগুলি প্রয়োগ করতে বাধ্য করা উচিত নয়। সুতরাং, ফ্যাট ইন্টারফেসIFat
interface IFat
{
void A();
void B();
void C();
void D();
}
class MyClass: IFat
{ ... }
ছোট ইন্টারফেসে বিভক্ত করা উচিত ISmall_1
এবংISmall_2
interface ISmall_1
{
void A();
void B();
}
interface ISmall_2
{
void C();
void D();
}
class MyClass:ISmall_2
{ ... }
এই ভাবে যেহেতু আমার MyClass
শুধুমাত্র পদ্ধতি দরকার (বাস্তবায়ন করতে সক্ষম হয় D()
এবং C()
বাধ্য হচ্ছে এছাড়াও ডামি বাস্তবায়নের প্রদান ছাড়া,) A()
, B()
এবং C()
:
তবে দ্বিতীয় সংজ্ঞা অনুযায়ী (দেখুন 1 , 2 , নাজার মেরজার উত্তর ), আইএসপি বলেছে যে MyClient
কল করার MyService
পদ্ধতিগুলির MyService
যে পদ্ধতিগুলির প্রয়োজন নেই সে সম্পর্কে সচেতন হওয়া উচিত নয় । অন্য কথায়, যদি MyClient
শুধুমাত্র কার্যকারিতা প্রয়োজন C()
এবং D()
তারপর, পরিবর্তে
class MyService
{
public void A();
public void B();
public void C();
public void D();
}
/*client code*/
MyService service = ...;
service.C();
service.D();
আমাদের ক্লায়েন্ট-নির্দিষ্ট ইন্টারফেসগুলিতে পৃথক MyService's
পদ্ধতিগুলি করা উচিত :
public interface ISmall_1
{
void A();
void B();
}
public interface ISmall_2
{
void C();
void D();
}
class MyService:ISmall_1, ISmall_2
{ ... }
/*client code*/
ISmall_2 service = ...;
service.C();
service.D();
এইভাবে পূর্বের সংজ্ঞা সহ, আইএসপিটির লক্ষ্য হ'ল " আইএফএটি ইন্টারফেস প্রয়োগকারী শ্রেণীর জীবনকে সহজ করে তোলা ", তবে পরবর্তীকালের সাথে আইএসপি'র লক্ষ্য হল " মাই সার্ভিসের কলিংয়ের ক্লায়েন্টদের জীবনকে সহজ করা "।
আইএসপি-র দুটি ভিন্ন সংজ্ঞা আসলে কোনটি সঠিক?
@ মারজান ভেনেমা
1।
সুতরাং আপনি যখন আইফ্যাটকে ছোট ইন্টারফেসে বিভক্ত করতে যাচ্ছেন, কোন পদ্ধতিগুলি শেষ হয় যার মধ্যে আইএসমলিন্টারফেসটি সদস্যরা কতটা সম্মতিযুক্ত তার ভিত্তিতে সিদ্ধান্ত নেওয়া উচিত।
একই ইন্টারফেসের মধ্যে একত্রীকরণ পদ্ধতিগুলি বোধগম্য করার ক্ষেত্রে এটি বোধগম্য হওয়ার পরেও আমি ভেবেছিলাম আইএসপি প্যাটার্ন দিয়ে ক্লায়েন্টের প্রয়োজনীয়তাগুলি একটি ইন্টারফেসের "সংযুক্তি" এর চেয়ে বেশি প্রাধান্য পাবে। অন্য কথায়, আমি আইএসপি দিয়ে ভেবেছিলাম আমাদের একই ইন্টারফেসের মধ্যে বিশেষ ক্লায়েন্টদের প্রয়োজনীয় পদ্ধতিগুলি গিলে ফেলা উচিত, এমনকি যদি সেই ইন্টারফেসের বাইরে থাকা মানে সেই পদ্ধতিগুলি যা সংহতিপূর্ণতার জন্য, একই ইন্টারফেসের ভিতরে রাখা উচিত?
সুতরাং, যদি সেখানে প্রচুর ক্লায়েন্ট ছিল যা কেবল কখনও কল করার প্রয়োজন হত CutGreens
, তবে এটিও নয় GrillMeat
, তবে আইএসপি প্যাটার্নটি মেনে চলার জন্য কেবল আমাদের CutGreens
ভিতরে shouldোকানো উচিত ICook
, তবে তাও নয় GrillMeat
, যদিও দুটি পদ্ধতি অত্যন্ত সংহত রয়েছে ?!
2।
আমি মনে করি যে প্রথম সংজ্ঞাতে আপনার বিভ্রান্তি একটি গোপন অনুমান থেকে উদ্ভূত: বাস্তবায়নকারী শ্রেণি ইতিমধ্যে একক দায়িত্বের নীতি অনুসরণ করে চলেছে।
"এসআরপি অনুসরণ করে না এমন ক্লাসগুলি প্রয়োগ করে" আপনি কি সেই ক্লাসগুলিকে উল্লেখ করছেন যা প্রয়োগ করে IFat
বা ক্লাসগুলি প্রয়োগ করে ISmall_1
/ ISmall_2
? আমি ধরে নিয়েছি আপনি যে ক্লাসগুলি প্রয়োগ করছেন তা উল্লেখ করছেন IFat
? যদি তা হয় তবে আপনি কেন ধরে নিচ্ছেন যে তারা ইতিমধ্যে এসআরপি অনুসরণ করে না?
ধন্যবাদ