ইভেন্ট চালিত কোডটির রক্ষণাবেক্ষণ কীভাবে সহজ করবেন?


16

ইভেন্ট ভিত্তিক উপাদান ব্যবহার করার সময় আমি প্রায়শই রক্ষণাবেক্ষণের পর্যায়ে কিছুটা ব্যথা অনুভব করি।

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

যখন কেউ নতুন কিছু ইভেন্ট হ্যান্ডলার যুক্ত করে তখন এটি সূক্ষ্ম এবং ডিবাগ করা শক্ত হয়ে উঠতে পারে।

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

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

//////////////
উদাহরণ

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

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

কিছুক্ষণ পরে, এটি ঘটতে পারে যে এক ডজন বা তারও বেশি হ্যান্ডলার নিবন্ধিত রয়েছে এবং এটির সাথে কাজ করা ক্লান্তিকর এবং বিপজ্জনক হতে পারে।

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

উদাহরণের শেষে
//////////////

সুতরাং আমি ভাবছি যে অন্যান্য ব্যক্তিরা এই জাতীয় কোডটি কীভাবে মোকাবেলা করছেন। এটি লিখতে এবং পড়ার সময় উভয়ই।

আপনার কি এমন কোনও পদ্ধতি বা সরঞ্জাম রয়েছে যা আপনাকে খুব ব্যথা ছাড়াই এই জাতীয় কোড লিখতে এবং বজায় রাখতে দেয়?


আপনি বলতে চাচ্ছেন, ইভেন্ট হ্যান্ডলারদের থেকে লজিক রিফ্যাক্ট করা ছাড়াও ?
টেলাস্টিন

যা চলছে তা নথিভুক্ত করুন।

@ টেলাস্টিন, 'ইভেন্ট হ্যান্ডলারদের থেকে যুক্তি দেখানোর পাশাপাশি' আপনি কী বোঝাতে চেয়েছেন তা আমি পুরোপুরি বুঝতে নিশ্চিত নই।
গিলিয়াম

@ থোরবজোর্ন: আমার আপডেট দেখুন।
গিলিয়াম

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

উত্তর:


7

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

এখানে আমি একটি সাধারণ উদাহরণ উপস্থাপন করছি যা এই প্যাটার্ন দ্বারা সমাধান করা হয়েছে।

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

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

আমার নিদর্শন অনুসারে, এ ইভেন্ট লুপের লাইফোর সারিতে একটি অভ্যন্তরীণ ইভেন্ট (কাজ) ঠেলা দিয়ে আরও কাজ করার সময়সূচী তৈরি করবে, তারপরে কলব্যাকটি প্রেরণ করুন এবং অবিলম্বে ইভেন্ট লুপটিতে ফিরে আসুন । কোডটির এই টুকরোটি আর কোনও বিপদ নয়, যেহেতু এ স্রেফ ফিরে আসে। এখন, যদি কলব্যাক এটিকে ধ্বংস না করে, তবে অতিরিক্ত কাজটি করার জন্য ইভেন্ট লুপের মাধ্যমে ধাক্কা দেওয়া কাজটি শেষ পর্যন্ত কার্যকর করা হবে (কলব্যাক হয়ে যাওয়ার পরে, এবং এর সমস্ত ধাক্কা খাত পুনরাবৃত্তভাবে)। অন্যদিকে, কলব্যাক যদি A কে ধ্বংস করে দেয়, এ এর ​​ডেস্ট্রাক্টর বা ডিনিট ফাংশন ইভেন্ট স্ট্যাক থেকে পুশ কাজটি সরিয়ে ফেলতে পারে, যা পুরোপুরিভাবে ধাক্কা দেওয়া কাজের ফাঁকা রোধ করে।


7

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


হ্যাঁ, এটি একটি সহায়ক পরামর্শ। উত্পাদিত লগগুলির পরিমাণ ভয়াবহ হতে পারে (খুব জটিল আকারের ইভেন্ট প্রসেসিংয়ে একটি চক্রের কারণ খুঁজে পেতে আমার কিছুটা কঠিন সময় মনে
গিলাইম

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

3

সুতরাং আমি ভাবছি যে অন্যান্য ব্যক্তিরা এই জাতীয় কোডটি কীভাবে মোকাবেলা করছেন। এটি লিখতে এবং পড়ার সময় উভয়ই।

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

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

কখনও কখনও বিকাশকারীরা জিইউআই কার্যকারিতা সরবরাহ করতে আগ্রহী যার জন্য এই জাতীয় ইভেন্ট নির্ভরতা প্রয়োজন, তবে সত্যিকারের কোনও বিকল্প নেই যা উল্লেখযোগ্যভাবে সহজ।

নীচের লাইনটি হ'ল প্রযুক্তিটি যদি বুদ্ধিমানের সাথে ব্যবহার করা হয় তবে এটি খারাপ নয়।


'স্প্যাগেটির চেয়েও খারাপ' এড়াতে তাদের কোনও বিকল্প নকশা?
গিলিয়াম

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

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

ইভেন্ট-চালিত প্রোগ্রামিং ভিবি থেকে অনেক পুরানো; এটি সানটুলস জিইউআইতে উপস্থিত ছিল এবং এর আগে আমার মনে হচ্ছে এটি সিমুলা ভাষায় নির্মিত হয়েছিল।
কেভিন cline

@ গুইলাউম, আমি অনুমান করি আপনি পরিষেবাটি শেষ করেছেন। আমার উপরের বিবরণটি বেশিরভাগই জিইউআই ইভেন্টের ভিত্তিতে ছিল। আপনার (সত্যই) এই ধরণের প্রসেসিং দরকার?
NoChance

3

আমি এই উত্তরটি আপডেট করতে চেয়েছিলাম যেহেতু "চাটুকার" এবং "চাটুকার" নিয়ন্ত্রণ প্রবাহের পরে আমি কিছু ইউরেকার মুহুর্ত অর্জন করেছি এবং বিষয়টিতে নতুন কিছু চিন্তাভাবনা তৈরি করেছি।

জটিল পার্শ্ব প্রতিক্রিয়া বনাম জটিল নিয়ন্ত্রণ প্রবাহ

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

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

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

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

জটিল নিয়ন্ত্রণ প্রবাহ কখন কখন কোথায় ঘটবে সে সম্পর্কে যুক্তিযুক্ত হতে সমস্যা তৈরি করে। এটি কেবলমাত্র মাথা ব্যথার কারণ হয়ে দাঁড়ায় যদি এই জটিল নিয়ন্ত্রণ প্রবাহগুলি পার্শ্বপ্রতিক্রিয়ার একটি জটিল সংমিশ্রণ ঘটায় যেখানে কোথায় / কখন ঘটে থাকে তা বোঝা গুরুত্বপূর্ণ যেমন পার্শ্ব প্রতিক্রিয়াগুলির যেমন একরকম অর্ডার নির্ভরতা রয়েছে যেখানে একটি জিনিস ঘটেছিল তার আগে হওয়ার আগে।

নিয়ন্ত্রণ প্রবাহ বা পার্শ্ব প্রতিক্রিয়া সরল করুন

সুতরাং আপনি যখন উপরোক্ত দৃশ্যের মুখোমুখি হোন যে এত সহজে বুঝতে পেরেছেন তখন আপনি কি করবেন? কৌশলটি হয় নিয়ন্ত্রণ প্রবাহকে সহজতর করা বা পার্শ্ব প্রতিক্রিয়াগুলি।

পার্শ্ব প্রতিক্রিয়াগুলি সরল করার জন্য একটি বহুল-প্রয়োগযোগ্য কৌশল হ'ল পিছিয়ে যাওয়া প্রক্রিয়াজাতকরণের পক্ষে favor একটি জিইউআই আকার পরিবর্তন ইভেন্টটিকে উদাহরণ হিসাবে ব্যবহার করে, সাধারণ প্রলোভনগুলি হ'ল জিইউআই লেআউটটি পুনরায় প্রয়োগ করা, পুনরায় স্থাপন করা এবং শিশু উইজেটগুলিকে পুনরায় আকার দেওয়া, লেআউট অ্যাপ্লিকেশনগুলির আরও একটি ক্যাসকেড ট্রিগার করা এবং নিয়ন্ত্রণগুলি পুনরায় আকারের পাশাপাশি হায়ারার্কিটিকে পুনরায় আকার এবং পুনরায় স্থাপন করা, সম্ভবত কিছুটা ট্রিগার করা হতে পারে কাস্টম রাইজিং আচরণের জন্য উইজেটগুলির অনন্য ইভেন্টগুলি যা আরও বেশি ঘটনা ঘটায় কে-কোথায় জানায় trigger ইত্যাদি ঘটায় trigger এবং কোন উইজেটগুলি তাদের লেআউট আপডেট করতে হবে তা চিহ্নিত করুন। তারপরে, একটি পিছনে পাসে যা একটি সরল ক্রমযুক্ত ক্রিয়াকলাপ প্রবাহ থাকে, উইজেটের জন্য প্রয়োজনীয় সমস্ত লেআউট পুনরায় প্রয়োগ করে। তারপরে আপনি কী উইজেটগুলি পুনরায় রঙ করতে হবে তা চিহ্নিত করতে পারেন। আবার কন্ট্রোল প্রবাহের সাথে ক্রমবর্ধমান পিছিয়ে পাসে, পুনঃনির্মাণ করা প্রয়োজন হিসাবে চিহ্নিত উইজেটগুলি পুনরায় রঙ করুন।

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

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


2

আমার জন্য যা কাজ করেছে তা অন্যান্য ইভেন্টের উল্লেখ ছাড়াই প্রতিটি ইভেন্টকে নিজেরাই দাঁড় করিয়ে দিচ্ছে। তারা asynchroniously আসছে হয়, আপনি না আছে একটা ক্রম, তাই জিনিসটা কি, কি অর্ডার অর্থহীন হয় এরকম অসম্ভব ছাড়াও চেষ্টা করছে।

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

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

প্রতিটি থ্রেডকে সম্পূর্ণ স্বতন্ত্র সত্তা হিসাবে চিকিত্সা করা কঠিন (হার্ড-কোর বহু-থ্রেডিংয়ের কারণে) তবে কার্যকর। "স্কেলেবল" শব্দটি আমি খুঁজছি হতে পারে। দ্বিগুণ ইভেন্টগুলিতে দ্বিগুণ কাজের সময় লাগে এবং সম্ভবত মাত্র 1.5 গুণ বেশি। আরও অ্যাসিঙ্ক্রোনিয়াস ইভেন্টগুলির সমন্বয় করার চেষ্টা আপনাকে দ্রুত কবর দেবে।


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

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

2

দেখে মনে হচ্ছে আপনি স্টেট মেশিন এবং ইভেন্ট চালিত ক্রিয়াকলাপ অনুসন্ধান করছেন

তবে, আপনি স্টেট মেশিন মার্কআপ ওয়ার্কফ্লো স্যাম্পলটিও দেখতে চাইতে পারেন ।

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

প্রতিটি স্টেট মেশিনের ওয়ার্কফ্লোতে দুটি বৈশিষ্ট্য থাকে: ইনিশিয়ালস্টেটনাম এবং কমপ্লিটস্টেটনেম। যখন স্টেট মেশিনের কার্যপ্রবাহের কোনও উদাহরণ তৈরি করা হয়, তখন এটি ইনিশিয়াল স্টেটনেম সম্পত্তিটিতে স্থাপন করা হয়। যখন রাষ্ট্রীয় মেশিনটি কমপ্লিটস্টেটনেম সম্পত্তিটিতে পৌঁছে যায়, তখন এটি কার্যকর হয়।


2
যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
টমাস Owens

তবে আপনি যদি প্রতিটি রাজ্যের সাথে কয়েক ডজন হ্যান্ডলার সংযুক্ত থাকেন তবে কী চলছে তা বোঝার চেষ্টা করার সময় আপনি এতটা ঠিক হবেন না ... এবং প্রতিটি ইভেন্ট ভিত্তিক উপাদানটিকে রাষ্ট্রীয় মেশিন হিসাবে বর্ণনা করা যায় না।
গিলিয়াম

1

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

ডিবাগ করা সত্য যা শক্ত তা গতিশীলভাবে উত্পন্ন ফাংশন কল। যে (বিরোধী?) প্যাটার্নটি আমি নরক থেকে কল-ব্যাক ফ্যাক্টরি কল করব। যাইহোক, এই জাতীয় ফাংশন কারখানাগুলি traditionalতিহ্যগত প্রবাহে ডিবাগ করা সমান শক্ত।

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