গ্যাং অফ ফোর কি "প্যাটার্ন স্পেস" পুরোপুরি ঘুরে দেখেছে?


144

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

সুতরাং আমি প্রত্যাশিত পরিচিত এবং নথিভুক্ত ডিজাইনের ধরণগুলির সংখ্যা উল্লেখযোগ্যভাবে বৃদ্ধি পাবে।

এটা ঘটেনি। জিওএফ বইটি প্রকাশের 20 বছরেরও বেশি পরে, উইকিপিডিয়া নিবন্ধে কেবলমাত্র 12 টি অতিরিক্ত নিদর্শন তালিকাভুক্ত করা হয়েছে, যার বেশিরভাগই মূল বইগুলির তুলনায় খুব কম জনপ্রিয়। (আমি এখানে চুক্তিবদ্ধ নিদর্শনগুলি অন্তর্ভুক্ত করি নি কারণ তারা একটি নির্দিষ্ট বিষয় coverেকে রাখে))

এর কারণ কী?

  • নিদর্শনগুলির GoF সেটটি আসলে আমার চেয়ে বেশি বিস্তৃত?

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

  • অন্যকিছু?


49
প্যাটার্নগুলি সর্বত্র রয়েছে তবে সেগুলি প্রায়শই স্বাদহীন এবং রোবোটিক উপায়ে ব্যবহৃত হয়। যে কারণে, আমি মনে করি, প্যাটার্ন ক্যাটালগ ধারণাটি কম জনপ্রিয় হয়েছিল।
usr ডিরেক্টরির

6
ডিজাইন স্পেস? কেউ এখানে মার্ক গোলাপ জল নামাও!
কর্সিকা

16
মার্টিন ফাউলর ২০০৩ সালে প্রায় ৫০ টি নিদর্শন সংক্রান্ত নথিগুলি এন্টারপ্রাইজ অ্যাপ্লিকেশন আর্কিটেকচারের প্যাটার্নগুলি প্রকাশ করেছিলেন, যার মধ্যে অনেকগুলি আজও যথেষ্ট পুনর্গঠনযোগ্য এবং সু-ব্যবহৃত, যেমন "ডেটা ম্যাপার", "প্লাগইন", "অলস লোড", "পরিষেবা স্তর", ইত্যাদি document
ব্রায়ান রজার্স

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

4
@ ব্র্যাডথোমাস: অবশ্যই, সবচেয়ে আকর্ষণীয় প্রশ্নগুলির মতো লোকদেরও একটি নির্দিষ্ট মতামত থাকে। তবে মতামত কমপক্ষে আংশিক সত্যের উপর ভিত্তি করে রয়েছে এবং আমি এই প্রশ্নের উত্তরে বহু বিস্মৃতকর তথ্য পেয়েছি যা আমার এবং আশা করি অন্যরা তাদের মতামতগুলিতে পুনরায় চিন্তাভাবনা করতে এবং আরও দৃ ones়তর মতামতগুলিতে আসতে সহায়তা করবে।
ফ্রাঙ্ক পাফার

উত্তর:


165

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

কিন্তু তারপর...

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

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

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

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


50
বিতর্কিত মতামত: বিমূর্ত কারখানাটি যাইহোক কোড গন্ধ :)
মেটাফাইট

66
বিতর্কিত মতামত, হতে পারে, তবে একটি ওহ এত গুরুত্বপূর্ণ মতামত প্রকাশ করা। নকশার নিদর্শনগুলি সম্রাটের নতুন পোশাকগুলির উদাহরণ হয়ে ওঠার ঝুঁকিতে রয়েছে, যেখানে আমরা সকলেই সেগুলি কার্যকর কিনা তা নিয়ে প্রশ্ন করতে ভয় পাই। সাবাশ.
ডেভিড আরনো

18
@ মেটাফাইটControversialDesignPatternOnlineOpinionHumanReadableRetortFactory.newInstance().getText();
করসিকা

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

11
@ ক্রিসডব্লু আমি আপনার বক্তব্যটি দেখতে পাচ্ছি না ... যেমন আমি বলেছিলাম যে জিওএফ ওও ত্রুটিগুলি এবং বিশেষত সি ++ 98 ত্রুটিগুলি কাটিয়ে উঠার চেষ্টা করেছিল কারণ এটি তাদের ছোট্ট টাল্কের পাশাপাশি পছন্দ করার ভাষা ছিল। তারা আসলে লিখেছিল: "প্রোগ্রামিং ভাষার পছন্দটি গুরুত্বপূর্ণ কারণ এটি একটির দৃষ্টিভঙ্গিকে প্রভাবিত করে Our
শৌটিহ

108

আমি এই ধারণাটি অনুভব করছি যে এই 23 টি প্যাটার্নগুলি কেবলমাত্র বৃহত্তর কোনও কিছুর একটি ছোট নমুনা হওয়া উচিত যা আমি প্যাটার্ন স্পেস বলতে চাই।

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

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

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


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

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

12
@ জুলেস: আমি বিশ্বাস করি যে আসল জিওএফ বইটি পুনরুক্তি হিসাবে পুনরুক্তিযুক্ত তালিকাভুক্ত করেছে, তবে ভাষাটির বৈশিষ্ট্যে এটির রূপান্তরটি প্রতিটি দূরবর্তী ওওপি ভাষায় মূলত সম্পূর্ণ।
কেভিন

9
@ রাবারডাক কীভাবে ইতিমধ্যে প্যাটার্নটি অপ্রচলিত করে কার্যকর করা হচ্ছে? এটি এখনও ডিজাইন প্যাটার্ন প্রয়োগ করা হচ্ছে। ভাষা বৈশিষ্ট্যের বিভিন্ন সেট প্যাটার্নের বিভিন্ন বাস্তবায়নের দিকে পরিচালিত করতে পারে তবে প্যাটার্নটি নিজেই রয়েছে। প্যাটার্নগুলি যোগাযোগ ব্যবস্থাকে সহজতর করার জন্য রয়েছে যা সাধারণত ব্যবহৃত কৌশলগুলি পুনরায় ব্যবহারের কৌশলগুলিতে নাম দেয়। এক্ষেত্রে, .NET ক্লাসগুলি বলা হয় ObservableSomething<T>যা তাদের উদ্দেশ্য বুঝতে সহজ করে তোলে কারণ এটি সাধারণভাবে পরিচিত প্যাটার্নের নামটি ব্যবহার করে। একটি নিদর্শন হ'ল ধারণা, সঠিক বাস্তবায়ন নয়।
নাল

29
@ জুলস: একটি প্রোগ্রাম কী? পুনরায় ঘটনার সমস্যার সমাধান। ডিজাইনের প্যাটার্ন কী? পুনরায় ঘটনার সমস্যার সমাধান। কেন এটি প্রোগ্রাম নয়? কারণ আমরা এটিকে প্রোগ্রাম হিসাবে প্রকাশ করতে পারি না। এরগো, একটি ডিজাইনের প্যাটার্ন হ'ল একটি পুনরায় সংঘটিত সমস্যার সমাধান যা একটি প্রোগ্রাম হওয়া উচিত, এটি একটি ডিজাইন প্যাটার্ন নয়, তবে একটি প্রোগ্রাম হতে পারে না, কারণ ভাষাটি প্রোগ্রামটি প্রকাশের জন্য যথেষ্ট মত প্রকাশ করে না। উদাহরণ: খুব বেশি দিন আগে নয়, "সাব্রুটাইন কল" ডিজাইনের প্যাটার্ন ছিল! আজকাল, এটি একটি ভাষা বৈশিষ্ট্য।
Jörg ডব্লু মিটাগ

61

আমি মনে করি যে এখানে তিনটি কারণ কার্যকর হয়।

সমালোচনামূলক ভর অভাব

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

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

এটিকে আরও কৌতুকপূর্ণভাবে বলতে: নকশার ধরণগুলি বিশেষত ব্যর্থ হয়েছে কারণ তারা ব্যর্থ হয়েছিল।

অনেকগুলি প্যাটার্নস

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

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

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

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

আগ্রহের অভাব

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

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

সারাংশ

নকশার ধরণগুলি ব্যর্থ হয়েছে কারণ:

  1. তারা সমালোচনামূলক ভর অর্জন করতে ব্যর্থ হয়েছে।
  2. স্বচ্ছতার গ্যারান্টি দিতে নিদর্শনগুলির মধ্যে পার্থক্যটি অপর্যাপ্ত।
  3. তারা বেশিরভাগই কোডের কিছু অংশ নিয়ে কাজ করেছিল, সত্যিই যাইহোক, কেউই যত্ন করে না।

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

5
খুব ভাল উত্তর।
রবার্ট হার্ভে

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

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

2
@ মিম্বিস: আমি বেশিরভাগ হ্যাঁ বলব, তারা ব্যর্থ হয়েছে। আমি বলব যে বেশিরভাগ প্রোগ্রামাররা স্বীকৃত অর্ধ ডজনেরও কম নিদর্শন রয়েছে। সিঙ্গলটন সুপরিচিত, তবে বাস্তবে কেবল বিরল প্রযোজ্য (সেরা)। নাম "ফ্যাক্টরী" অনেক আগে "নিদর্শন" (দেরি 1970 বা এর ব্যবহার মনে রাখবেন বরাবর এসেছেন সাধারণ ব্যবহারের মধ্যে ছিল খুব তাড়াতাড়ি 1980 এর)। প্যাটার্নগুলি একটি শব্দভাণ্ডার গঠনের কথা ছিল, তবে বর্তমানে তারা গ্রীক ভাষায় আমার শব্দভাণ্ডারের মতো প্রায় - নিজেকে (নিজেকে সম্ভবত) সমস্যায় ফেলতে যথেষ্ট, তবে মেনুটি অর্ডার করার পক্ষে যথেষ্ট নয়, অর্থপূর্ণ কথোপকথনটি খুব কম রাখা উচিত।
জেরি কফিন

35

প্যাটার্নগুলি বিমূর্ততা নিখোঁজ রয়েছে, সাধারণ নিদর্শনগুলি বিমূর্ত করা হয়, জটিল নিদর্শনগুলি স্বীকৃত হয় না, সুতরাং নিদর্শনগুলি কার্যকর হয় না (কয়েকটি উচ্চ স্তরেরগুলি বাদে)।

আমি মনে করি পল গ্রাহাম এটি সেরা বলেছেন:

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

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


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

2
@ ফ্র্যাঙ্ক আমি মনে করি যে পিজি কোথা থেকে আসছে তা হ'ল একটি প্যাটার্নটি এমন কোনও অন্তর্নিহিত ফাংশনের 'গন্ধ' যা আপনি বিমূর্ত করতে পারেন, এবং আপনি এটি কোনও ফাংশনে বা ম্যাক্রোতে টানেননি এটিই পুনরাবৃত্তি ঘটায় - যেমন যদি আপনার কোনও String.replaceফাংশন না থাকে , আপনি এটি একটি নিদর্শন হিসাবে পপিংয়ের কল্পনা করতে পারেন, তবে এটি পুনরায় প্রয়োগের চেয়ে চালিয়ে যাওয়ার চেয়ে একবার এটি লিখে নেওয়া ভাল। সম্মত হন যে আপনি যদি এই জিনিসগুলির যথাযথ নাম না রাখেন এটি পড়তে অসুবিধা হবে, তবে যখন এটি সঠিকভাবে সম্পন্ন হবে তখন কোড আরও getOrElse
ঘোষিতভাবে আইএমও পড়বে

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

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

3
গ্রাহামের উক্তিটির মূল অংশটি হ'ল আমি নিজে হাতে লেখার দরকার এমন কিছু ম্যাক্রোর বিস্তৃতি নিজে হাতে উত্পন্ন করছি। এটি বিশেষত লিস্প ম্যাক্রোসকে উল্লেখ করে। ম্যাক্রো ব্যতীত কেবলমাত্র এত বিমূর্ততা করা সম্ভব।
বার্ট ভ্যান নাইরোপ

13

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


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

2
আমার ধারণা এটি 10 ​​টি আদেশের মতো। উত্সটি মাত্র 2
চর্চা

9
হ্যাঁ, এবং এটি কখনও কখনও মনে হয় আধুনিক সফ্টওয়্যার ইঞ্জিনিয়ারিং GoF এর সাথে সম্পর্কিত যেমন মধ্যযুগীয় শিক্ষাব্রতী এরিস্টটলের সাথে সম্পর্কিত।
ফ্রাঙ্ক পাফার

11

এমন কিছু যা অন্যান্য উত্তরগুলির মধ্যে উল্লেখ করা যায় তা প্রাসঙ্গিক:

গতিশীল টাইপযুক্ত ভাষার উত্থান।

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

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


10

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

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

তারা কি হয়নি সাধা, যা দরকারী ছিল, দুটি জিনিস ছিল:

  • ভিজিটর প্যাটার্নের মতো কয়েকটি দরকারী কৌশল প্রকাশ করুন
  • নামগুলির একটি স্ট্যান্ডার্ড সেট সরবরাহ করুন যা বেশিরভাগভাবে আটকে আছে: কারখানা, অ্যাডাপ্টার, আইট্রেটার, ... আপনি যদি আগেই নকশাকৃত করর্বা দেখেন, তবে আপনি এর মান দেখতে পাবেন: সমস্ত ধরণের 'বিদেশী' নাম যেমন ইন্টারসেপ্টারের মতো , চাকর, দালাল, ...

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


এটি এখনও কি দুঃখজনক হয়েছে যদি এর ফলে এই আলোচনার ফলাফল হয় (এবং যা কিছু অন্তর্ভুক্ত রয়েছে)
r3wt

1
@ r3wt সিকুইটার আমি যা বলেছি তা দুঃখজনক যে প্রতিটি নতুন বিকাশের কথা ভাবার জন্য আইটি শিল্পের দুর্বলতা হচ্ছে পৌরাণিক রৌপ্য বুলেট এবং ঘটনাক্রমে তার নিজস্ব কিছু পূর্ববর্তী কাজ আবর্জনার জন্য।
ব্যবহারকারী 207421

2
অন্য দৃষ্টিকোণ থেকে এটি তাকান। আপনার উত্তরটি পড়ার জন্য, ভুলটির পুনরাবৃত্তি না শিখতে আমার পক্ষে দুঃখ নেই। সুতরাং আপনি যা মঞ্জুর করেন তা আসলে অন্যের পক্ষে খুব কার্যকর।
r3wt

6

পিএলওপি ( প্যাটার্ন ল্যাঙ্গুয়েজ অফ প্রোগ্রাম ডিজাইনের ) শিরোনামে বেশ কয়েকটি বই ছিল যা প্রতিটি বার্ষিক সম্মেলনে উপস্থাপিত কাগজের একটি নৃতত্ত্ব ।

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

সুতরাং না, জিওএফের সংগ্রহটি সম্পূর্ণরূপে ছিল না এবং লোকেদের সংগ্রহ / বর্ণনা / আবিষ্কার / আবিষ্কার করতে লোকদের অনুপ্রেরণা / অনুপ্রাণিত করে।

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


হ্যাঁ, আপনি যদি শত শত নিদর্শনগুলির সন্ধান করেন তবে আপনি তার বর্ণনা পেতে পারেন। তবে এগুলির কোনওটিই জিওএফ এর মতো জনপ্রিয় বলে মনে হচ্ছে না।
ফ্র্যাঙ্ক পাফার

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

1
@ ফ্র্যাঙ্কপুফার আমি বাজি দিচ্ছি যে নামগুলি না থাকলেও নিদর্শনগুলি জনপ্রিয় are
dcorking

5

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

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

তবে আমরা এগুলিকে কেবল একটি প্রযুক্তি দিয়ে ব্যবহার করার কারণে এগুলি "ডিজাইনের ধরণ" হিসাবে ভাবি না।

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


3

এখানে এরিখ গামার সাথে একটি সাক্ষাত্কার দেওয়া হয়েছে যেখানে তিনি তাদের নিদর্শনগুলির নির্বাচন এবং তারা আজ কী পরিবর্তন করতে চান তা প্রতিফলিত করেছেন (আজ 10 বছর আগের মতো হাহা)।

http://www.informit.com/articles/article.aspx?p=1404056

ল্যারি: আপনি কীভাবে "ডিজাইনের প্যাটার্নগুলি" প্রতিস্থাপন করবেন?

এরিচ: আমরা এই অনুশীলনটি ২০০৫ সালে করেছি our আমাদের সেশনের কয়েকটি নোট এখানে। আমরা খুঁজে পেয়েছি যে অবজেক্ট-ওরিয়েন্টেড ডিজাইনের নীতিগুলি এবং এরপরে বেশিরভাগ প্যাটার্নগুলি পরিবর্তিত হয়নি। আমরা শ্রেণিবিন্যাস পরিবর্তন করতে, কিছু নতুন সদস্য যুক্ত করতে এবং কিছু নিদর্শনগুলি ড্রপ করতে চেয়েছিলাম। বেশিরভাগ আলোচনার বিষয়বস্তু পরিবর্তন এবং বিশেষত কোন প্যাটার্নটি বাদ দেওয়া উচিত তা নিয়ে ছিল।

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

সুতরাং এখানে কিছু পরিবর্তন:

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

আমাকে কেন উড়িয়ে দিচ্ছেন? দয়া করে একটি মন্তব্যে ব্যাখ্যা করুন যাতে আমি উত্তরটি উন্নত করতে পারি।
akuhn

3

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

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


ভাল বক্তব্য, তবে আমি সন্দেহ করি যে অনেকে বইটি (বা সাধারণভাবে নিদর্শনগুলি) সেভাবে বুঝতে পারে।
ফ্র্যাঙ্ক পাফার

@ lud1977 যদি আমরা ইতিহাস রেকর্ড না করি তবে ভবিষ্যতকে কী একই ফাঁদে পড়তে বাধা দেয়? সুতরাং, এটি সর্বদা রেকর্ড করা আবশ্যক। এটি অর্থহীন নয়।
r3wt

2

সুতরাং আমি প্রত্যাশিত পরিচিত এবং নথিভুক্ত ডিজাইনের ধরণগুলির সংখ্যা উল্লেখযোগ্যভাবে বৃদ্ধি পাবে।

এটা ঘটেনি। জিওএফ বইটি প্রকাশের 20 বছরেরও বেশি পরে, উইকিপিডিয়া নিবন্ধে কেবলমাত্র 12 টি অতিরিক্ত নিদর্শন তালিকাভুক্ত করা হয়েছে, যার বেশিরভাগই মূল বইগুলির তুলনায় খুব কম জনপ্রিয়। (আমি এখানে চুক্তিবদ্ধ নিদর্শনগুলি অন্তর্ভুক্ত করি নি কারণ তারা একটি নির্দিষ্ট বিষয় coverেকে রাখে))

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

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


-1

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

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

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

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


-2

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

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