সঠিক ডিজাইন প্যাটার্ন নির্বাচন করা


32

আমি সবসময় ডিজাইনের ধরণগুলি ব্যবহারের গুরুত্বকে স্বীকৃতি দিয়েছি। অন্যান্য বিকাশকারীরা কীভাবে সবচেয়ে উপযুক্তটিকে বেছে নেবেন সে সম্পর্কে আমি আগ্রহী cur আপনি সিদ্ধান্ত নিতে সহায়তা করতে আপনি কি বৈশিষ্ট্যগুলির একটি সিরিজ (যেমন ফ্লোচার্টের মতো) ব্যবহার করেন?

উদাহরণ স্বরূপ:

যদি বিষয়গুলি সম্পর্কিত হয় তবে আমরা কংক্রিট শ্রেণি নির্দিষ্ট করতে চাই না, অ্যাবস্ট্রাক্ট বিবেচনা করুন

যখন ইনস্ট্যান্টেশনটি উত্পন্ন ক্লাসে ছেড়ে যায়, ফ্যাক্টরি বিবেচনা করুন

ক্রমান্বয়ে সামগ্রিক সামগ্রীর উপাদানগুলিকে অ্যাক্সেস করতে হবে, চেষ্টা করুন Iterator

বা অনুরূপ কিছু?



আমি মনে করি যে গুরুত্বটি হ'ল সবচেয়ে উপযুক্ত এবং সামগ্রিক প্যাটার্নটি সনাক্ত করতে এবং চূড়ান্তভাবে অন্যান্য বিকাশকারীদের সাথে এটি যোগাযোগ করতে সক্ষম হতে। যদি তা বোঝা যায়?
কার্ল সাগান

আমি @ পিডিআর এর সাথে একমত আমার কী করা দরকার তা সম্পর্কে আমি চিন্তা করি এবং প্যাটার্নটির নামটি মনে রাখার ফলে ক্লাসের নাম রাখা যায় যাতে অন্যেরাও জানতে পারে যে এটি কী করে।
অ্যামি ব্লাকনশীপ

4
প্রকৃতপক্ষে. এটিকে "আপনি সঠিক নকশাটি কীভাবে চয়ন করবেন?" - এ সহজেই সিদ্ধ করা যেতে পারে। প্রথমত, কোনও সঠিক নকশা নেই, কেবল প্রচুর পরিমাণে ভুল রয়েছে। এর বাইরেও এটি পাইলসের অভিজ্ঞতা নিয়ে আসে (ভুলগুলি বাছাই করে)।
টেলাস্টিন

উত্তর:


109

আজকের কোডিং বিশ্বে একটি মূল ভুল ধারণাটি হ'ল নিদর্শনগুলি ব্লক তৈরি করছে। আপনি AbstractFactoryএখানে একটি এবং Flyweightসেখানে এবং সম্ভবত একটি Singletonওভার নিতে এবং এক্সএমএল এবং প্রেস্টোর সাথে তাদের একসাথে সংযুক্ত করে নিন, আপনি একটি কার্যনির্বাহী অ্যাপ্লিকেশন পেয়েছেন।

তারা না.

হুম, এটি যথেষ্ট বড় ছিল না।

প্যাটার্নগুলি ব্লক তৈরি করছে না

এটা ভাল.

একটি নিদর্শন এমন একটি জিনিস যা আপনি যখন ব্যবহার করেন যখন আপনার মনে হয়েছে যে আপনার কোনও সমস্যা হয়েছে - আপনার প্যাটার্নটি সরবরাহ করে এমন কিছু নমনীয়তা প্রয়োজন, বা আপনি যখন কনফিগারেশনের ফাইলে একটি সামান্য ভাষা তৈরি করছেন তখন আপনি হোঁচট খেয়েছেন এবং আপনি "অপেক্ষা করুন" বলেছিলেন এক মুহুর্ত, থামুন, এটি তার নিজস্ব অনুবাদক যা আমি লিখছি - এটি একটি পরিচিত এবং সমাধান করা সমস্যা, একটি দোভাষী দৃষ্টিকোণ ব্যবহার করুন । "

তবে সেখানে নোট করুন, এটি এমন কিছু যা আপনি আপনার কোডে আবিষ্কার করেন, এমন কিছু নয় যা আপনি শুরু করেছিলেন। জাভাটির নির্মাতারা শুরুতে "ওহ, আমরা পূর্ণসংখ্যায় একটি ফ্লাইওয়েট রাখব" না বলে বরং একটি পারফরম্যান্সের বিষয়টি বুঝতে পেরেছিলেন যে ফ্লাইওয়েটের মাধ্যমে সমাধান করা যেতে পারে ।

এবং এইভাবে, সঠিক প্যাটার্নটি খুঁজে পেতে আপনি ব্যবহার করেন এমন কোনও "ফ্লো চার্ট" নেই। প্যাটার্ন একটি হল সমাধান সমস্যার একটি নির্দিষ্ট ধরনের, যা বার বার সম্মুখীন হয়েছে এবং এটি মূল অংশ একটি প্যাটার্ন মধ্যে পাতিত হয়।

প্যাটার্ন দিয়ে শুরু করা সমাধানের সমাধান এবং সমস্যার সন্ধানের মতো। এটি একটি খারাপ জিনিস: এটি ইঞ্জিনিয়ারিং ও শেষ পর্যন্ত নকশার ক্ষেত্রে জটিলতার দিকে নিয়ে যায় lex

আপনি কোডটি লেখার সময়, যখন আপনি বুঝতে পারবেন যে আপনি একটি কারখানা লিখছেন, তখন আপনি বলতে পারেন "আহা হা! এটি একটি ফ্যাক্টরি যা আমি লিখতে চলেছি" এবং পরের বিটটি দ্রুত লিখে ফ্যাক্টরি প্যাটার্নটি জানার আপনার জ্ঞানটি ব্যবহার করুন কারখানার প্যাটার্নটি পুনরায় আবিষ্কার করার চেষ্টা না করে কোড। তবে আপনি "এখানে একটি ক্লাস পেয়েছি তা দিয়ে শুরু করবেন না, আমি এটির জন্য একটি কারখানা লিখব যাতে এটি নমনীয় হতে পারে" - কারণ এটি হবে না।

এরিক গামার ( গামা, হেলম, জনসন এবং ভিসাইডস এর ) একটি সাক্ষাত্কারের একটি অংশ এখানে দেওয়া হয়েছে : ডিজাইনের প্যাটার্নগুলি কীভাবে ব্যবহার করবেন :

সমস্ত নিদর্শন ব্যবহার করার চেষ্টা করা একটি খারাপ জিনিস, কারণ আপনার সিন্থেটিক ডিজাইনগুলি সমাপ্ত হবে — এমন অনুমানমূলক নকশাগুলি যার নমনীয়তা যার প্রয়োজন নেই। আজকাল সফটওয়্যারটি খুব জটিল। এটি আর কী করা উচিত তা অনুমান করার মতো সামর্থ নেই। আমাদের এটির প্রয়োজনের বিষয়ে সত্যই মনোনিবেশ করা উচিত। সে কারণেই আমি নিদর্শনগুলিতে রিফ্যাক্টরিং পছন্দ করি। লোকেরা শিখতে হবে যে যখন তাদের একটি বিশেষ ধরণের সমস্যা বা কোডের গন্ধ আছে তখন লোকে এই দিনটিকে কল করে, তারা সমাধান খুঁজে পেতে তাদের নিদর্শন সরঞ্জাম বাক্সে যেতে পারে।


"কী ব্যবহার করবেন," যখন সেরা সফ্টওয়্যার ডিজাইন প্যাটার্নের উইকিপিডিয়া পৃষ্ঠার জন্য সর্বোত্তম সহায়তা - "শ্রেণিবদ্ধকরণ এবং তালিকা" বিভাগটি প্রতিটি প্যাটার্নের বিভাগ এবং এটি কী করে তা বর্ণনা করে। কোনও ফ্লোচার্ট নেই; বিবরণটি সম্ভবত সেরা "আপনি কী ব্যবহার করবেন, কখন" এর সংক্ষিপ্ত স্নিপেট হিসাবে পাবেন।

নোট করুন যে আপনি প্রোগ্রামিংয়ের বিভিন্ন ক্ষেত্রে বিভিন্ন নিদর্শন পাবেন। ওয়েব ডিজাইনের নিজস্ব প্যাটার্নগুলির সেট রয়েছে যখন জেইই (ওয়েব ডিজাইন নয়) এর জন্য অন্য একটি নিদর্শন রয়েছে। আর্থিক প্রোগ্রামিংয়ের ধরণগুলি একা একা ইউআই ডিজাইনের জন্য সম্পূর্ণ আলাদা।

সুতরাং তাদের সমস্ত তালিকাভুক্ত করার যে কোনও প্রচেষ্টা অন্তর্নিহিত অসম্পূর্ণ। আপনি এটি সন্ধান করেন, কীভাবে এটি ব্যবহার করবেন তা নির্ধারণ করুন এবং শেষ পর্যন্ত এটি দ্বিতীয় প্রকৃতিতে পরিণত হয় এবং কীভাবে বা কখন আবার এটি ব্যবহার করবেন সে সম্পর্কে আপনাকে চিন্তা করার দরকার নেই (যতক্ষণ না কেউ আপনাকে এটি ব্যাখ্যা করতে বলে)।


11
"সমস্যার সমাধান সমাধানের জন্য" +1 নিদর্শনগুলি জানলে আপনি তাদের যে প্রাকৃতিক আবিষ্কারটি এড়াতে পারবেন যখন এটি সক্রিয় হয় যখন তাদের সমাধানের জন্য ঘটে এমন কোনও সমস্যার সমাধান করতে হবে। এগুলি সম্পর্কে শেখা সম্ভবত আপনার কোডিং এবং ডিজাইনের দক্ষতাগুলিকে উন্নত করতে সহায়তা করবে, ঠিক তেমনভাবে অন্য লোকের কোড পড়া বা প্রোগ্রামিংয়ের অন্য ভাষা শেখার ক্ষেত্রে। তবে আপনার সুনির্দিষ্টভাবে আপনার কোডটিতে সক্রিয়ভাবে "নিদর্শনগুলি ফিট করার" চেষ্টা করা উচিত নয়।
গ্রেগম্যাক

1
আমি বরাবরই বিকাশকারীদের ডিজাইনের নীতিগুলির সাথে প্রথমে পরিচিত হওয়ার জন্য নিদর্শনগুলি দেখতে শুরু করার পরামর্শ দিই। প্রতিটি প্যাটার্ন ডিজাইনের কিছু নীতিগুলির চিত্রণ ('সলাইড' নীতিগুলির সেটটি কেবল একটি উদাহরণ)।
ryscl

2
হতে পারে আপনি একটি ডেকরেটর যোগ করুন এবং আপনি একটি অ্যাপ্লিকেশনটি তৈরি করতে পারেন ;-) অন্যভাবে বলা হয়েছে, আমরা কী তৈরি করছি তা নিয়ে আলোচনার সময় ডিজাইনের নিদর্শনগুলির নামটি একটি নাম, একটি সাধারণ ভাষা। এটি শক্ত বিজয়ী বিকাশের জ্ঞানের একটি স্তরের জন্য সংক্ষিপ্তকরণ hand
EBarr

2
এখানে রেখাগুলির মধ্যে পড়া, ডিজাইনের ধরণটি বেছে নেওয়ার পদক্ষেপগুলি: 1. আপনি যে কোনও কোড নিয়ে কাজ করছেন তা সর্বদা সমালোচনামূলকভাবে ভাবেন 2.. নির্দিষ্ট কোডটিকে একটি বেস সমস্যাটিতে বিমূর্ত করুন ৩. সেই সমস্যাটির কি কোনও সমাধান রয়েছে (ডিজাইনের প্যাটার্ন) )? ৪. হ্যাঁ, আমি কীভাবে আমার সুনির্দিষ্ট ক্ষেত্রে সেই সমাধানটি প্রয়োগ করব? ৫. আপনার নির্দিষ্ট সমস্যার সমাধান তৈরি করতে বিমূর্ত সমস্যার জেনেরিক সমাধানটি মানিয়ে নিন।
ক্রিস

@ ক্রিস যা সত্যই এটির যোগসাজস করে। নিদর্শন ছাড়া এটি লিখতে এবং তারপরে নকশার প্রয়োজন হলে কোডটিকে উপযুক্ত প্যাটার্নে রিফ্যাক্ট করার ক্ষেত্রেও কিছু ভুল নেই ।

18

আমি নিজেকে জিজ্ঞাসা করি:

  1. আমি কোন সমস্যার সমাধান করার চেষ্টা করছি?
  2. কোন সফ্টওয়্যার ডিজাইন প্যাটার্ন (যদি থাকে তবে) একই সমস্যাটিকে খুব ঘনিষ্ঠভাবে সমাধান করে, বা আমার সমস্যা সমাধানের দিকে যৌক্তিক পথ সরবরাহ করে?
  3. প্যাটার্নটি সরবরাহ করে এমন অতিরিক্ত বিমূর্ততা (এবং জটিলতা) আমার কী দরকার, না এটি আমার বিশেষ সমস্যার জন্য ওভার ইঞ্জিনিয়ারিং? নিদর্শন ছাড়াই কী আরও সহজ, আরও দক্ষ উপায়ে সমস্যার সমাধান করা যেতে পারে?

সফ্টওয়্যার প্যাটার্নটি বেছে নেওয়ার প্রক্রিয়া কোনও ডেটা স্ট্রাকচার বেছে নেওয়ার প্রক্রিয়াটির বিপরীতে নয়, একটি ডাটা স্ট্রাকচার বেছে নেওয়ার ক্ষেত্রে আপনি নিজের সমস্যার পারফরম্যান্স এবং মেমরির বৈশিষ্ট্যগুলি মূল্যায়ন করবেন এবং সেই বৈশিষ্ট্যগুলির সাথে সুনির্দিষ্টভাবে ফিট করে এমন ডাটা স্ট্রাকচার বেছে নেবেন।


অবশ্যই, এটি একটি নীলনকশা বা প্রবাহের চার্টের পরিবর্তে অভিজ্ঞতা এবং বিশেষজ্ঞের বিষয়, এবং আমি আপনার সাথে একমত নই। তবে অবশ্যই উন্নত চিট শীটের মতো কিছু ব্যবহারের সম্পূর্ণ সংস্থান থাকতে হবে যেখানে এটি শ্রেণিবদ্ধ করা হয়েছে, অন্তত কারখানার মতো গুরুত্বপূর্ণ এবং ঘন ঘন নিদর্শনগুলির ক্ষেত্রে আমি এ জাতীয় জিনিসটির পরে সর্বাধিক সুপরিচিত প্রস্তাবিত পরিস্থিতিতে রয়েছি am যা আপনি আরও ভাল একটি প্যাটার্ন ব্যবহার করতে হবে। আপনি কি ইন্টারনেটে এমন কোনও উত্স জানেন ?!
Pmpr

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.