ব্যতিক্রম - "কি ঘটেছে" বনাম "কি করতে হবে"


19

কোডটির গ্রাহককে দরকারী উপায়ে অপ্রত্যাশিত আচরণ পরিচালনা করতে আমরা ব্যতিক্রমগুলি ব্যবহার করি। সাধারণত ব্যতিক্রমগুলি "কী ঘটেছিল" দৃশ্যের আশেপাশে তৈরি করা হয় - যেমন FileNotFound(আমরা আপনাকে নির্দিষ্ট করা ফাইলটি খুঁজে পেতে পারি না) বা ZeroDivisionError(আমরা 1/0অপারেশন করতে পারিনি )।

গ্রাহকের প্রত্যাশিত আচরণ নির্দিষ্ট করার সম্ভাবনা থাকলে কী হবে?

উদাহরণস্বরূপ, কল করুন আমাদের fetchসংস্থান আছে, যা HTTP অনুরোধ সম্পাদন করে এবং পুনরুদ্ধার করা ডেটা ফেরত দেয়। এবং এর মতো ServiceTemporaryUnavailableবা ত্রুটির পরিবর্তে RateLimitExceededআমরা কেবলমাত্র RetryableErrorগ্রাহককে একটি পরামর্শ উত্থাপন করব যে এটি কেবল অনুরোধটি আবার চেষ্টা করা উচিত এবং নির্দিষ্ট ব্যর্থতার বিষয়ে চিন্তা করা উচিত নয়। সুতরাং, আমরা মূলত কলকারকে একটি ক্রিয়া পরামর্শ দিচ্ছি - "কী করব"।

আমরা প্রায়শই এটি করি না কারণ আমরা গ্রাহকদের সমস্ত ব্যবহারের বিষয়টি জানি না। তবে কল্পনা করুন যে এটি একটি নির্দিষ্ট উপাদান যা আমরা একজন আহ্বানকারীটির জন্য ক্রিয়াকলাপের সর্বোত্তম কোর্সটি জানি - তাই আমাদের কি তখন "কী করতে হবে" পদ্ধতির ব্যবহার করা উচিত?


3
এইচটিটিপি কি ইতিমধ্যে এটি করে না? 503 উত্তর দেওয়া সাময়িক ব্যর্থতা, সুতরাং দাবিকারী পুনরায় চেষ্টা করা উচিত, 404 একটি মৌলিক অনুপস্থিতি, তাই এটি পুনরায় চেষ্টা করার কোনও মানে হয় না, 301 এর অর্থ "স্থায়ীভাবে সরিয়ে নেওয়া হয়েছে", সুতরাং আপনার আবার চেষ্টা করা উচিত, তবে অন্য কোনও ঠিকানা সহ, ইত্যাদি
কিলিয়ান Foth

7
অনেক ক্ষেত্রে, আমরা যদি সত্যিই "কী করব" জানতাম, আমরা কেবল কম্পিউটারটি এটি স্বয়ংক্রিয়ভাবে করতে পারি এবং ব্যবহারকারীর এমনকি কিছু ভুল হয়ে গেছে তাও জানতে হবে না। আমি ধরে নিয়েছি যখনই আমার ব্রাউজারটি 301 পায় এটি আমাকে জিজ্ঞাসা না করে কেবল নতুন ঠিকানায় চলে যায়।
Ixrec

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

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

1
এটি সত্যই মনে হচ্ছে আপনি ক্যাচ ব্লক দিয়ে আপনার ব্যতিক্রমগুলি প্রতিস্থাপনের চেষ্টা করছেন। আমরা কেন ব্যাতিক্রমগুলিতে চলে এসেছি - এটি আর নেই if( ! function() ) handle_something();, তবে কোথাও আপনি আসলে কলিং প্রসঙ্গটি জানেন এমন ত্রুটিটি পরিচালনা করতে সক্ষম হলেন - যেমন কোনও ক্লায়েন্টকে বলুন যে আপনার সার্ভার ব্যর্থ হলে সায়স অ্যাডমিনকে কল করতে বা সংযোগটি বাদ পড়লে স্বয়ংক্রিয়ভাবে পুনরায় লোড করুন, তবে আপনাকে সতর্ক করুন যদি ফোনকারী অন্য মাইক্রোসার্চিস হয়। ক্যাচ ব্লকগুলি ক্যাচিং পরিচালনা করতে দিন।
সেপ্টে

উত্তর:


47

তবে কল্পনা করুন যে এটি একটি নির্দিষ্ট উপাদান যা আমরা কলারের পক্ষে ক্রিয়াগুলির সর্বোত্তম কোর্সটি জানি।

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

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

তাদের পছন্দ দিন


4
আমি রাজী. সার্ভারের কেবল সঠিকভাবে তথ্য সরবরাহ করা উচিত। অন্যদিকে ডকুমেন্টেশনের ক্ষেত্রে এ জাতীয় ক্ষেত্রে যথাযথ ব্যবস্থা গ্রহণের যথাযথ রূপরেখার উচিত।
নিল

1
এর মধ্যে একটি ছোট্ট ত্রুটি হ'ল কিছু হ্যাকারের কাছে, কিছু নির্দিষ্ট ব্যতিক্রম তাদের কোড কী করছে সে সম্পর্কে তাদের বেশ কিছু বলতে পারে এবং তারা এটি ব্যবহারের উপায়গুলি বের করতে এটি ব্যবহার করতে পারে।
ফারাপ

3
@ ফারাপ যদি আপনার হ্যাকারদের ত্রুটি বার্তার পরিবর্তে ব্যতিক্রম নিজেই অ্যাক্সেস থাকে তবে আপনি ইতিমধ্যে হারিয়ে গেছেন।
কর্সিকা

2
আমি এই উত্তরটি পছন্দ করি, তবে এটি ব্যতিক্রম যা আমি ব্যতিক্রমগুলির প্রয়োজনীয়তার হিসাবে বিবেচনা করি তা হারিয়ে যায় ... আপনি কীভাবে পুনরুদ্ধার করতে জানতেন, এটি ব্যতিক্রম হবে না! একটি ব্যতিক্রম কেবল তখনই হওয়া উচিত যখন আপনি এ সম্পর্কে কিছু করতে না পারেন: অবৈধ ইনপুট, অবৈধ অবস্থা, অবৈধ সুরক্ষা - আপনি সেগুলি অগ্রগতিতে ঠিক করতে পারবেন না।
corsiKa

1
একমত। যদি আপনি পুনরায় চেষ্টা করা সম্ভব কিনা তা নির্দেশ করার জন্য জোর দিয়ে থাকেন, আপনি সর্বদা প্রাসঙ্গিক কংক্রিট ব্যতিক্রমগুলি উত্তরাধিকার সূত্রে পরিণত করতে পারেন RetryableError
সাপি

18

সতর্কবাণী! সি ++ প্রোগ্রামার এখানে সম্ভবত ব্যতিক্রম-হ্যান্ডলিংয়ের কোনও প্রশ্নের উত্তর দেওয়ার চেষ্টা করা উচিত যা অন্য কোনও ভাষা সম্পর্কে অবশ্যই উত্তর দেওয়ার চেষ্টা করার বিভিন্ন ধারণা নিয়ে আসছে!

এই ধারণা দেওয়া:

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

... একটি জিনিস আমি পরামর্শ দিচ্ছি যে আপনি হয়ত কোনও ক্রিয়াকলাপের সাথে কোনও প্রতিক্রিয়া জানানোর জন্য উদ্বেগকে উদ্বেগের সাথে মিশিয়ে দিচ্ছেন যাতে আপনার কোডটির সাধারণতা হ্রাস পেতে পারে বা ব্যতিক্রমের জন্য প্রচুর "অনুবাদ পয়েন্ট" লাগতে পারে ।

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

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

থ্রোয়ার বনাম ক্যাচার

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

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

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

অন্ধ থ্রোবার

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

উল্টানো দায়িত্ব এবং ক্যাচারকে সাধারণীকরণ করা

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

Lightness Races in Orbit'sসূক্ষ্ম উত্তরের (যা আমি সত্যই একটি উন্নত গ্রন্থাগার-ভিত্তিক মানসিকতা থেকে এসেছি) থেকে বুদ্ধিমান পরামর্শ বিবেচনা করে , আপনি এখনও "কি করবেন" ব্যতিক্রম কেবলমাত্র লেনদেন পুনরুদ্ধারের সাইটের কাছাকাছি নিক্ষেপ করার জন্য প্রলুব্ধ হতে পারেন।

এখান থেকে একটি মধ্যস্থতাকারী, সাধারণ লেনদেন-হ্যান্ডলিং সাইট খুঁজে পাওয়া সম্ভব হতে পারে যা প্রকৃতপক্ষে "কী করতে হবে" উদ্বেগকে কেন্দ্রবিন্দু করে কিন্তু তবুও ধরার প্রসঙ্গে।

এখানে চিত্র বর্ণনা লিখুন

এটি কেবল তখনই প্রযোজ্য যখন আপনি কোনও ধরণের সাধারণ ফাংশন ডিজাইন করতে পারেন যা এই সমস্ত বাহ্যিক লেনদেন ব্যবহার করে (উদা: একটি ফাংশন যা কল করার জন্য অন্য কোনও ফাংশন সরবরাহ করে বা এই মধ্যবর্তী লেনদেন সাইটের মডেলিং করে মধ্যস্থতার আচরণের সাথে একটি বিমূর্ত লেনদেন বেস শ্রেণীর কাজ করে যা পরিশীলিত ক্যাচিং করে does )।

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

def general_catcher(task):
    try:
       task()
    except SomeError1:
       # do some uniformly-designed recovery stuff here
    except SomeError2:
       # do some other uniformly-designed recovery stuff here
    ...

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

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


2
+1 টি। আমি আগের মতো "ব্লাইন্ড থ্রোয়ার" ধারণাটি কখনও শুনিনি, তবে আমি কীভাবে ব্যতিক্রম হ্যান্ডেলিংয়ের কথা ভাবি তার সাথে এটি খাপ খায়: ত্রুটিটি ঘটেছিল তা বর্ণনা করুন, কীভাবে এটি পরিচালনা করা উচিত তা ভেবে দেখবেন না। আপনি যখন পুরো স্ট্যাকের জন্য দায়বদ্ধ হন তখন দায়িত্বগুলি পরিষ্কারভাবে আলাদা করা শক্ত (তবে গুরুত্বপূর্ণ!), এবং কলি সমস্যাগুলি সম্পর্কে অবহিত করার জন্য, এবং সমস্যাগুলি পরিচালনার জন্য আহ্বানকারী। কলি কেবল জানে যে এটি কী করতে বলা হয়েছিল, কেন নয়। হ্যান্ডলিং ত্রুটিগুলি 'কেন' এর প্রসঙ্গে করা উচিত, সুতরাং: কলারে।
সুজোরড জব পোস্টমাস

1
(এছাড়াও: আমি মনে করি না যে আপনার উত্তরটি সি ++ নির্দিষ্ট, তবে সাধারণভাবে ব্যতিক্রম হ্যান্ডলিংয়ের ক্ষেত্রে প্রযোজ্য)
স্যাজার্ড জব পোস্টমাস

1
@ সোজারডজবপোস্টমাস ইয়ে ধন্যবাদ! "ব্লাইন্ড থ্রোয়ার" হ'ল একটি বোকামি উপমা যা আমি এখানে নিয়ে এসেছি - আমি জটিল প্রযুক্তিগত ধারণাগুলি হজম করতে খুব স্মার্ট বা তাত্পর্য নই, তাই আমি প্রায়শই আমার নিজের বোঝাপড়া ব্যাখ্যা করার ও উন্নত করার চেষ্টা করার জন্য খুব কম চিত্র এবং উপমা খুঁজে পেতে চাই কিছু. হয়তো কোনও দিন আমি প্রচুর কার্টুন আঁকায় ভরা একটি সামান্য প্রোগ্রামিং বই লেখার জন্য নিজের পথে কাজ করার চেষ্টা করতে পারি। :-D

1
হেই, এটি একটি দুর্দান্ত ছোট্ট চিত্র। চোখের পাতায় পরা এবং বেসবল-আকৃতির ব্যতিক্রমগুলি ছুঁড়ে ফেলা একটি ছোট্ট কার্টুন চরিত্র, কে তাদের ধরবে (বা তারা আদৌ ধরা পড়বে কিনা) তা নিশ্চিত নয়, তবে অন্ধ ছোঁড়াছুড়ি হিসাবে তাদের দায়িত্ব পালন করছে।
ব্ল্যাকলাইট জ্বলজ্বল

1
@ ড্রঙ্ককোডার: দয়া করে আপনার পোস্টগুলিকে ভাঙচুর করবেন না। আমাদের কাছে ইতিমধ্যে ইন্টারনেটে পর্যাপ্ত বোরকেন স্টাফ রয়েছে। যদি আপনার মুছে ফেলার কোনও ভাল কারণ থাকে তবে মডারেটরের মনোযোগের জন্য আপনার পোস্টটিকে ফ্ল্যাগ করুন এবং আপনার কেস করুন।
রবার্ট হার্ভে

2

আমি মনে করি বেশিরভাগ সময় এই পরিস্থিতিতে কীভাবে পরিচালনা করতে হবে তা বলার জন্য ফাংশনে যুক্তি দেওয়া ভাল হবে।

উদাহরণস্বরূপ, একটি ফাংশন বিবেচনা করুন:

Response fetchUrl(URL url, RetryPolicy retryPolicy);

আমি retryPolicy.noRetries () বা retryPolicy.retries (3) বা যাই হোক না কেন পাস করতে পারি। পুনরায় চেষ্টাযোগ্য ব্যর্থতার ক্ষেত্রে, এটি আবার চেষ্টা করা উচিত কিনা তা সিদ্ধান্ত নিতে নীতিটি পরামর্শ করবে।


যদিও কল সাইটে ফিরে ব্যতিক্রম ছুঁড়ে ফেলার সাথে এর আসলে তেমন কিছু করার নেই। আপনি কিছুটা আলাদা কথা বলছেন, যা ঠিক আছে তবে আসলেই প্রশ্নের অংশ নয় ..
মনিকা

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

2
@ উইনস্টনওয়ার্ট: যদিও আমি লাইটনেসেসেসিনআরবাইটের সাথে একমত, আমি আপনার বক্তব্যটিও দেখতে পাচ্ছি, তবে এটিকে একই নিয়ন্ত্রণের উপস্থাপনের ভিন্ন উপায় হিসাবে মনে করি। তবে, বিবেচনা করবেন না যে আপনি সম্ভবত পাস করতে চান new RetryPolicy().onRateLimitExceeded(STOP).onServiceTemporaryUnavailable(RETRY, 3)বা কিছু, কারণ সম্ভবত RateLimitExceededথেকে অন্যরকম পরিচালনা করা দরকার ServiceTemporaryUnavailable। এটি লেখার পরে, আমার চিন্তাভাবনাটি হল: ভাল একটি ব্যতিক্রম ছুঁড়ে ফেলুন, কারণ এটি আরও নমনীয় নিয়ন্ত্রণ দেয়।
সুজোরড জব পোস্টমাস

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