প্যাটার্ন ভিত্তিক প্রোগ্রামিং কী?


16

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


12
নিদর্শন সঙ্গে আবেশ এক ভাবে বিরোধী প্যাটার্ন
Anto

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

1
আপনি কি গতিশীল ভাষায় প্রোগ্রামিং করছেন? লোকেদের যে নিদর্শনগুলি উল্লেখ করা হয়েছে সেগুলির মধ্যে অনেকগুলি জাভাতে সীমাবদ্ধতা লাভের উপায়।
জনসিপ

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

উত্তর:


19

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

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

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


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

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

9

প্যাটার্নগুলি হ'ল উভয়ই রান্নাঘরের প্রোগ্রামারগুলির ডিস্টিলড নলেজ এবং প্রোগ্রামারারদের যোগাযোগের জন্য একটি দরকারী উপায়।

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

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


2
যোগাযোগের জন্য +1। প্রতিদিনের রুটিনটি খুব মসৃণ হয় যখন প্রত্যেকে একই পৃষ্ঠায় থাকে এবং একটি সাধারণ অভিধান থাকে।
Ampt

3

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

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

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

নিদর্শনগুলি সম্পর্কে কয়েকটি অনলাইন টিউটোরিয়াল দেখুন। উইকিপিডিয়ায় নিবন্ধগুলির একটি ভাল সেট রয়েছে। এই সাইটটিও বেশ ভাল: http://sourcemaking.com/ । আপনি যদি একজন অভিজ্ঞ প্রোগ্রামার হন তবে আপনি দেখতে পাবেন যে আপনি কয়েকটি নিদর্শন জুড়ে এসেছেন, এমনকি কোনও নির্দিষ্ট নাম না জেনেও নিজের মতো করে কিছু বাস্তবায়ন করেছেন।

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

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


1

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

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

তবে আপনি একাধিক প্রকল্পে বৈধ ব্যবহারের মামলাগুলি দেখতে পাওয়ার পরে কোনও প্যাটার্ন প্রয়োগ করা ভাল তাই এটি পুনরায় ব্যবহারের জন্য পরিসংখ্যানগতভাবে বৈধ।

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