প্যাটার্নগুলি কেবল তখনই ব্যবহার করা উচিত যেখানে সেগুলি সেরা সমাধান হতে পারে বা একটি ভাল সমাধান তৈরি করতে সহায়তা করে (আপনি কি সম্মত হন?)
আমি বাস্তবায়নের বিশদ হিসাবে নকশার নিদর্শনগুলি কঠোরভাবে দেখছি। যদি আপনি সেই ডকুমেন্টেশনে আপনার সার্বজনীন এপিআই এবং প্রোগ্রাম নথিভুক্ত করেন তবে সাধারণভাবে এটি আপনার বিবেচ্য নয় যেখানে আপনার নকশার ধরণ রয়েছে ( এটি হল, আপনি যান না "আমার এখানে একটি সেতুর প্যাটার্ন রয়েছে, এবং আমি এটির উপরে একটি দর্শনার্থী বাস্তবায়ন করব"। পরিবর্তে, এটি "এই শ্রেণীর বিভিন্ন অপারেটিং সিস্টেমে বিভিন্ন প্রয়োগ রয়েছে তাই এটি ব্রিজ প্যাটার্ন ব্যবহার করে প্রয়োগ করা হবে"। তারপরে, আপনি যখন এটি ব্যবহার করেন, তখন সেতু হিসাবে এটি প্রয়োগ করা সম্পর্কে আপনি উদাসীন because কারণ আপনি জনসাধারণের API এ দেখেন, সেতুর প্যাটার্নটি নয় not
আলগাভাবে মিলিত, নমনীয় নকশাগুলি তৈরিতে একজনের কতটা প্রচেষ্টা বিনিয়োগ করা উচিত?
একটি সহজ নিয়ম অনুসরণ করে আলগা সংযোগ অর্জন করা যেতে পারে। আপনি যদি এগুলি সম্মান করেন তবে আপনার কোডটি (আরও) আলগাভাবে মিলিত হবে, যেমন আপনি এটি লেখেন (যেমন কোনও প্রচেষ্টা ইতিমধ্যে বিকাশের প্রক্রিয়ার অংশ)।
বিধিগুলির মধ্যে (সম্পূর্ণ তালিকা নয়):
- ক্লায়েন্ট কোড (ক্লাসটি কীভাবে ব্যবহৃত হবে) ভেবে আপনার ইন্টারফেসগুলি সংজ্ঞায়িত করুন (ক্লাসটি কীভাবে ব্যবহৃত হবে), ক্লাস কী করবে তা নয় (অর্থাত্ ইন্টারফেসের জন্য অনুগ্রহ করে, বাস্তবায়ন নয়)
- "বলুন, জিজ্ঞাসা করবেন না"
- ইতিমধ্যে নির্মিত অংশগুলি থেকে অবজেক্টগুলি তৈরি করুন
- আপনি যে প্রকৃত অবজেক্টগুলি ব্যবহার করবেন তা কনস্ট্রাক্টারে প্রবেশ করুন (সদস্যদের জন্য কারখানা নয়, প্যারামিটারগুলির কারখানার জন্য প্যারামিটার বা এর মতো কিছু)।
- ডিআরওয়াই (যদি আপনার দুটি লাইন থাকে যা একই ক্রমে দুটি স্থানে উপস্থিত থাকে তবে সেগুলি একটি পৃথক ফাংশনে সরিয়ে নিন)।
- যদি কোনও অবজেক্ট তৈরি আরও জটিল অপারেশন হয়, তবে কারখানার পদ্ধতি / শ্রেণি হিসাবে (যেমন কনস্ট্রাক্টর বডিতে নয়) মধ্যস্থতাকারী অংশগুলি তৈরির বাস্তবায়ন করুন।
- ইয়াগনি (আপনার প্রয়োজন মতো জিনিসগুলি তৈরি করুন, আগে নয়)।
ভাষা, বিকাশের পদ্ধতিগুলি আপনার দল অনুসরণ করে (যেমন টিডিডি), সময়ের বাজেটের সীমাবদ্ধতা ইত্যাদির উপর নির্ভর করে এই নিয়মগুলি আলাদাভাবে অনুসরণ করা হয়।
উদাহরণস্বরূপ, জাভাতে, আপনার ইন্টারফেসটিকে একটি হিসাবে সংজ্ঞায়িত করা এবং সেটিতে interface
ক্লায়েন্ট কোড লিখতে ভাল অনুশীলন হয় (তারপরে, একটি বাস্তবায়ন শ্রেণীর সাথে ইন্টারফেসটি ইনস্ট্যান্ট করুন)।
অন্যদিকে সি ++ এ আপনার ইন্টারফেস নেই, সুতরাং আপনি কেবল একটি বিমূর্ত বেস শ্রেণি হিসাবে ইন্টারফেসটি লিখতে পারেন; যেহেতু সি ++ তে আপনি কেবল উত্তরাধিকার ব্যবহার করেন যখন আপনার জন্য এটির দৃ strong় প্রয়োজন হয় (এবং এটি অপ্রয়োজনীয় ভার্চুয়াল ফাংশনগুলির ওভারহেড এড়ানো হয়), আপনি সম্ভবত ইন্টারফেসটি পৃথকভাবে ব্যাখ্যা করবেন না, কেবল শ্রেণির শিরোনাম)।
যারা নকশার নিদর্শনগুলির বিরোধিতা করেন তারা বলে যে এই নিদর্শনগুলি ব্যবহার করতে ব্যয় করা প্রায়শই সুবিধার চেয়ে বেশি।
আমি মনে করি তারা এটি ভুল করছে। আপনি যদি আলগাভাবে কাপলড (এবং ডিআরওয়াই) কোডটি লিখেন তবে এতে নকশার নিদর্শনগুলিকে একীভূত করার সাথে ন্যূনতম অতিরিক্ত পরিশ্রম হয়। অন্যথায়, আপনাকে ডিজাইনের ধরণ প্রয়োগের জন্য আপনার কোডটি মানিয়ে নিতে হবে।
আপনি পরিবর্তনগুলি প্রচুর করতে একটি নকশা প্যাটার্ন বাস্তবায়ন থাকে, তবে আপনার সমস্যা না নকশা প্যাটার্ন - এটা আপনার কোড একশিলা হচ্ছে বেস, এবং শক্তভাবে মিলিত হয়। এটি একটি খারাপ / suboptimal নকশা সমস্যা, নকশা নিদর্শন সমস্যা নয়।
আমি যা জানতে চাই, কেবলমাত্র আমার অ্যাপ্লিকেশনটিকে ওও নীতিগুলি যেমন looseিলে coupালা মিলন, ইন্টারফেসে প্রোগ্রামমাইন ইত্যাদি অনুসরণ করার অনুমতি দেওয়ার জন্য আমার অতিরিক্ত স্তরের বিমূর্ততা এবং নকশাগুলি তৈরি করতে আসলে কতটা প্রচেষ্টা করা উচিত তা কি আসলেই মূল্যবান? এটা? এতে আমার কতটা চেষ্টা করা উচিত?
আপনার প্রশ্নগুলি (অচলিত) ধারণাটি তৈরি করে যে আলগা কাপলিংয়ের একমাত্র সুবিধা হ'ল ডিজাইনের নিদর্শনগুলি সহজেই প্রয়োগ করার ক্ষমতা। এইটা না.
আলগা সংযোগের সুবিধার মধ্যে রয়েছে:
- রিফ্যাক্টরিং এবং নমনীয়তা পুনরায় নকশা
- কম ব্যর্থ প্রচেষ্টা
- testability
- কোড পুনরায় ব্যবহার করার সম্ভাবনা বৃদ্ধি পেয়েছে
- নকশা সরলতা
- ডিবাগারে কম সময় ব্যয় করা
... এবং আরও কয়েকজন যা এখনই আমার মনে আসে না।