গোটোসের চেয়ে কীভাবে প্রকাশ-সাবস্ক্রাইব প্যাটার্নটি আলাদা?


11

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

আমি অনেকগুলি জাভাস্ক্রিপ্ট প্রোগ্রামে অনুরূপ কিছু দেখতে পেয়েছি যাতে ইভেন্টগুলি মডিউলগুলিতে সুবিধার্থে "হপ" ব্যবহার করা হয়। আমি কি প্রকাশনা সাবস্ক্রাইব বা ইভেন্ট-চালিত নিদর্শন সম্পর্কে কিছু মিস করছি?


5
return, try/catch, break, continue, switch- যারা সব goto । এতে যান সালে নির্মিত সীমাবদ্ধতা বিভিন্ন স্তরে সাথে বিবেচনা ক্ষতিকর কিভাবে কোড কাজ করে সে সম্পর্কে চিন্তা ক্ষতিকর।

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

... কি কোন ধারণা কর্মসূচির অংশ সাবস্ক্রাইব করছে ... সাথে প্রথম প্রধান পার্থক্য gotoমধ্যে মিথ্যা গুলি শেষে অংশের । দ্বিতীয় প্রধান পার্থক্য কোন ধারণা নেই । তৃতীয় প্রধান পার্থক্য হ'ল এটি ধারণাগতভাবে একটি gosub, একটি নয় goto
mouviciel

1
এটি ইন্টারকলের "আসুন" এর কাছাকাছি।
কোডসইনচাওস

@ back2dos কোডের 1 লাইন ব্লকের জন্য এমনকি আমি কেন ব্যবহারকারী কোঁকড়া ধনুর্বন্ধকে পছন্দ করি তার একটি উত্তম উদাহরণ।
মেটাফাইট

উত্তর:


19

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

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

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

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

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

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


+1 প্রকাশ / সাবস্ক্রাইব আলগা দম্পতি অনুমতি দেয়;
গোটো

6

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

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

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

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

তবে সাধারণত, আপনি পাব / উপ থেকে প্রাপ্ত ডিকোপলিং বিতরণ প্রক্রিয়াজাতকরণের সমস্যাটিকে সহজ করে এবং আপনার সিস্টেমের মধ্যে যুক্তিকে ডিকপল করে। এছাড়াও সাধারণত, স্ট্রেট-আপ জিওটিওগুলি এমন জটিল সিস্টেম তৈরি করার প্রবণতা রাখে যেখানে নিয়ন্ত্রণের প্রবাহ বোঝা সমস্যাযুক্ত হয়ে ওঠে।

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