কোন ডিজাইনের ধরণগুলি সবচেয়ে খারাপ বা সংকীর্ণভাবে সংজ্ঞায়িত করা হয়েছে? [বন্ধ]


28

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

সুতরাং, আমার প্রশ্নটি আমার ভবিষ্যতের ক্যারিয়ারের বিষয়ে এবং ম্যানেজারের ধরণের সম্পর্কে আমার উত্তর সম্পর্কে এলোমেলো নিদর্শন-নাম ছুঁড়ে দেওয়া সম্পর্কিত:

আপনি কোন ডিজাইনের নিদর্শনগুলি ব্যবহার করেছেন, যা আপনাকে সামগ্রিকভাবে পিছনে ফেলেছে? কোনটি সবচেয়ে খারাপ ডিজাইনের নিদর্শন , সেগুলি যেগুলির মধ্যে একটি একক পরিস্থিতি বিবেচনা করে সেগুলি বাদ দিয়ে আপনার বিবেচনা করা উচিত (পড়ুন: কোন নকশার নিদর্শনগুলি খুব সঙ্কুচিতভাবে সংজ্ঞায়িত করা হয়েছে)? (এটি এমন যে আমি ডিজাইনের ধরণগুলি ব্যবহারে লোকেরা কী কী উত্সাহিত করেছিল তা দেখতে আমাজনের সামগ্রিক ভাল পণ্যের নেতিবাচক পর্যালোচনাগুলি সন্ধান করছিলাম)) এবং আমি এখানে অ্যান্টি-প্যাটার্নগুলি নিয়ে কথা বলছি না, তবে প্যাটার্নগুলি সম্পর্কে যা সাধারণত হিসাবে ভাবা হয় "ভাল" নিদর্শন।

সম্পাদনা: কিছু উত্তর হিসাবে, সমস্যাটি প্রায়শই দেখা যায় যে নিদর্শনগুলি "খারাপ" নয় তবে "ভুল ব্যবহৃত হয়েছে"। যদি আপনি নিদর্শনগুলি জানেন, যেগুলি প্রায়শই অপব্যবহার করা হয় বা ব্যবহার করা এমনকি কঠিন হয় তবে সেগুলি একটি উত্তর হিসাবে মাপসই হয়।


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

'গ্যাং অফ ফোর' বইয়ের সমস্তগুলি।
মাইলস রাউট

উত্তর:


40

আমি খারাপ নিদর্শনগুলিতে বিশ্বাস করি না, আমি বিশ্বাস করি যে নিদর্শনগুলি খারাপভাবে প্রয়োগ করা যেতে পারে!

  • আইএমএইচও সিঙ্গলটন হ'ল সবচেয়ে আপত্তিজনক এবং সবচেয়ে বেশি ভুলভাবে প্রয়োগ করা প্যাটার্ন। লোকেরা মনে হয় যে একটি সিঙ্গলটন রোগ হয়েছে এবং বিকল্প বিবেচনা না করে সর্বত্র সিলেটটনের সম্ভাবনা দেখা শুরু করে।
  • আইএমএইচও দর্শনার্থীর প্যাটার্নটির সর্বাধিক সংকীর্ণ ব্যবহার রয়েছে এবং প্রায় কখনও যুক্ত হওয়া জটিলতা ন্যায়সঙ্গত হতে পারে না be একটি সুন্দর পিডিএফ অর্জিত হতে পারে এখানে । সত্যিকার অর্থে যখন আপনার সমস্ত তথ্য আগেই সমস্ত উপায় না জেনে ডেটা স্ট্রাকচারে বিভিন্ন অপারেশন করার সময় আপনি জানেন যে কোনও ডেটা স্ট্রাকচারটি বিচ্যুত হতে চলেছে, তখন দর্শকের প্যাটার্নটিকে লড়াইয়ের সুযোগ দিন। যদিও এটি বেশ সুন্দর :)

এই উত্তরের জন্য আমি কেবল জিওএফ নিদর্শন বিবেচনা করেছি। এগুলি বিবেচনায় নেওয়ার জন্য আমি সমস্ত সম্ভাব্য নিদর্শনগুলি ভালভাবে জানি না।


আমি দর্শকদের জন্য খুব কম ব্যবহার দেখতে পাচ্ছি। সিলেটলেটস ... আমাকে আরম্ভ করবেন না। পরিস্থিতি যদি কারও জন্য উপযুক্ত না হয় তবে এটি ব্যবহার করবেন না।
মাইকেল কে

1
দর্শনার্থীর জন্য খুব কম ব্যবহার থাকতে পারে, তবে যখন এটি উপস্থিত থাকে অবশ্যই সমস্যাগুলি সমাধান করে। আমার বোধগম্যতা হল যে ভিস্টার লিনকুইয়ের জন্য প্রয়োজনীয়।
কোয়ান্টিন-স্টারিন

12
সফ্টওয়্যার প্রোগ্রামে সাইক্লোমেটিক জটিলতা হ্রাস (বা অপসারণ) করার জন্য ভিজিটর প্যাটার্নটি গুরুত্বপূর্ণ । যে কোনও সময় আপনার যদি / অন্য গাছ বা একটি স্যুইচ স্টেটমেন্ট থাকে, বৈষম্যগুলি উচ্চতর যে কোনও ভিজিটর তাদের প্রতিস্থাপন করতে পারে, গ্যারান্টিযুক্ত এক্সিকিউশন এবং সংকলন-সময় পরীক্ষা করে offering ভিজিটর আমার জানা সবচেয়ে শক্তিশালী নিদর্শনগুলির মধ্যে একটি এবং আমরা এটিকে দুর্দান্ত প্রভাব সহ নিয়মিত ব্যবহার করি। এটি পাশাপাশি স্বপ্নের পরীক্ষা করে তোলে।
লেস হ্যাজলউড

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

14

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

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

অবশেষে, আমাদের বেশিরভাগই এই পর্যায়ে চলে যায় এবং কীভাবে প্রকৃত সমস্যাগুলি সমাধানের জন্য নিদর্শনগুলি ব্যবহার করতে হয় তা শিখতে শুরু করে, নিজের স্বার্থে নয়। প্যাটার্নগুলির দাম রয়েছে, যা জটিলতা যুক্ত হয় এবং কোনও নির্দিষ্ট প্যাটার্ন প্রয়োগ করা কেবল তখনই ন্যায়সঙ্গত হয় যখন এটি সিস্টেমের অন্য কোনও অংশকে সহজতর করতে সহায়তা করে যুক্ত জটিলতার জন্য অর্থ প্রদান করে, এইভাবে কোড / কনফিগারেশন সামগ্রিকভাবে বুঝতে এবং বজায় রাখা সহজ করে তোলে। যদি এটি না হয়, তবে প্রায়শই নিদর্শনগুলি থেকে দূরে থাকাই ভাল is


একেবারে। প্যাটার্নগুলি ভাল বা মন্দ নয়, সেগুলি ভালভাবে প্রয়োগ করা হয় বা ভুলভাবে প্রয়োগ করা হয়।

আমি বরং লোকদের আমি যেভাবে শিখেছি তা শিখিয়েছি: ও ও প্রথমে, বস্তুর কীভাবে সম্পর্ক রয়েছে তা বোঝা এবং তারপরে নিদর্শনগুলির নামগুলি শিখতে। যা করা দরকার তার চেয়ে নিদর্শনগুলির দিক দিয়ে চিন্তা করা খুব সহজ। এগুলি একটি যোগাযোগের সরঞ্জাম।
মাইকেল কে

প্যাটার্নগুলি যোগাযোগের একটি মাধ্যম, কোনও প্রেসক্রিপটিভ তালিকা নয়। আপনি যদি কোনও নকশাকে মাথায় রেখে শুরু করেন তবে আপনি এটির ভুল ব্যবহার করছেন। আপনি যদি এটি আপনার নকশা এক, অথবা এক ইঙ্গিত, তারপর, প্যাটার্ন ক্যাটালগ সাহায্য করতে পারেন আপনি কি কি প্রয়োজন হতে পারে বুঝতে।
রব ক্রফোর্ড

14

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

অন্যান্য ব্যক্তি ইতিমধ্যে আমার ব্যক্তিগত ঘৃণার সাথে সিঙ্গলটনের মতো প্রকাশ করেছেন, তাই আমি এখানে এগুলি প্রসারিত করতে যাচ্ছি না।


10

একক। এটি জিওএফ নিদর্শনগুলির মধ্যে রয়েছে যা এখন প্রায়শই অ্যান্টি-প্যাটার্ন হিসাবে পরিচিত। এর অন্যতম কারণ হ'ল সিঙ্গলটন কোডকে পরীক্ষা করা আরও কঠিন করে তোলে।


4
সিঙ্গেলটন প্যাটার্নে অনেকগুলি মৌলিক ত্রুটি রয়েছে, বেশিরভাগই স্টিভ ইয়েগের এই নিবন্ধে খুব ভালভাবে ফুটিয়ে
তোলা হয়েছে

স্লোমোজো: চমৎকার নিবন্ধ। আমি এখন থেকে 'প্যাটার্ন আহাস্মক' একে ডাকতে যাচ্ছি:-)
কেউই

2
হ্যাঁ, কারণ কিছু বোকা কোনও প্যাটার্নের অপব্যবহার করে এবং ওও সম্পর্কে যা ঘটে তার পক্ষে নৌকাকে পুরোপুরি মিস করে (তিনি যে সমস্ত ম্যানেজার ক্লাস নিয়ে এসেছিলেন) তার বিচার করা, অবশ্যই এটি প্যাটার্নটির দোষ এবং বিকাশকারীদের নয়।
ডাঙ্ক

কেন সবাই সিঙ্গলটনের সাধারণ (এবং সমস্যাযুক্ত) বাস্তবায়ন সিঙ্গেলনের প্যাটার্নের সাথে যুক্ত করে? একটি প্রায় সর্বদা খারাপ, অন্যটি নয়।
কোয়ান্টিন-স্টারিন

1
@ কিউস> সিঙ্গেলটন গুরুত্বপূর্ণ বাস্তবায়ন সংক্রান্ত সমস্যাগুলি তৈরি করেছে (বিশেষত থ্রেডিং সহ)। এটি ইতিমধ্যে একটি খারাপ বিষয়। তবে, আপনি আরও জানতে পারবেন যে ক্লাসটি কীভাবে মামলা করা হয়, এবং কীভাবে এটি কাজ করে না সে সম্পর্কে সিঙ্গেলটন হ'ল একটি নিদর্শন। ক্লাসটি কীভাবে ব্যবহৃত হয় তা ক্লাসটি ব্যবহার করে কোড দ্বারা পরিচালনা করা উচিত, সুতরাং সিঙ্গেলটন উদ্বেগের পৃথকীকরণের একটি বিরতি।
ডেডালনিক্স

7

যদি আপনি নিদর্শনগুলি জানেন, যেগুলি প্রায়শই অপব্যবহার করা হয় বা ব্যবহার করা এমনকি কঠিন হয় তবে সেগুলি একটি উত্তর হিসাবে মাপসই হয়।

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

এবং অবশ্যই, এমভিভিএম জাহান্নাম হিসাবে কঠিন, এবং ছোট স্বল্পমেয়াদী প্রকল্পগুলির জন্য এটি উপযুক্ত নয়।

ডঃ ডব্লিউপিএফ তাঁর এমভি-পু নিবন্ধে এ নিয়ে একটি মজার পোস্ট করেছিলেন ।


@ আক্কু: আপনি এটি অবশ্যই ব্যবহার করবেন তা অবশ্যই অবশ্যই জানা উচিত, সুতরাং এটি আপনার প্রকল্পের জন্য উপযুক্ত কিনা তা আপনি সিদ্ধান্ত নিতে পারেন। সুতরাং হ্যাঁ, এটি ডাব্লুপিএফ উন্নয়নের জন্য প্রয়োজনীয় এবং খুব দরকারী।
স্টিভেন জিউরিস 14

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

5

জিওএফ বইয়ের কয়েকটি নিদর্শনগুলি সি ++ - সুনির্দিষ্ট, সেই দিক থেকে প্রতিচ্ছবি সহ ভাষাগুলিতে এগুলি কম প্রয়োগ হয়, যেমন জাভাতে প্রোটোটাইপ প্যাটার্ন কম তাত্পর্যপূর্ণ।

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


1
বেশিরভাগ জিওএফ কেবল স্ট্যাটিক ক্লাস ভিত্তিক ওওপি-তে প্রযোজ্য। সেই ধরণের ভাষা থেকে এতটুকু বিপথগামী এবং বইটি কেবল একটি বিনোদন উপাখ্যান হয়ে যায়।
জাভিয়ের

5

আমি যেটির প্রায়শই অনুশোচনা করি (যদিও সবচেয়ে তীব্রভাবে নয়): যখন আমার সবেমাত্র একটি ফাংশন তৈরি করা উচিত ছিল তবে আমি একটি ওওপি সমাধানটি কার্যকর করেছিলাম।


1
কেন? কিসের জন্য আফসোস করল? আপনার উত্তরটি প্রসারিত করুন এবং আপনার অভিজ্ঞতা যুক্ত করুন।
ওয়াল্টার

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

2
KISS বোঝায় আপনি প্রথমে এটি একটি ফাংশন তৈরি করুন, তারপরে প্রয়োজনে কোনও শ্রেণীর রিফ্যাক্টর।
ইভা

5

কারখানার। আমি কোডটি এটি প্রয়োগ করে দেখেছি যা কেবল একটি প্রকার তৈরি করে। এটি সম্পূর্ণ অকেজো কোড আইএমও। এটি অনলাইনে উদাহরণগুলির অনেকগুলি সম্পূর্ণরূপে স্বীকৃত তা সাহায্য করে না। পিজা কারখানা?

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


হ্যাঁ, পিজা কারখানা, হেড ফার্স্ট ডিজাইন প্যাটার্নের জন্য ধন্যবাদ
Ni

2

একক বস্তু

আমি সিঙ্গেলটন সম্পর্কে অন্যদের সাথে একমত। আপনি কখনই সেগুলি ব্যবহার করবেন না এমন নয়, কেবল এটি খুব কম ক্ষেত্রে সীমাবদ্ধ হওয়া উচিত। এগুলি অনেক সময় অলস গ্লোবাল হিসাবে ব্যবহৃত হয়।

থ্রেড-সুরক্ষা সিঙ্গেলনের একটি সমস্যা issue ব্যতিক্রম হ্যান্ডলিং অন্যটি - যদি সিঙ্গলটন সঠিকভাবে তৈরি করতে ব্যর্থ হয় - আপনি সর্বদা জানেন না যে আপনি ত্রুটিটি নিরাপদে ধরতে পারবেন কিনা, বিশেষত যদি এটি "প্রধানের আগে" তৈরি করা বস্তুর মধ্যে একটি ছিল। এবং তারপরে পরিষ্কার করার বিষয়টি রয়েছে।

আমি একটি সিঙ্গলটন ব্যবহার করতে পছন্দ করি এবং অন্য একটি "ওয়ানাবে" সিলেলেটনগুলিকে আপনার "সাবস্ক্রাইব" করতে চাই। আমার সর্বাধিক প্রচলিত সিঙ্গেলটন ব্যবহার হ'ল "চিৎকার ইভেন্ট" হ্যান্ডলিং: আপনি কেবল "বিশ্বের কাছে সম্প্রচার" করেছেন যে একটি ইভেন্ট হয়েছে এবং যে কেউ শুনবে যে ইভেন্টটি পরিচালনা করবে তা তাই করে। এইভাবে আপনি ঘটনাসমূহকে যা শোনাচ্ছে তা দিয়ে দ্বিগুণ হন। (লগিং, সংকেত ইত্যাদি)

পরিদর্শক

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

উভয় দিকের বর্ধনের অনুমতি দেওয়া সম্ভব হলেও অগোছালো, তবে এটি সম্পূর্ণরূপে তার নিয়মিত আকারে দর্শকের প্যাটার্নটি ব্যবহার করে না। এর জন্য সর্বাধিক প্রচলিত অ্যাপ্লিকেশন হ'ল প্রিন্টিং অবজেক্টস: আপনার কাছে বিভিন্ন জিনিস মুদ্রণের বিভিন্ন উপায় এবং বিভিন্ন অবজেক্ট মুদ্রণ করা দরকার। আপনার উভয় দিকেই এটি প্রসারিত করতে সক্ষম হওয়া উচিত। (মুদ্রণ বলতে কোনও প্রকারের বস্তুকে স্ট্রিমে রূপান্তরিত করা হয়: একটি ফাইলে জমা / কনসোল / জিইউআইতে লিখন .. ইত্যাদি।

(দ্রষ্টব্য: আপনার এটি ডকুমেন্ট-ভিউ আর্কিটেকচারের সাথে বিভ্রান্ত করা উচিত নয়, যা কিছুটা আলাদা প্যাটার্ন)।


2
আপনার সমাধান পুরানো এটি জিনিস যুক্তি decouples ব্যবহার করে। বিশেষত, আপনি একটি ইভেন্ট পোস্ট করেন এবং অন্য কোনও লোক ইভেন্টটি পরিচালনা করে এবং এটি লগ করে। এটি একটি ভাল জিনিস, কারণ সবাই হতাশ! ভুল! আমি এটা করতাম, কী রাজকীয় যন্ত্রণায় পরিণত হয়েছিল। আমি বুঝতে পেরেছি যে আমি যদি কিছু লগইন করতে চাই তবে আমি স্পষ্টভাবে এই সঠিক জিনিসটি লগ করতে চাই, ঠিক এখনই কোডটিতে এটি ঘটেছে এমন বিন্দুতে। ল্যান্ড করা উচিত কি অন্য কোনও অবজেক্ট না, সম্ভাব্য অন্যান্য ইভেন্টগুলি অন্যান্য হ্যান্ডলারের দ্বারা আন্তঃসংযোগযুক্ত, এটি এমনকি লগড থাকলেও। এটি কনভলটেড ওভারডিসাইন ছাড়া কিছুই নয়।
ডাঙ্ক

2

আমি মনে করি আরও জটিল কিছু নিদর্শনগুলির সাথে সমস্যাটি হ'ল তাদের মধ্যে এতগুলি প্রকরণ রয়েছে যে তারা যোগাযোগ ডিভাইস হিসাবে তাদের মানটির অনেক বেশি হারায়।

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


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

1

কোনও খারাপ নিদর্শন নেই কেবল খারাপ লোক।

আমি অনেক সহজেই পঠনযোগ্য কোডের উত্তরাধিকারী হয়েছি যা কিছু পরিষ্কার করে তবে কিছুটা ভার্জোজ বা না (ক্রু অশুভ ভিলিয়ান সংগীত) এর কিছু মিশুকের ম্যাশের তুলনায় পুনরায় ব্যবহারযোগ্য (হাঁফ!) InheritAbstractTemplateFaucetSink<Kitchen>

পুনরায় ব্যবহারযোগ্য কোডটি দুর্দান্ত! সম্ভাবনা হ'ল আপনি সেই কোডটি লিখছেন না যা আবার ব্যবহার করা হবে বা অন্য অ্যাপ্লিকেশনটির জন্য একযোগ যুক্তি পুনরায় লেখার জন্য আপনাকে অন্য কোনও অ্যাপ্লিকেশনের কোডটি পুনরায় ব্যবহার করার পাগল প্রয়াসের চেয়ে কম সময় লাগবে।

আরও পড়ার জন্য ক্র্যাকটি পোস্টিক্স শিরোনাম বা ক্লাইবগুলির বুদ্ধিমান বাস্তবায়নে সি কোডের কিছুটি খুলুন এবং প্যাটার্নটি খেলুন। এই কোডটি বিশ্বের কয়েকজন স্মার্ট এবং ডেডিকেটেড প্রোগ্রামার দ্বারা লিখেছিল। আপনি কি জানেন যে আপনি কতটি বিমূর্ত কারখানার প্যাটার্নগুলি দেখতে যাচ্ছেন? ... না! আরও ভাল সম্ভাবনা হ'ল যদি আপনি যা চলছে তার অন্যান্য অংশগুলি বুঝতে পারছেন তবে আপনি যুক্তিটি বুঝতে এবং আবিষ্কার করতে খুব সহজ পাবেন।

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

এটির সাথে আমি আপনাকে কম্পিউটার বিজ্ঞানের সবচেয়ে ভাল (প্রাসঙ্গিক) উদ্ধৃতি দিয়ে চলে যাব।

" সফ্টওয়্যার ডিজাইন তৈরির দুটি উপায় রয়েছে: একটি উপায় হ'ল এটিকে এত সহজ করা যে স্পষ্টতই কোনও ঘাটতি নেই এবং অন্য উপায়টি এটিকে এত জটিল করে তোলা হয়েছে যে কোনও স্পষ্ট ঘাটতি নেই are প্রথম পদ্ধতিটি আরও বেশি কঠিন । "

  • টনি হোয়ার (কুইকোর্টের উদ্ভাবক, আধুনিক ওএস ডিজাইনের জনক, হোয়ের যুক্তির স্রষ্টা এবং টুরিং অ্যাওয়ার্ড প্রাপক)

0

আমি অবশ্যই সম্মত হই যে বেশিরভাগ নিদর্শনগুলির জন্য একটি সময় রয়েছে এবং আপনি অনেকগুলি নিদর্শনকে অপব্যবহার করতে পারেন। আমি জানি আমি অতীতে যেটিকে সবচেয়ে বেশি ব্যবহার করেছি সে হ'ল অ্যাবস্ট্রাক্ট টেম্পলেট প্যাটার্ন। এটি সম্পূর্ণ পরিমাণে গৃহীত এটি এএসপি.এনইটি ওয়েবফর্ম হিসাবে পরিচিত।

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