রিডেক্স এবং একটি রাষ্ট্রীয় মেশিনের (যেমন এক্সস্টেট) মধ্যে প্রকৃত পার্থক্য কী?


93

আমি মাঝারি জটিলতার জন্য একটি ফ্রন্ট-এন্ড অ্যাপ্লিকেশন অনুসন্ধানের কাজ করছি। এই মুহুর্তে এটি খাঁটি জাভাস্ক্রিপ্টে লেখা হয়েছে, এতে এই অ্যাপ্লিকেশনটির কয়েকটি প্রধান অংশকে সংযুক্ত করে বিভিন্ন ইভেন্ট-ভিত্তিক বার্তা রয়েছে।

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

রেডাক্স আমাদের জন্য একটি বিকল্প, তবে বিকাশকারীদের মধ্যে একটি স্টেট-মেশিন ভিত্তিক লাইব্রেরি, বিশেষত এক্সস্টেট লাইব্রেরি ব্যবহার করে প্রস্তাবিত ।

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

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

কেউ যদি পার্থক্যটি বর্ণনা করতে পারেন বা আমাকে বলতে পারেন কখন বিকাশকারীদের এক্সস্টেট চয়ন করা উচিত - আপনি এতে স্বাগত।


4
সরকারী দস্তাবেজগুলি আসলে বলেছে যে আপনার রিডেক্স কমানোরকে
ইয়ানিক হামান

আমি মনে করি আপনি যে লাইব্রেরিগুলির উল্লেখ করেছেন সেগুলি এক্সস্টেটকে এফেক্ট ম্যানেজমেন্ট সিস্টেম হিসাবে ব্যবহার করার জন্য হতে পারে (থাঙ্ক, সাগা, এপিক ইত্যাদির বিকল্প)
আলফ্রেড ইয়ং

উত্তর:


205

আমি এক্সস্টেট তৈরি করেছি, তবে আমি একে অপরকে ব্যবহার করতে হবে কিনা তা আপনাকে জানাতে যাচ্ছি না; এটি আপনার দলের উপর নির্ভর করে। পরিবর্তে, আমি কিছু মূল পার্থক্য হাইলাইট করার চেষ্টা করব।

  • রেডাক্স মূলত একটি স্টেট কনটেইনার যেখানে ইভেন্টগুলি ( রেডাক্সের ক্রিয়াকলাপগুলি ) কোনও রিডুসারকে প্রেরণ করা হয় যা আপডেট করে রাষ্ট্র।
  • এক্সস্টেটও একটি রাষ্ট্রের ধারক, তবে এটি সীমাবদ্ধ অবস্থা (যেমন "loading",, "success") কে "অসীম অবস্থা" বা প্রসঙ্গ (যেমন, items: [...]) থেকে পৃথক করে।
  • আপনি কীভাবে আপনার হ্রাসকারীদের সংজ্ঞা দেন তা Redux নির্দেশ করে না। এগুলি হ'ল সরল ফাংশন যা বর্তমান অবস্থা এবং ইভেন্ট (ক্রিয়া) দিয়ে পরবর্তী রাজ্যকে ফিরিয়ে দেয়।
  • এক্সস্টেট হ'ল "বিধিবিধানের সাথে হ্রাসকারী" - আপনি ইভেন্টের কারণে সীমাবদ্ধ রাজ্যের মধ্যে আইনী রূপান্তরকে সংজ্ঞায়িত করেন এবং কোন ক্রিয়াকলাপ একটি রূপান্তরকালে কার্যকর করা উচিত (বা কোনও রাষ্ট্র থেকে প্রবেশ / প্রস্থানের সময়)
  • Redux নেই না হ্যান্ডল পার্শ্ব প্রতিক্রিয়া করার জন্য একটি বিল্ট-ইন উপায় আছে। রিডেক্স-থাঙ্ক, রিডেক্স-সাগা ইত্যাদির মতো অনেকগুলি সম্প্রদায় বিকল্প রয়েছে
  • এক্সস্টেট ক্রিয়াকলাপগুলি (পার্শ্ব-প্রতিক্রিয়াগুলি) ঘোষণামূলক এবং স্পষ্ট করে তোলে - এগুলি Stateপ্রতিটি পরিবর্তনের (বর্তমান অবস্থা + ইভেন্ট) ফিরে আসা অবজেক্টের অংশ ।
  • রেডাক্সের বর্তমানে রাষ্ট্রগুলির মধ্যে রূপান্তরগুলি দেখার কোনও উপায় নেই, কারণ এটি সীমাবদ্ধ এবং অসীম অবস্থার মধ্যে পার্থক্য করে না।
  • এক্সস্টেটের একটি ভিজ্যুয়ালাইজার রয়েছে: https://statecharts.github.io/xstate-viz যা ঘোষণামূলক প্রকৃতির কারণে সম্ভব।
  • রেডাক্স হ্রাসকারীদের মধ্যে অন্তর্নিহিত যুক্তি / আচরণকে ঘোষণামূলকভাবে সিরিয়ালাইজ করা যায় না (যেমন, জেএসএন-তে)
  • এক্সস্টেটের মেশিন সংজ্ঞাগুলি, যা যুক্তি / আচরণের প্রতিনিধিত্ব করে, জেএসএনে সিরিয়ালাইজ করা যায় এবং জেএসএন থেকে পড়তে পারে। এটি আচরণকে বহনযোগ্য এবং বাহ্যিক সরঞ্জামগুলির দ্বারা কনফিগারযোগ্য করে তোলে।
  • রেডাক্স কঠোরভাবে কোনও রাষ্ট্রীয় মেশিন নয়।
  • এক্সস্টেট ডাব্লু 3 সি এসসিএক্সএমএল নির্দিষ্টকরণের কঠোরভাবে অনুসরণ করে: https://www.w3.org/TR/scxML/
  • অসম্ভব রাজ্যগুলিকে ম্যানুয়ালি আটকাতে রেডাক্স বিকাশকারীকে নির্ভর করে।
  • এক্সস্টেট হ্যান্ডলিং ইভেন্টগুলির জন্য প্রাকৃতিকভাবে সীমানা সংজ্ঞায়িত করতে স্টেটচার্টগুলি ব্যবহার করে যা অসম্ভব রাজ্যগুলিকে বাধা দেয় এবং এটি স্ট্যাটিক্যালি বিশ্লেষণ করা যায়।
  • রেডাক্স একটি একক, "গ্লোবাল" পারমাণবিক স্টোর ব্যবহার করতে উত্সাহ দেয়।
  • এক্সস্টেট অভিনেতার-মডেলের মতো পদ্ধতির ব্যবহারকে উত্সাহিত করে, যেখানে একে অপরের সাথে যোগাযোগ করে এমন অনেকগুলি শ্রেণিবদ্ধ স্টেটচার্ট / "পরিষেবা" উদাহরণ থাকতে পারে।

আমি এই সপ্তাহে ডক্সে আরও মূল পার্থক্য যুক্ত করব।


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

4
@ মাইক 76 এক্সস্টেট রেডাক্স ডিভাইসগুলির সাথে সংহত করে।
ডেভিড খুরশিদ

ইঙ্গিতটির জন্য ধন্যবাদ, আমি এটি সন্ধান করব।
মাইক 76

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

21

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

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

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


অন্যদিকে, রেডাক্স হ'ল ইউনিিডেরিয়াল আর্কিটেকচার ফ্রেমওয়ার্ক । একমুখী আর্কিটেকচার আপনাকে ডেটা প্রবাহের একক দিকনির্দেশক রাখে। রেডাক্সে এটি শুরু হয় User->View->(Action)->Store->Reducer->(Middleware)->Store->(State)->View। স্টেট মেশিনগুলির মতো, আপনি রেডাক্সের মিডলওয়্যারগুলির সাথে পার্শ্ব প্রতিক্রিয়াগুলি ট্রিগার করতে পারেন। আপনি চাইলে রাষ্ট্রীয় স্থানান্তরকে সীমাবদ্ধ / নিষেধ করতে পারেন। স্টেট মেশিন থেকে আলাদা , রেডাক্স একমুখী ডেটা প্রবাহকে জোর করে, শুদ্ধ ! হ্রাসকারী ফাংশন, অপরিবর্তনীয় স্থিতি অবজেক্টস, একক পর্যবেক্ষণযোগ্য অ্যাপ্লিকেশন স্থিতি।

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