টি এল; ডিএল
সি # এর সাথে জাভা ভাষার বৈশিষ্ট্যগুলির অভাবের পাশাপাশি আবিষ্কারের বিবেচনার কারণে আমাদের উত্স এবং মধ্যবর্তী অপারেটরগুলিকে বড় ক্লাসে ফেলেছে।
নকশা
মূল আরএক্স.এনইটি সি # 3.0 এ বিকাশ করা হয়েছিল যার দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে: এক্সটেনশন পদ্ধতি এবং আংশিক ক্লাস। প্রাক্তনটি আপনাকে অন্যান্য ধরণের উদাহরণগুলির পদ্ধতিগুলি সংজ্ঞায়িত করতে দেয় যা পরে সেই লক্ষ্য ধরণের অংশ হিসাবে উপস্থিত হয় যখন আংশিক শ্রেণিগুলি আপনাকে বৃহত শ্রেণিগুলিকে একাধিক ফাইলে বিভক্ত করতে দেয়।
এই বৈশিষ্ট্যগুলির কোনওটিই জাভাতে উপস্থিত ছিল না বা উপস্থিত নেই, সুতরাং, আমাদের কাছে আরএক্সজাভা সুবিধামত পর্যায়ে ব্যবহারের উপযোগী হওয়ার উপায় খুঁজে বের করতে হয়েছিল।
আরএক্সজাভাতে দুই ধরণের অপারেটর রয়েছে: উত্স-মত স্ট্যাটিক ফ্যাক্টরি পদ্ধতি দ্বারা উপস্থাপিত হয় এবং উদাহরণ পদ্ধতি দ্বারা উপস্থাপকের মতো প্রতিনিধিত্ব করে। প্রাক্তন যে কোনও ক্লাসে থাকতে পারত এবং এগুলি একাধিক ইউটিলিটি ক্লাসে বিতরণ করা যেত। দ্বিতীয়টির উপর কাজ করার জন্য একটি উদাহরণ প্রয়োজন। ধারণা হিসাবে, এই সমস্তগুলি প্রথম প্যারামিটার হিসাবে প্রবাহের সাথে স্থির পদ্ধতির মাধ্যমে প্রকাশ করা যেতে পারে।
বাস্তবে, তবে একাধিক এন্ট্রি-ক্লাস করা নতুন ব্যবহারকারীদের অসুবিধাগুলি দ্বারা বৈশিষ্ট্য আবিষ্কার করে (মনে রাখবেন, আরএক্সজেভাকে জাভাতে একটি নতুন ধারণা এবং প্রোগ্রামিং দৃষ্টান্ত আনতে হয়েছিল) পাশাপাশি সেই মধ্যবর্তী অপারেটরদের কিছুটা দুঃস্বপ্নের ব্যবহার। অতএব, আসল দলটি তথাকথিত সাবলীল এপিআই নকশা নিয়ে আসে: এমন এক শ্রেণি যা সমস্ত স্থির এবং উদাহরণ পদ্ধতি রাখে এবং উত্স বা প্রক্রিয়াজাতকরণের মঞ্চটি নিজেই উপস্থাপন করে।
ত্রুটিগুলির প্রথম শ্রেণীর প্রকৃতির কারণে, একযোগে সমর্থন এবং কার্যকরী প্রকৃতির কারণে, প্রতিক্রিয়াশীল প্রবাহ সম্পর্কিত যে কোনও প্রকারের উত্স এবং রূপান্তরগুলি নিয়ে আসতে পারে। আরএক্স.এনইটি-র দিন থেকে গ্রন্থাগারটি (এবং ধারণা) বিকশিত হওয়ার সাথে সাথে আরও বেশি স্ট্যান্ডার্ড অপারেটর যুক্ত করা হয়েছিল, যা প্রকৃতির দ্বারা পদ্ধতিটির সংখ্যা বাড়িয়ে তোলে। এটি দুটি স্বাভাবিক অভিযোগের দিকে নিয়ে যায়:
- কেন এত পদ্ধতি আছে?
- কেন এমন কোনও পদ্ধতি এক্স নেই যা আমার খুব নির্দিষ্ট সমস্যা সমাধান করে?
প্রতিক্রিয়াশীল অপারেটরগুলি লেখার পক্ষে কাজ করা অনেক কঠিন কাজ নয়; বেশিরভাগ সাধারণ লাইব্রেরির ব্যবহারকারীরা নিজেরাই অপারেটর তৈরি করতে পারবেন না (এবং প্রায়শই এটি চেষ্টা করার জন্য এটি সত্যই প্রয়োজন হয় না)। এর অর্থ আমরা, সময়ে সময়ে, স্ট্যান্ডার্ড সেটটিতে আরও অপারেটর যুক্ত করি। বিপরীতে, আমরা খুব বেশি নির্দিষ্ট বা কেবল নিজের সুবিধামত ওজন ধরে রাখতে না পারে এমন কোনও সুবিধার কারণে আরও অনেক অপারেটরকে প্রত্যাখ্যান করেছি।
আমি বলতে চাই যে RxJava এর নকশাগুলি জৈবিকভাবে বেড়েছে এবং সলাইডের মতো নির্দিষ্ট নকশার নীতিগুলি সহ সত্যই নয়। এটি বেশিরভাগই এর সাবলীল এপিআই ব্যবহার এবং অনুভব দ্বারা চালিত।
আরএক্স.এনইটের সাথে অন্য সম্পর্ক
আমি ২০১৩ সালের শেষদিকে আরএক্সজাভা বিকাশে যোগ দিয়েছি। যতদূর আমি বলতে পারি প্রাথমিক প্রারম্ভিক 0.x সংস্করণগুলি মূলত একটি ব্ল্যাক-বাক্স সংস্কার ছিল যেখানে আরএক্স.এনইটি Observable
অপারেটরদের নাম এবং স্বাক্ষর পাশাপাশি কয়েকটি স্থাপত্য সংক্রান্ত সিদ্ধান্ত পুনরায় ব্যবহার করা হয়েছিল। এতে প্রায় 20% Rx.NET অপারেটর জড়িত। তারপরে মূল সমস্যাটি ছিল সি # এবং জাভার মধ্যে ভাষা এবং প্ল্যাটফর্মের পার্থক্যের সমাধান। প্রচুর প্রচেষ্টায়, আমরা Rx.NET এর উত্স কোডটি না দেখে অনেকগুলি অপারেটরকে বাস্তবায়িত করতে সক্ষম হয়েছি এবং আমরা আরও জটিলগুলিকে পোর্ট করেছি।
এই অর্থে, আরএক্সজাভা 0.19 অবধি, আমাদের Observable
আরএক্স.এনইটি IObservable
এবং এর সহযোগী Observable
এক্সটেনশন পদ্ধতির সমতুল্য ছিল । যাইহোক, তথাকথিত ব্যাকপ্রেসার সমস্যাটি উপস্থিত হয়েছিল এবং আরএক্সজাভা 0.20 একটি প্রোটোকল এবং স্থাপত্য স্তরে আরএক্স.এনইটি থেকে বিচ্যুত হওয়া শুরু করে। উপলব্ধ অপারেটরগুলি বর্ধিত করা হয়েছিল, অনেকগুলি ব্যাকপ্রেস-সচেতন হয়ে ওঠে এবং আমরা নতুন ধরণের প্রবর্তন করি: Single
এবং Completable
1.x যুগে, যার এখন পর্যন্ত আরএক্স.নেটে কোনও অংশ নেই।
ব্যাকপ্রেসার-সচেতনতা বিষয়গুলিকে যথেষ্ট জটিল করে তোলে এবং 1.x Observable
এটিকে একটি উত্তরোত্তর হিসাবে গ্রহণ করেছে। আমরা বাইনারি সামঞ্জস্যের প্রতি আনুগত্যের শপথ করেছিলাম তাই প্রোটোকল এবং এপিআই পরিবর্তন করা বেশিরভাগ ক্ষেত্রেই সম্ভব ছিল না।
আরএক্স.এনইটি-র আর্কিটেকচারে আরও একটি সমস্যা ছিল: সিঙ্ক্রোনাস বাতিল সম্ভব নয় কারণ এটি Disposable
করার জন্য অপারেটরটি কার্যকর করা শুরু করার আগে একজনকে ফেরত পাঠানো দরকার। তবে সূত্রগুলি যেমন Range
আগ্রহী ছিল এবং শেষ না হওয়া পর্যন্ত ফিরে আসে না। এই সমস্যা একটি ইনজেকশনের দ্বারা সমাধান করা যেতে পারে Disposable
মধ্যে Observer
পরিবর্তে থেকে এক ফেরার subscribe()
।
আরএক্সজাভা ২.এক্স এই লাইনগুলি বরাবর স্ক্র্যাচ থেকে পুনরায় ডিজাইন করা হয়েছিল এবং পুনরায় প্রয়োগ করা হয়েছিল । আমাদের একটি পৃথক, ব্যাকপ্রেসার-সচেতন টাইপ রয়েছে Flowable
যা অপারেটরগুলির একই সেট সরবরাহ করে Observable
। Observable
ব্যাকপ্রেসার সমর্থন করে না এবং কিছুটা Rx.NET এর সমতুল্য Observable
। অভ্যন্তরীণভাবে, সমস্ত প্রতিক্রিয়াশীল প্রকারগুলি তাদের বাতিল হ্যান্ডেলটি তাদের গ্রাহকদের কাছে ইনজেক্ট করে, সিঙ্ক্রোনাস বাতিলকে দক্ষতার সাথে কাজ করতে দেয়।