ইভেন্ট শ্রোতাদের দুর্বল উল্লেখ করা উচিত?


9

সাধারণত ইভেন্ট শ্রোতাদের আউটলাইভ করা উচিত নয় যা তাদের নিবন্ধিত করে।

এর অর্থ কি এই যে শ্রোতাগুলি ডিফল্টরূপে দুর্বল রেফারেন্সগুলি দ্বারা রাখা উচিত (অবজেক্ট শ্রোতার দ্বারা দুর্বল সংগ্রহগুলিতে সংরক্ষিত আছে)?

শ্রোতার যখন তার স্রষ্টাকে ছাড়িয়ে যেতে হবে তখন কি বৈধ মামলা রয়েছে?

অথবা এর মতো পরিস্থিতিটি একটি ভুল এবং এটির অনুমতি দেওয়া উচিত নয়?


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

উত্তর:


7

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

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

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

এবং যদি বাগটি এড়ানো যথেষ্ট পরিমাণে উত্সাহজনক না হয় তবে এখানে আরও কিছু রয়েছে:

  1. আপনার তৈরি প্রতিটি শ্রোতার জন্য আপনাকে একটি নাম ভাবতে হবে ।

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

  3. ইভেন্ট শ্রোতা কিছু করে, এবং এর শক্তিশালী রেফারেন্সযুক্ত বস্তুটি একবার সংগ্রহ করা হলে এটি কিছু করা বন্ধ করে দেবে। আপনার কাছে এখন এমন কিছু আছে যা প্রোগ্রামের অবস্থাকে প্রভাবিত করে এবং এটি জিসির উপর নির্ভর করে - যার অর্থ জিসি প্রোগ্রামের কংক্রিটের অবস্থাকে প্রভাবিত করে। আর এটাই খারাপ !

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


5

সাধারণভাবে, হ্যাঁ, দুর্বল উল্লেখগুলি ব্যবহার করা উচিত। তবে প্রথমে আমাদের "ইভেন্ট শ্রোতা" বলতে আপনার অর্থ কী তা সম্পর্কে আমাদের পরিষ্কার হতে হবে।

Callbacks

কিছু প্রোগ্রামিং শৈলীতে, বিশেষত অ্যাসিনক্রোনাস অপারেশনের প্রসঙ্গে, কোনও নির্দিষ্ট ইভেন্টে সম্পাদিত হওয়া কলব্যাক হিসাবে গণনার কোনও অংশ উপস্থাপন করা সাধারণ। উদাহরণস্বরূপ, একটি Promise[ 1 ] এর একটি thenপদ্ধতি থাকতে পারে যা পূর্ববর্তী পদক্ষেপটি শেষ হওয়ার পরে কলব্যাক রেজিস্টার করে:

promise =
    Promise.new(async_task)                # - kick off a task
    .then(value => operation_on(value))    # - queue other operations
    .then(value => other_operation(value)) #   that get executed on completion
... # do other stuff in the meanwhile
# later:
result = promise.value # block for the result

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

পর্যবেক্ষক প্যাটার্ন

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

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

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

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

  • এটি ম্যানুয়ালি করা, তবে এটি ত্রুটিযুক্ত।

  • জাভাতে বা usingসি # তে সহায়তার সাথে চেষ্টা করার মতো কিছু ব্যবহার করা ।

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

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