প্রোগ্রামিং ডিজাইনের ধরণগুলি ধরতে পারে না


16

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

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

আমি কি এই বিষয়ে উচ্চতর শিক্ষার সন্ধান করব? এই বিষয়ে আমার কি পরামর্শদাতার দরকার আছে? আমি কি বোকা? এটি কি আসলেই বুঝতে অসুবিধা হয়?


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

3
প্রকল্পের আকার এছাড়াও পাশাপাশি একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।
ম্যাথু

2
@ ম্যাথেজ নিতপিক আমি জাভা / সি # তে জোরালোভাবে টাইপ করা কল করব না ...
জারেড স্মিথ

2
@ জ্যারেডস্মিথ সত্য, আমি প্রায়শই দৃ strongly়ভাবে টাইপ করা এবং স্ট্যাটিকভাবে টাইপের মধ্যে পার্থক্যটি ভুলে যাই।
ম্যাথু

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

উত্তর:


34

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

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

ডিজাইনের ধরণ সম্পর্কে জানতে কিছু গুরুত্বপূর্ণ বিষয়:

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

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

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

  4. অস্তিত্বের প্রতিটি কম্পিউটিং সমস্যার জন্য বিদ্যমান সফ্টওয়্যার প্যাটার্ন নেই। যদি কেস, প্রোগ্রামিং কেবল একটি প্যাটার্ন-ম্যাচিং অনুশীলন হত।

  5. কিছু নিদর্শন আসলে বিরোধী নিদর্শন। এই নিদর্শনগুলি যে অতিরিক্ত জটিলতাগুলি প্রবর্তন করে সেগুলি তাদের প্রদত্ত সুবিধার চেয়ে বেশি out আপনাকে নিজের জন্য সিদ্ধান্ত নিতে হবে, একটি প্যাটার্ন-বাই-প্যাটার্ন ভিত্তিতে, এই ধরণের কোনটি আপনি এড়াতে পারবেন।


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

1
গোফের ধরণগুলি 20 বছরের পুরানো। তাদের বেশিরভাগই সি ++ এর সাথে সমস্যাগুলি সমাধান করার জন্য তৈরি করা হয়েছিল, যা জাভা উত্তরাধিকারসূত্রে পেয়েছিল কারণ জাভা সি ++ এর উপর ভিত্তি করে।
রবার্ট হার্ভে

এই উত্তরের প্যারাডক্সটি হল "সুপরিচিত সমস্যা" অংশ। আপনি যদি এগুলি কখনও অভিজ্ঞতা না করেন তবে এই "সুপরিচিত সমস্যাগুলি" বোঝা শক্ত।
ফুহরম্যানেটর

2
জাভা সি ++ এর উপর ভিত্তি করে নয় । Javas সিনট্যাক্স হয় অনুপ্রাণিত C দ্বারা ++ কিন্তু তার অবশ্যই এটা উপর ভিত্তি করে নয়। উভয় ভাষা বেশ ভিন্নভাবে কাজ করে। জাভা বিমূর্ত হার্ডওয়্যার, টেমপ্লেট না দিয়ে বরং
জেনেরিক

4

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

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

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

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

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


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

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

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

1

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

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

ভঙ্গুর প্রোটোটাইপ হায়ারার্কি ডাউন? মিশ্রিন / বৈশিষ্ট্য / সাবক্লাস কারখানার উদ্ধারকৃত নিদর্শন।


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

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

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

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

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

1

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

অতিরিক্ত:

  • আপনার পছন্দ মতো কিছু সাধারণ ওএসএস প্রকল্পে সহযোগিতা করুন

  • যখন একই সমস্যাটি সমাধানের দুটি উপায় থাকে তখন সর্বদা সহজ নির্বাচন করুন

  • পার্শ্ব প্রকল্পগুলির সাথে কিছু অতিরিক্ত অভিজ্ঞতা তৈরি করুন যেখানে আপনি সমস্ত ধরণের অদ্ভুত ত্রুটি করতে মুক্ত হন এবং আপনি নকশার প্যাটার্নটি "হার্ড ওয়ে" (টিএম) শিখবেন

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