RxJava বর্গ ফ্লোয়েবল বৈধভাবে 460 পদ্ধতি থাকতে পারে?


14

আমি শুধু দিয়ে শুরু পাচ্ছি RxJava , জাভা বাস্তবায়ন ReactiveX (নামেও পরিচিত Rx এবং প্রতিক্রিয়াশীল এক্সটেনশানগুলি )। কিছু যে সত্যিই আমাকে তাড়িত ব্যাপক আকার ছিল RxJava এর Flowable বর্গ : এটা 460 পদ্ধতি আছে!

সুষ্ঠু হতে:

  • অতিরিক্ত পদ্ধতিতে প্রচুর পদ্ধতি রয়েছে যা মোট পদ্ধতিগুলির সংখ্যা উল্লেখযোগ্যভাবে বাধা দেয়।

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

অন্য দিকে:

  • RxJava জাভা বাস্তবায়ন Microsoft এর প্রতিক্রিয়াশীল এক্সটেনশানগুলি , এবং যে এমনকি একটি নেই Flowable , বর্গ তাই এই অন্ধ একটি বিদ্যমান বর্গ porting এবং জাভা এটা বাস্তবায়নের একটি ঘটনা না।

  • [ আপডেট: italics মধ্যে পূর্ববর্তী বিন্দু মোটামুটি ভুল: Microsoft এর পর্যবেক্ষণযোগ্য বর্গ, যা 400 পদ্ধতি আছে, RxJava এর ভিত্তি হিসাবে ব্যবহৃত হয় পর্যবেক্ষণযোগ্য বর্গ, এবং Flowable অনুরূপ পর্যবেক্ষণযোগ্য কিন্তু হ্যান্ডলগুলি তথ্য বৃহৎ ভলিউম জন্য backpressure। RxJava দল তাই ছিল একটি বিদ্যমান বর্গ porting। এই পোস্টটি মূল নকশা চ্যালেঞ্জ হওয়া উচিত ছিল লক্ষণীয় RxJava এর মাইক্রোসফট বদলে দ্বারা বর্গ Flowable বর্গ।]

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

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

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

তবে ফ্লোয়েবলের কী সত্যিকার অর্থে 460 টি পদ্ধতি দরকার, বা এটি এত বিশাল যে এটি অগত্যা খারাপ বর্গের নকশার উদাহরণ?

[স্পষ্ট হবে: এই প্রশ্নের বিশেষভাবে RxJava এর সাথে সম্পর্কিত Flowable বরং সাধারণভাবে ঈশ্বর বস্তু চেয়ে বর্গ।]



1
@gnat অবশ্যই সম্পর্কিত, তবে এটি কোনও সদৃশ নয়। যে প্রশ্ন জেনেরিক ছিল, এবং আমার প্রশ্ন বিশেষভাবে RxJava এর সাথে সম্পর্কিত Flowable বর্গ।
স্কোমিসা

@skomisa তারপরে আপনার প্রশ্নের সাথে মানিয়ে নেওয়ার জন্য শিরোনামটি ঠিক করুন।
ইউফোরিক

@ ইউফোরিক পয়েন্ট নেওয়া হয়েছে।
স্কোমিসা

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

উত্তর:


14

টি এল; ডিএল

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

নকশা

মূল আরএক্স.এনইটি সি # 3.0 এ বিকাশ করা হয়েছিল যার দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে: এক্সটেনশন পদ্ধতি এবং আংশিক ক্লাস। প্রাক্তনটি আপনাকে অন্যান্য ধরণের উদাহরণগুলির পদ্ধতিগুলি সংজ্ঞায়িত করতে দেয় যা পরে সেই লক্ষ্য ধরণের অংশ হিসাবে উপস্থিত হয় যখন আংশিক শ্রেণিগুলি আপনাকে বৃহত শ্রেণিগুলিকে একাধিক ফাইলে বিভক্ত করতে দেয়।

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

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

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

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

  • কেন এত পদ্ধতি আছে?
  • কেন এমন কোনও পদ্ধতি এক্স নেই যা আমার খুব নির্দিষ্ট সমস্যা সমাধান করে?

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

আমি বলতে চাই যে RxJava এর নকশাগুলি জৈবিকভাবে বেড়েছে এবং সলাইডের মতো নির্দিষ্ট নকশার নীতিগুলি সহ সত্যই নয়। এটি বেশিরভাগই এর সাবলীল এপিআই ব্যবহার এবং অনুভব দ্বারা চালিত।

আরএক্স.এনইটের সাথে অন্য সম্পর্ক

আমি ২০১৩ সালের শেষদিকে আরএক্সজাভা বিকাশে যোগ দিয়েছি। যতদূর আমি বলতে পারি প্রাথমিক প্রারম্ভিক 0.x সংস্করণগুলি মূলত একটি ব্ল্যাক-বাক্স সংস্কার ছিল যেখানে আরএক্স.এনইটি Observableঅপারেটরদের নাম এবং স্বাক্ষর পাশাপাশি কয়েকটি স্থাপত্য সংক্রান্ত সিদ্ধান্ত পুনরায় ব্যবহার করা হয়েছিল। এতে প্রায় 20% Rx.NET অপারেটর জড়িত। তারপরে মূল সমস্যাটি ছিল সি # এবং জাভার মধ্যে ভাষা এবং প্ল্যাটফর্মের পার্থক্যের সমাধান। প্রচুর প্রচেষ্টায়, আমরা Rx.NET এর উত্স কোডটি না দেখে অনেকগুলি অপারেটরকে বাস্তবায়িত করতে সক্ষম হয়েছি এবং আমরা আরও জটিলগুলিকে পোর্ট করেছি।

এই অর্থে, আরএক্সজাভা 0.19 অবধি, আমাদের Observableআরএক্স.এনইটি IObservableএবং এর সহযোগী Observableএক্সটেনশন পদ্ধতির সমতুল্য ছিল । যাইহোক, তথাকথিত ব্যাকপ্রেসার সমস্যাটি উপস্থিত হয়েছিল এবং আরএক্সজাভা 0.20 একটি প্রোটোকল এবং স্থাপত্য স্তরে আরএক্স.এনইটি থেকে বিচ্যুত হওয়া শুরু করে। উপলব্ধ অপারেটরগুলি বর্ধিত করা হয়েছিল, অনেকগুলি ব্যাকপ্রেস-সচেতন হয়ে ওঠে এবং আমরা নতুন ধরণের প্রবর্তন করি: Singleএবং Completable1.x যুগে, যার এখন পর্যন্ত আরএক্স.নেটে কোনও অংশ নেই।

ব্যাকপ্রেসার-সচেতনতা বিষয়গুলিকে যথেষ্ট জটিল করে তোলে এবং 1.x Observableএটিকে একটি উত্তরোত্তর হিসাবে গ্রহণ করেছে। আমরা বাইনারি সামঞ্জস্যের প্রতি আনুগত্যের শপথ করেছিলাম তাই প্রোটোকল এবং এপিআই পরিবর্তন করা বেশিরভাগ ক্ষেত্রেই সম্ভব ছিল না।

আরএক্স.এনইটি-র আর্কিটেকচারে আরও একটি সমস্যা ছিল: সিঙ্ক্রোনাস বাতিল সম্ভব নয় কারণ এটি Disposableকরার জন্য অপারেটরটি কার্যকর করা শুরু করার আগে একজনকে ফেরত পাঠানো দরকার। তবে সূত্রগুলি যেমন Rangeআগ্রহী ছিল এবং শেষ না হওয়া পর্যন্ত ফিরে আসে না। এই সমস্যা একটি ইনজেকশনের দ্বারা সমাধান করা যেতে পারে Disposableমধ্যে Observerপরিবর্তে থেকে এক ফেরার subscribe()

আরএক্সজাভা ২.এক্স এই লাইনগুলি বরাবর স্ক্র্যাচ থেকে পুনরায় ডিজাইন করা হয়েছিল এবং পুনরায় প্রয়োগ করা হয়েছিল । আমাদের একটি পৃথক, ব্যাকপ্রেসার-সচেতন টাইপ রয়েছে Flowableযা অপারেটরগুলির একই সেট সরবরাহ করে ObservableObservableব্যাকপ্রেসার সমর্থন করে না এবং কিছুটা Rx.NET এর সমতুল্য Observable। অভ্যন্তরীণভাবে, সমস্ত প্রতিক্রিয়াশীল প্রকারগুলি তাদের বাতিল হ্যান্ডেলটি তাদের গ্রাহকদের কাছে ইনজেক্ট করে, সিঙ্ক্রোনাস বাতিলকে দক্ষতার সাথে কাজ করতে দেয়।


10

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

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

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

আমি মনে করি এটির মতো কোনও শ্রেণি তৈরি করার জন্য আপনার যত্নবান হওয়া উচিত, তবে এটির স্থান এতদিন থাকবে যতক্ষণ বিকাশকারী মনে রাখে যে এটি কেবল একটি হাব, এবং তাই ধীরে ধীরে কোনও godশ্বর অবজেক্টে রূপান্তরিত হয় না।


2
আপনার উত্তরটির গ্রহণযোগ্যতা অপসারণের জন্য ক্ষমাপ্রার্থী, যা উভয় সহায়ক এবং জ্ঞানদীপ্ত ছিল, কিন্তু আকনারোকদের পরবর্তী প্রতিক্রিয়াটি আরএক্সবাভা দলের কোনও ব্যক্তির কাছ থেকে এসেছিল!
স্কোমিসা

@ এস্কোমিসা যদি আমার নিজের প্রশ্নটি হয় তবে আমি আর কিছুই আশা করতে পারতাম না! কোন অপরাধ নেওয়া হয়নি! :)
নীল

7

.NET এর হয়েছে RX এর সমতুল্য করার Flowableনেই পর্যবেক্ষণযোগ্য । এটিতে এই সমস্ত পদ্ধতি রয়েছে তবে এটি অবিচলিত এবং এক্সটেনশন পদ্ধতি হিসাবে ব্যবহারযোগ্য । আরএক্সের মূল বিষয়টি হ'ল রচনাটি সাবলীল ইন্টারফেস ব্যবহার করে রচিত ।

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


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

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

@ স্পোমিসা জাভার অবজারভেবলেও শত শত পদ্ধতি রয়েছে। সুতরাং আপনি দুটি তুলনা করতে পারেন। তবে প্রধান পার্থক্য হ'ল .NET এর পর্যবেক্ষণযোগ্য স্থিতিশীল এবং সমস্ত পদ্ধতি অচল। জাভা যখন না। এবং এটি বিশাল পার্থক্য। কিন্তু অনুশীলনে, তারা একই আচরণ করে।
ইউফোরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.