আপনার কোডটি আলগাভাবে সংযুক্ত করার জন্য এখানে কয়েকটি সাধারণ জিনিস মনে রাখা দরকার:
অংশ 1:
প্রযুক্তিগতভাবে "কনসার্নের বিচ্ছেদ" নামে পরিচিত। প্রতিটি শ্রেণীর একটি নির্দিষ্ট ভূমিকা থাকে, এটি ব্যবসায়ের যুক্তি বা অ্যাপ্লিকেশন যুক্তি পরিচালনা করা উচিত। উভয় দায়িত্ব একত্রিত করে ক্লাস সম্পর্কে পরিষ্কার এবং চালিত হওয়ার চেষ্টা করুন। অর্থাত্ (ব্রড টার্ম) ডেটা পরিচালনা করে এমন একটি শ্রেণি হ'ল অ্যাপ্লিকেশন লজিক এবং ডেটা ব্যবহার করে এমন একটি ক্লাস হ'ল ব্যবসায়িক যুক্তি।
ব্যক্তিগতভাবে আমি এটিকে (আমার নিজের ছোট্ট পৃথিবীতে) উল্লেখ করি create it or use it
। একটি শ্রেণীর একটি অবজেক্ট তৈরি করা উচিত বা কোনও বস্তু ব্যবহার করা উচিত এটি কখনই দুটোই করা উচিত নয়।
অংশ ২:
উদ্বেগের বিচ্ছেদ কীভাবে কার্যকর করা যায়।
একটি সূচনা পয়েন্ট হিসাবে দুটি সহজ কৌশল আছে:
দ্রষ্টব্য: নকশার নিদর্শনগুলি পরম নয়।
তাদের পরিস্থিতি অনুসারে কাস্টমাইজ করার কথা রয়েছে তবে এগুলির অন্তর্নিহিত থিম রয়েছে যা সমস্ত অ্যাপ্লিকেশনগুলির মতো। সুতরাং নীচের উদাহরণগুলির দিকে তাকান না এবং বলবেন যে আমাকে অবশ্যই এটি কঠোরভাবে অনুসরণ করতে হবে; এগুলি কেবল উদাহরণ (এবং এতে কিছুটা স্বীকৃত)।
নির্ভরতা ইনজেকশন :
আপনি এখানে কোনও ক্লাস ব্যবহার করে এমন একটি বস্তুটি পাস করেন। আপনি যে ইন্টারফেসটি একটি ইন্টারফেসের উপর ভিত্তি করে উত্তীর্ণ করেছেন তাই আপনার শ্রেণি এটি দিয়ে কী করবে তা জানে তবে প্রকৃত বাস্তবায়নটি জানতে হবে না।
class Tokenizer
{
public:
Tokenizer(std::istream& s)
: stream(s)
{}
std::string nextToken() { std::string token; stream >> token;return token;}
private:
std::istream& stream;
};
এখানে আমরা টোকেনাইজারে স্ট্রিমটি ইনজেক্ট করি। টোকনাইজার স্ট্রাইড :: ইসট্রিমের ইন্টারফেসটি প্রয়োগ করে স্ট্রিমটি কী ধরণের তা জানে না।
পরিষেবা লোকেটার প্যাটার্ন :
সার্ভিস লোকেটার প্যাটার্নটি নির্ভরতা ইনজেকশনটির ক্ষেত্রে সামান্য প্রকরণ। যে বস্তুটি এটি ব্যবহার করতে পারে তা দেওয়ার পরিবর্তে আপনি এটিকে এমন একটি বস্তুটি পাস করেন যা আপনি যে অবজেক্টটি ব্যবহার করতে চান তা কীভাবে সনাক্ত করতে (তৈরি করতে) জানে।
class Application
{
public:
Application(Persister& p)
: persistor(p)
{}
void save()
{
std::auto_ptr<SaveDialog> saveDialog = persistor.getSaveDialog();
saveDialog.DoSaveAction();
}
void load()
{
std::auto_ptr<LoadDialog> loadDialog = persistor.getLoadDialog();
loadDialog.DoLoadAction();
}
private:
Persister& persistor;
};
এখানে আমরা অ্যাপ্লিকেশন অবজেক্টটিকে একটি স্ট্রিজার অবজেক্টটি পাস করি। আপনি যখন কোনও সংরক্ষণ / লোড ক্রিয়া করেন তখন এটি অবিস্তর তৈরি করে এমন একটি বস্তু তৈরি করে যা বাস্তবে কীভাবে করণীয় তা জানে। দ্রষ্টব্য: আবার কনসিস্টর একটি ইন্টারফেস এবং আপনি পরিস্থিতির উপর নির্ভর করে বিভিন্ন বাস্তবায়ন সরবরাহ করতে পারেন।
এটি কার্যকর যখন potentially
আপনি কোনও ক্রিয়াকলাপটি তত্ক্ষণাত্ একবার প্রতিবিম্বিত করেন যখন একটি অনন্য বস্তুর প্রয়োজন হয়।
ব্যক্তিগতভাবে আমি এটি ইউনিট পরীক্ষা লেখার ক্ষেত্রে বিশেষভাবে দরকারী বলে মনে করি।
প্যাটার্নগুলির নোট:
ডিজাইনের নিদর্শনগুলি নিজের কাছে একটি বিশাল বিষয়। এটি কোনও উপায়েই আপনি looseিলে ;ালা সংযোগে সহায়তা করতে পারেন এমন নিদর্শনগুলির একচেটিয়া তালিকা নয়; এটি কেবল একটি সাধারণ সূচনা পয়েন্ট।
অভিজ্ঞতার সাথে আপনি বুঝতে পারবেন যে আপনি ইতিমধ্যে এই নিদর্শনগুলি ব্যবহার করছেন কেবল এটির জন্য যে আপনি তাদের আনুষ্ঠানিক নাম ব্যবহার করেন নি। তাদের নামগুলি প্রমিত করে (এবং প্রত্যেককে সেগুলি শিখানোর জন্য) আমরা দেখতে পাই যে ধারণাগুলি যোগাযোগ করা সহজ এবং দ্রুত।