আমি যদি সফ্টওয়্যার ডিজাইন প্যাটার্ন ব্যবহার না করি? [বন্ধ]


17

আমি কী ধরণের সমস্যার মুখোমুখি হতে পারি, যদি আমি সফ্টওয়্যার ডিজাইনের প্যাটার্নগুলি ব্যবহার না করি? আপনি কি স্ট্যান্ডার্ড অবজেক্ট-ভিত্তিক কৌশল ব্যবহার করে ডিজাইনের কাছে যাওয়ার সমস্যাগুলি সম্পর্কে বলতে পারেন?


24
বেশ কয়েকটি সফ্টওয়্যার ডিজাইনের প্যাটার্নগুলি মোটামুটি সুস্পষ্ট। আপনি এগুলি ব্যবহার করছেন না তা নিশ্চিত হওয়ার জন্য আপনাকে সেগুলি খুব ভালভাবে জানতে হবে - সম্ভবত আপনি যথেষ্ট পরিমাণে এগুলি ব্যবহার করতে পারেন!
জেমস ম্যাকলিউড

18
@ জেমসএমসিএলওডের সাইড পয়েন্ট হিসাবে, অনেকগুলি "ডিজাইন প্যাটার্নস" খুব সুস্পষ্ট এবং সবাই যেভাবেই করুক। তাহলে আমরা কেন তাদের নাম দেব? যোগাযোগের উদ্দেশ্যে। "আমি এক্স প্যাটার্নটি ব্যবহার করছি" এর অন্য প্রান্তটি যেতে পারে এই আশায় আপনার সমাধানটি ব্যাখ্যা করার চেয়ে অনেক বেশি সিনমেটিক ঘনত্ব রয়েছে "ওহ হ্যাঁ! আমি এটিও করেছি, যদি আমি আমার ভেরিয়েবলগুলি না ডাকি ..."।
ফোশি

6
@ এজেম্যান্সফিল্ড ডিজাইনের নিদর্শনগুলির জন্য আমি অতিমাত্রায় প্রচুর কোড দেখেছি involved
এরিক রেপেন

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

5
"ডিজাইন প্যাটার্নস" একটি অভিধান নয়, কোনও কৌশল নয়।
কাজ ড্রাগন

উত্তর:


76

আপনি বিন্দু মিস করছি।

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

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

সুতরাং আমি দুটি মূল পয়েন্টগুলি তৈরি করার চেষ্টা করছি:

  1. তুমি পারবে না না নকশা নিদর্শন ব্যবহার করুন।
  2. আপনি যে জিনিসগুলি ব্যবহার করছেন তার নামগুলি না জেনে আপনি দলে কাজ করতে অসুবিধা হবে।

12
+1: একেবারে ঠিক। ডিজাইনের নিদর্শনগুলি পরিচিত বা জনপ্রিয় হওয়ার আগে আমি ওও বিকাশ শুরু করেছি। হ্যাঁ, আমরা যেসব জিনিস উদ্ভাবিত মত কারখানা, singletons এবং কিছু যে, যখন আপনি কৌশল প্যাটার্ন মত দেখাচ্ছে একটি উজ্জ্বল আলো সাজানোর মধ্যে এ শাঁখের করাত। বিষয়টি এখন আমি জানি যে নকশার ধরণগুলি আমি জানি কারখানাগুলি ঠিক ছিল তবে আরও ভাল করা যেতে পারে, সিঙ্গেলনগুলি খারাপভাবে করা হয়েছিল এবং স্ট্র্যাটেজি প্যাটার্নটি যা হতে পারত তা যদি আসলে কৌশল কৌশল ছিল তবে আরও ভাল হত ।
বাইনারি ওয়ারিয়ার

3
... নকশার নিদর্শনগুলি সম্পর্কে শেখা, এবং সেগুলি কীভাবে সঠিকভাবে ব্যবহার করতে হবে তা শিখলে আপনি এতটা সময় বাঁচান, আপনি চাকাটি পুনরায় উদ্ভাবন করার চেষ্টা করার সম্ভাবনা কম হবেন, নিজেকে খারাপ ডিজাইনের দিকে নিয়ে যেতে এবং খারাপ সমাধান তৈরির পথে আপনাকে বিরত রাখেন। এটিকে চুষিয়ে নিন এবং নিদর্শনগুলি শিখুন, যখন তারা আপনার পক্ষে কাজ করবেন তখন তাদের ব্যবহার করুন এবং যখন তারা করবেন না তখন সেগুলি ব্যবহার করবেন না।
বাইনারি ওয়ারিয়ার 17

1
এবং এটি নিদর্শন সম্পর্কে আমার দৃষ্টিভঙ্গির সংস্থান করে। আপনি অন্য লোকের সাথে কী করছেন তা জানানোর জন্য তারা দুর্দান্ত সরঞ্জাম। আপনি কখনই এগুলি ঠিক তৈরি করেন না কারণ প্রতিটি সমস্যা আলাদা। তবে এগুলি একটি গিস্ট, দিকনির্দেশনা এবং অনুসরণ করার জন্য একটি মোটামুটি গাইডলাইন and এবং আপনি কীভাবে হেক করছেন তা অন্যকে ব্যাখ্যা করা সহজ করে তোলে।
ম্যাট ডি

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

39

যাঁরা অতীতকে স্মরণ করতে পারেন না তাদের পুনরাবৃত্তি করার জন্য নিন্দা করা হয়।

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

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


10
"প্রতিটি উদ্ধৃতিতে একটি সমান এবং বিপরীত উদ্বৃত্ত থাকে" " "আমরা যদি সত্যই ভবিষ্যতের প্রাপ্য হই তবে আমাদের অতীতকে ছিন্ন করতে হবে।" (ঠিক আছে যে একজন হিটলার ছিলেন তাই সম্ভবত এটিকে উপেক্ষা করা সবচেয়ে ভাল ....)
রাসেল

20

আমি কী ধরণের সমস্যার মুখোমুখি হতে পারি, যদি আমি সফ্টওয়্যার ডিজাইনের প্যাটার্নগুলি ব্যবহার না করি?

আপনার কোনও সফ্টওয়্যার লিখতে না পারার সমস্যা হবে।

ভেরিয়েবলগুলি একটি ডিজাইনের ধরণ।

পদ্ধতিগুলি একটি ডিজাইনের ধরণ।

অপারেটর - সংযোজন, বিয়োগ, ইত্যাদি - একটি ডিজাইনের ধরণ।

বিবৃতি একটি নকশা নিদর্শন।

মানগুলি একটি নকশার ধরণ।

তথ্যসূত্রগুলি একটি নকশার ধরণ।

এক্সপ্রেশন একটি নকশা নিদর্শন।

ক্লাসগুলি একটি ডিজাইনের ধরণ।

...

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

আপনি কি স্ট্যান্ডার্ড অবজেক্ট-ভিত্তিক কৌশল ব্যবহার করে ডিজাইনের কাছে যাওয়ার সমস্যাগুলি সম্পর্কে বলতে পারেন?

এই প্রশ্নের অর্থ কী তা আমার কোনও ধারণা নেই। নকশা নিদর্শন হয় "মান অবজেক্ট ওরিয়েন্টেড কৌশল" - যে যা তাদের করে তোলে নিদর্শন ডিজাইন । একটি নকশা প্যাটার্ন হ'ল একটি নির্দিষ্ট সমস্যা সমাধানের জন্য একটি আদর্শ প্রযুক্তি, বিশেষত (যদিও প্রয়োজনীয় নয় ) কোনও বস্তু-কেন্দ্রিক ভাষায়।


1
The things that you have to learn like "the singleton pattern" and so on are simply patterns that haven't (yet) been baked into whatever language you're using.- এটি (প্রায়) একটি ডিজাইনের প্যাটার্নের সংজ্ঞা - একটি নমনীয় / সহজেই পুনরায় ব্যবহারযোগ্য কোড কনস্ট্রাক্ট যা ভাষায়ই একটি সীমাবদ্ধতা কাটিয়ে উঠতে ব্যবহৃত হয়, এটি অন্যের সাথে যোগাযোগ করা সহজ। একবার এটি ভাষার অংশ হয়ে গেলে এটি আর নকশার ধরণ নয়।
ইজকাটা

1
@ ইজকাটা: সুতরাং আপনার অবস্থানটি কি, বলুন যে সি # তে পর্যবেক্ষক প্যাটার্নটি অসম্ভব কারণ সি # তে পর্যবেক্ষণের ধরণটি ভাষার আকারে ইভেন্ট আকারে তৈরি করেছে? এটি বোকামি. ভাষা-নির্দিষ্ট বিট যা কোনও প্যাটার্নের সাথে প্রাসঙ্গিক তা হ'ল ভাষাতে প্যাটার্নটি প্রয়োগের প্রথাগত উপায়। অবশ্যই নকশার নিদর্শনগুলি এমন ভাষায় ব্যবহার করা যেতে পারে যা তাদের সরাসরি সমর্থন করে; এগুলি সরাসরি তাদের সমর্থন করার পুরো বিষয়টি!
এরিক লিপার্ট

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

@ ইজকাটা: আমি তখন বিভ্রান্ত। আপনি বলেছিলেন যে একবার কোনও নিদর্শন ভাষার অংশ হয়ে গেলে এটি আর কোনও নিদর্শন হয় না। তাহলে "পর্যবেক্ষক প্যাটার্ন" জাভাতে একটি প্যাটার্ন তবে সি # তে কোনও প্যাটার্ন নয় ?
এরিক লিপার্ট

1
অথবা এটিকে অন্যভাবে বলতে গেলে ডিজাইনের প্যাটার্নটি ইংরেজিতে বর্ণিত বর্ণনা ছাড়াই প্রোগ্রামার যা কিছু করতে পারে। আমি নিশ্চিত নই যে আমি সংজ্ঞার সাথে পুরোপুরি একমত, তবে আমি মনে করি এটি আপনি যা বলছেন তা সঠিকভাবে প্রতিফলিত করে এবং অন্তত কোনও প্যাটার্ন হিসাবে বিবেচিত কোন বিষয়গত বিচারের সুবিধা নেই। এটি প্রোগ্রামাররা কী করে তার বিশ্লেষণের একটি সম্পত্তি, এবং অবশ্যই কোনও প্রোগ্রামার পক্ষে এমনভাবে কাজ করা সম্ভব নয় যা বিশ্লেষণ করা যায় না :-)
স্টিভ জেসপ

4

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

এটি বলেছিল, ফ্লাইওয়েটের মূল বিষয়টি কী এবং আমার এটি স্বীকার করতে লজ্জা পাচ্ছে না, আমার কোনও ধারণা নেই! @ # $ (আরও একটি উইকিপিডিয়া প্রবেশের জন্য মন্তব্যগুলি দেখুন যা অনেক সাহায্য করেছে)

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

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

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


2
ফ্লাইওয়েট (ফ্লাইওহিল নয়)। উইকিপিডিয়া নিবন্ধের প্রথম অনুচ্ছেদ (এবং কেবলমাত্র প্রথম অনুচ্ছেদ) পড়ুন এবং তারপরে Integer.valueOf (int) দেখুন এবং বিবেচনা করুন যে এটি কতবার সাধারণ মানগুলির জন্য নতুন পূর্ণসংখ্যা তৈরি করা এড়িয়ে চলে।

2
পছন্দ করুন এটি এটিকে দেখেছি যা আমি দেখেছি তার চেয়ে অনেক ভাল একটি জাহান্নাম। ধন্যবাদ।
এরিক রেপেন

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

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

2

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


0

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


-1

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

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