ইভেন্ট চেইনিং করা কি ভাল অনুশীলন হিসাবে বিবেচিত হয়?


15

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

ইভেন্টগুলির শৃঙ্খলাগুলি আমাকে অতিরিক্ত শ্রোতার পরে মোটামুটি কম প্রচেষ্টা (YAGNI এর সম্ভাব্য লঙ্ঘন?) দিয়ে বুনতে দেয়। আমার কোডে সহজ সহজে বোঝা যায় এমন উপাদানগুলি থাকে, যা অন্যদের বুঝতে অসুবিধা হয় না।

যাইহোক, এই সমাধানের সম্ভাব্য উত্সাহটি হ'ল সত্য হবে যে শৃঙ্খলে কিছু ভুল হওয়ার আগে (যেমন মানুষের ত্রুটির কারণে মিথ্যা ঘটনাটি ঘটাচ্ছে), ত্রুটিটি ধরা বেশ কঠিন হবে।

ইভেন্ট একটি ভাল ধারণা টিএম শৃঙ্খলাবদ্ধ ? যদি তা না হয় তবে ইভেন্ট সম্পর্কিত কোডটিকে বিশৃঙ্খলাবদ্ধ রাখার বিকল্প পদ্ধতিগুলি কী কী?


1
আমি জাভাস্ক্রিপ্টের জন্য একটি ইভেন্ট চেইন লাইব্রেরিতে গত কয়েক বছর ধরে কাজ করছি। kayoub5.github.io/onQuery এটি <br> (এ বা বি) এরপরে সি এর পরে (ডি এবং ই) এর মতো জটিল ইভেন্টগুলি লিখতে অনুমতি দেয় {A + B} > C > {D & E}- এটি নিশ্চিতভাবে কম সময়ে জটিল সমাধানগুলি লিখতে সহায়তা করে, তবে আগে যেমন উল্লেখ করা হয়েছে, পরীক্ষা এবং ডিবাগিং এখনও একটি ব্যথা।
আইয়ুব কানিচ

উত্তর:


11

ইভেন্ট একটি ভাল ধারণা শৃঙ্খলা?

এটি ব্যবহার না করা অবধি এটি এমন একটি জিনিস যা সত্যিই ভাল ধারণা বলে মনে হয়।

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

এবং তারা ডিবাগিং এবং কোড সম্পর্কে যুক্তি করতে খুব শক্ত।

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

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


কিছু দুর্দান্ত পয়েন্ট, বিশেষত ইউআই হায়ারার্কি সম্পর্কে একটি।
ওয়াঘানড্রয়েড

2

ইভেন্ট চেইনিং একটি ভাল ধারণা যদি

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

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


2

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

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


1
এটি সাধারণ ধারণার সাথে নয়, একটি নির্দিষ্ট প্রয়োগের ক্ষেত্রে সমস্যা বলে মনে হচ্ছে।
ম্যাট এস

আমি মনে করি অ-নিরঙ্কুশ নিয়ন্ত্রণ ব্যবস্থা প্রবাহের সমস্যাটি নকশার অন্তর্নিহিত। আপনি যদি সুনির্দিষ্ট প্রবাহকে কোডিং না করেন এবং সাধারণ উদ্দেশ্যমূলক পাব / উপ-টাইপ প্রক্রিয়া ব্যবহার না করেন তবে।
টিএমএন

2

অন্যদের দ্বারা উল্লিখিত সমস্ত কারণে ভালভাবে শৃঙ্খলাবদ্ধ ইভেন্ট প্রয়োগ করা কঠিন।

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

প্রোলোগ ভাষা এবং এর ডেরাইভেটিভগুলি একই ধারণার উপর ভিত্তি করে।

জড়িত অ্যালগোরিদমগুলি সহজ নয়, ডিবাগিং ক্যান একটি ব্যথা হতে পারে তবে মডেলটিতে অনেক মূল্য খুঁজে পাওয়া যায়।


1

একটি সম্ভাব্য অসুবিধা হ'ল লুপিং আপডেটগুলি সহ দুর্ঘটনাক্রমে শেষ হওয়া বেশ সহজ। যেমন এ -> বি -> সি -> এ -> খ ...

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

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