আপনার পিডিএফ উদাহরণগুলিকে প্রারম্ভিক পয়েন্ট হিসাবে গ্রহণ করা যাক, এটি দেখুন।
http://en.wikipedia.org/wiki/Single_responsibility_principle
একক দায়িত্বের নীতিটি প্রস্তাব দেয় যে কোনও বস্তুর একটি এবং একমাত্র উদ্দেশ্য থাকতে হবে। এটি মাথায় রাখুন।
http://en.wikipedia.org/wiki/Separation_of_concerns
উদ্বেগের নীতির বিচ্ছেদ আমাদের বলে যে ক্লাসগুলির ওভারল্যাপিং ফাংশন থাকা উচিত নয়।
আপনি যখন এই দুটিটির দিকে তাকান, তারা পরামর্শ দেয় যে যুক্তিটি কোনও বর্গের মধ্যে চলে যাওয়া উচিত যদি এটি বোধগম্য হয়, কেবল যদি সেই শ্রেণি এটি করার জন্য দায়বদ্ধ থাকে।
এখন, আপনার পিডিএফ উদাহরণে, প্রশ্নটি হল, মুদ্রণের জন্য দায়বদ্ধ কে? কী বোঝায়?
প্রথম কোড স্নিপেট:
Pdf pdf = new Pdf();
pdf.Print();
এটা ভাল না. একটি পিডিএফ নথি নিজেই মুদ্রণ করে না। এটি ... টা দা! .. একটি মুদ্রক দ্বারা মুদ্রিত হয়। সুতরাং আপনি দ্বিতীয় কোড স্নিপেট অনেক ভাল:
Pdf pdf = new Pdf();
PdfPrinter printer = new PdfPrinter();
printer.Print(pdf);
এইবার বুঝতে পারছি. একটি পিডিএফ প্রিন্টার একটি পিডিএফ নথি প্রিন্ট করে। আরও ভাল, একটি প্রিন্টার পিডিএফ প্রিন্টার বা একটি ফটো প্রিন্টার হওয়া উচিত নয়। এটি কেবল প্রিন্টার হতে সক্ষম যাতে এটি তার দক্ষতার সেরাটিতে পাঠানো জিনিস মুদ্রণ করতে সক্ষম হয়।
Pdf pdf = new Pdf();
Printer printer = new Printer();
printer.Print(pdf);
সুতরাং এটি সহজ। পদ্ধতিগুলি রাখুন যেখানে তারা বোঝায়। স্পষ্টতই, এটি সর্বদা সহজ নয়। উদাহরণস্বরূপ আপনার দেশের পরিসংখ্যান নিন:
Country m = new Country("Mexico");
double ratio = m.GetDebtToGDPRatio();
তোমার উদ্বেগ প্রকাশ করেছেন যে সেখানে হতে পারে এন পরিসংখ্যান সংখ্যা, এবং তারা একটি দেশ ক্লাসে থাকা উচিত নয় যে। ঐটা সত্য. যাইহোক, যদি আপনার মডেল কেবলমাত্র সেই নির্দিষ্ট পরিসংখ্যানের জন্য কল করে তবে এই মডেলিংয়ের উদাহরণটি সম্ভবত ভাল।
এক্ষেত্রে আপনি বেশ যুক্তিযুক্তভাবে বলতে পারেন যে কোনও দেশের নিজস্ব মডেল এবং হাতে থাকা প্রয়োজনীয়তার জন্য নির্দিষ্ট তার নিজস্ব পরিসংখ্যান গণনা করতে সক্ষম হওয়া উচিত।
এবং এর মধ্যে এটি রয়েছে: আপনার প্রয়োজনীয়তাগুলি কী? আপনার প্রয়োজনীয়তাগুলি আপনি বিশ্বকে, মডেলটিকে যেভাবে প্রাসঙ্গিক করে তুলবেন সেভাবে পরিচালিত করবে।
যদি আপনার কাছে সত্যিকারের সংখ্যা বা ভেরিয়েবল সংখ্যা থাকে তবে আপনার দ্বিতীয় উদাহরণটি আরও অর্থবোধ করে:
Country m = new Country("Mexico");
DebtStatistics ds = new DebtStatistics();
double usRatio = ds.GetDebtToGDPRatio(m);
আরও ভাল, পরিসংখ্যান নামে একটি বিমূর্ত সুপারক্লাস বা ইন্টারফেস রয়েছে যা একটি দেশকে প্যারামিটার হিসাবে গ্রহণ করে:
interface StatisticsCalculator // or a pure abstract class if doing C++
{
double getStatistics(Country country); // or a pure virtual function if in C++
}
ক্লাস tণটোগজিডিপিআরটিস্ট্যাটিস্টিক্সক্যালকুলেটর স্ট্যাটিস্টিক্সক্যালকুলেটর প্রয়োগ করে ....
ক্লাস ইনফ্যান্টমোরালটিস্ট্যাটিস্টিক্স ক্যালকুলেটর স্ট্যাটিস্টিক্সক্যালকুলেটর প্রয়োগ করে ...
এবং তাই এবং আরও অনেক কিছু। যা নিম্নলিখিতগুলির দিকে পরিচালিত করে: সাধারণীকরণ, প্রতিনিধি দল, বিমূর্ততা। পরিসংখ্যান সংগ্রহ একটি নির্দিষ্ট বিমূর্ততা (একটি পরিসংখ্যান সংগ্রহের এপিআই) সাধারণকরণের জন্য নির্দিষ্ট উদাহরণগুলিতে অর্পিত হয় ।
আমি জানি না এটি আপনার প্রশ্নের 100% উত্তর দেয় কিনা। সর্বোপরি, আমাদের অলঙ্ঘনীয় আইন (যেমন ইই লোকেরা করেন on এবং এটি আপনার করা উচিত একটি প্রকৌশল সিদ্ধান্ত। করণীয় হ'ল সর্বোত্তম কাজটি হ'ল ওও নীতিগুলি (এবং সাধারণভাবে ভাল সফ্টওয়্যার মডেলিং নীতিগুলি) সাথে পরিচিত হওয়া)