চেক করা ব্যতিক্রম ধরা এবং রানটাইম এক্সসেপশন নিক্ষেপ করা কি ভাল অনুশীলন?


70

আমি একজন সহকর্মীর কিছু কোড পড়েছি এবং দেখতে পেয়েছি যে তিনি প্রায়শই বিভিন্ন ব্যতিক্রমগুলি ধরেন এবং তারপরে সর্বদা একটি 'রানটাইম এক্সেকশন' ছুড়ে দেন। আমি সবসময় ভাবতাম এটি খুব খারাপ অভ্যাস is আমি কি ভূল?


17
"চেক করা ব্যতিক্রমগুলির মূল্যটি একটি উন্মুক্ত / বন্ধ নীতি লঙ্ঘন you "এর অর্থ হ'ল সফ্টওয়্যারটির নিম্ন স্তরের পরিবর্তনটি অনেক উচ্চ স্তরের স্বাক্ষর পরিবর্তনকে বাধ্য করতে পারে।" Oberরবার্ট সি মার্টিন, «ক্লিন কোড», পৃষ্ঠা 107
সানগো

6
এটি জেনে রাখা আকর্ষণীয় যে জিম ওয়াল্ডো "জাভা: দ্য গুড পার্টস" শপ.অরেলি / প্রোডাক্ট / 9780596803742.do এ যাচাই করা ব্যতিক্রমগুলির বিরুদ্ধে rants দিয়েছেন saying আমরা এটি 6 মাস আগে আমাদের জিউজিতে পড়েছিলাম যখন এটি প্রকাশিত হয়েছিল এবং মনে হয়েছিল এটি ভাল পরামর্শের মতো! এখন, কার্যকরী প্রোগ্রামিং সহ, চেক করা ব্যতিক্রমগুলি সম্পূর্ণরূপে অনর্থক। স্কেলা এবং কোটলিনের মতো ভাষা এমনকি তাদের নেই। আমি চেক না করা ব্যতিক্রমগুলিতে চেক করা মোড়ানো শুরু করেছি।
গ্লেনপিটারসন

আপনি @GlenPeterson এছাড়াও FP মধ্যে পরামর্শ execetions পুরাপুরি এড়াতে এবং পরিবর্তে সমষ্টি ধরনের ব্যবহার করতে হবে
জে।

এছাড়া কার্মিক ইন্টারফেস সুস্পষ্ট ক্ষেত্রে: builtin কার্মিক ইন্টারফেসগুলি (অর্থাত Function, Predicateইত্যাদি) না parametrized না ক্লজ ছোঁড়ার। এর অর্থ আপনি প্রয়োজন কোনো প্রবাহ () পদ্ধতির ভেতরের লুপ, ধরা মোড়ানো, এবং যে কোনো পরীক্ষিত ব্যতিক্রম rethrow। এটি এবং নিজেই আমার জন্য ভারসাম্য টিপস যাচাই করা ব্যতিক্রমগুলি খারাপ ধারণা কিনা।
জোয়েল করনেট

আপনার ব্যতিক্রমের মাধ্যমে অর্থ যোগাযোগের জন্য রানটাইমএক্সসেপ্টের কাস্টম সাবক্লাস তৈরির ক্ষেত্রে কোনও ভুল নেই।
জোয়েল করনেট

উত্তর:


55

আপনার সহকর্মী ভুলভাবে কিছু করছে কিনা তা জানার জন্য আমি পর্যাপ্ত প্রসঙ্গটি জানি না, তাই আমি সাধারণ অর্থে এ নিয়ে তর্ক করতে যাচ্ছি।

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

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

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


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

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

40

এটি ভাল হতে পারে । দয়া করে পড়ুন:

http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html

বেশিরভাগ সময়, ক্লায়েন্ট কোড এসকিউএলএক্সেপশন সম্পর্কে কিছু করতে পারে না। এগুলি চেক করা ব্যতিক্রমগুলিতে রূপান্তর করতে দ্বিধা করবেন না। নিম্নলিখিত কোডের অংশটি বিবেচনা করুন:

public void dataAccessCode(){
  try{
      ..some code that throws SQLException
  }catch(SQLException ex){
      ex.printStacktrace();
  }
} 

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

public void dataAccessCode(){
   try{
       ..some code that throws SQLException
   }catch(SQLException ex){
       throw new RuntimeException(ex);
   }
} 

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

চেক করা ব্যতিক্রম ছুঁড়ে ফেলা এবং এটি থেকে পুনরুদ্ধার করতে সক্ষম না হওয়া সহায়তা করছে না।

কিছু লোক এমনকি মনে করেন যে চেক করা ব্যতিক্রমগুলি মোটেই ব্যবহার করা উচিত নয়। দেখুন http://www.ibm.com

সম্প্রতি, ব্রুস একেল এবং রড জনসন সহ বেশ কয়েকজন সুপরিচিত বিশেষজ্ঞ প্রকাশ্যে বলেছিলেন যে তারা প্রথমে চেক করা ব্যতিক্রম সম্পর্কে গোঁড়া অবস্থানের সাথে সম্পূর্ণরূপে একমত হয়েছিলেন, তারা এই সিদ্ধান্তে পৌঁছেছেন যে চেক করা ব্যতিক্রমগুলির একচেটিয়া ব্যবহার এতটা ভাল ধারণা নয় প্রথমে উপস্থিত হয়েছিল এবং পরীক্ষিত ব্যতিক্রমগুলি অনেক বড় প্রকল্পের সমস্যার একটি গুরুত্বপূর্ণ উত্স হয়ে দাঁড়িয়েছে। এককেল আরও চরম দৃষ্টিভঙ্গি নিয়ে পরামর্শ দিয়েছিল যে সমস্ত ব্যতিক্রম চেক করা উচিত নয়; জনসনের দৃষ্টিভঙ্গি আরও রক্ষণশীল, তবে এখনও পরামর্শ দেয় যে পরীক্ষিত ব্যতিক্রমগুলির জন্য গোঁড়া পছন্দ বেশি is (এটি লক্ষ করার মতো বিষয় যে সি # এর স্থপতিরা, যিনি প্রায় অবশ্যই জাভা প্রযুক্তি ব্যবহারের প্রচুর অভিজ্ঞতা অর্জন করেছিলেন, সমস্ত ব্যতিক্রমগুলি চেক করা ব্যতিক্রম করে ভাষা নকশা থেকে চেক করা ব্যতিক্রমগুলি বাদ দিতে বেছে নিয়েছিলেন।

একই লিঙ্ক থেকে:

চেক না করা ব্যতিক্রমগুলি ব্যবহার করার সিদ্ধান্তটি জটিল এবং এটি স্পষ্ট যে এর কোনও সুস্পষ্ট উত্তর নেই। সূর্যের পরামর্শ হ'ল এগুলিকে কোনও কিছুর জন্য ব্যবহার না করা, সি # পদ্ধতির (যা এক্কেল এবং অন্যরা সম্মত হন) হ'ল তাদের সমস্ত কিছুর জন্য ব্যবহার করা। আবার কেউ কেউ বলে, "মাঝের মাঠ আছে"।


13

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


1
ইঙ্গিতটির জন্য ধন্যবাদ। এবং যদি তিনি এমন কোনও কাস্টম ব্যতিক্রম ছুঁড়ে দেন যা তিনি প্রয়োগ করেছেন যা সরাসরি রানটাইম এক্সেকশন থেকে উত্তরাধিকার সূত্রে প্রাপ্ত?
রোফকপ্ট্র এক্সসেপশন

27
@Gary Buyn: অনেক মানুষ মনে করেন যে চেক করা ব্যতিক্রম একটি ব্যর্থ ভাষা নকশা পরীক্ষা এবং তারা বেশী যে ব্রাত্যভাবে না অভ্যাস একটি বিষয় হিসাবে ব্যবহার করা উচিত, হয়।
মাইকেল বর্গওয়ার্ট

7
@ গ্যারি বুয়েন: এখানে একটি নিবন্ধ যা বিতর্কটিকে বেশ ভালভাবে রূপরেখা দিয়েছে: আইবিএমডেডিওলডিভারকস / জাভা / লিবারি / জেজিপিপি৫৫২৪৪ / ইন্ডেক্স এইচটিটিএমএল নোট যে জাভা এই বৈশিষ্ট্যটি প্রবর্তনের ১৫ বছর পরেও অন্য কোনও ভাষা এটি গ্রহণ করে নি, এবং সি ++ একটি অনুরূপ বৈশিষ্ট্য হ্রাস করেছে।
মাইকেল বর্গওয়ার্ট

7
@ সি_মেকার: আসলে, ব্লচ বেশিরভাগই গোঁড়া দৃষ্টিভঙ্গিকে প্রচার করে এবং আপনার মন্তব্যটি মূলত আরও ব্যতিক্রম, সময়কাল ব্যবহার সম্পর্কে বলে মনে হয়। আমার দৃষ্টিভঙ্গি হ'ল চেক করা ব্যতিক্রম ব্যবহারের একমাত্র বৈধ কারণ হ'ল এমন শর্তের জন্য যা আপনি আশা করেন যে সমস্ত কলার তাত্ক্ষণিকভাবে পরিচালনা করবেন।
মাইকেল বর্গওয়ার্ট

14
অযথা নিক্ষেপ করা চেক ব্যতিক্রমগুলি এনক্যাপসুলেশন লঙ্ঘন করে। 'গেটঅ্যাকউন্টস ()' এর মতো একটি সহজ পদ্ধতি যদি আপনাকে একটি 'এসকিউএলএক্সসেপশন', 'নলপয়েন্টারএক্সসেপশন' বা 'ফাইলনটফাউন্ডএক্সেপশন' ফেলে দেয় তবে আপনি কী করবেন? তুমি কি এটি চালাতে পারবে? আপনি সম্ভবত এটি 'ধরা' (ব্যতিক্রম ই) it} '। এছাড়াও, সেই ব্যতিক্রমগুলি - এর বাস্তবায়ন নির্দিষ্ট! এটি চুক্তির অংশ হওয়া উচিত নয়! আপনার কেবলমাত্র একটি ত্রুটি ছিল তা জানতে হবে । এবং বাস্তবায়ন পরিবর্তন হলে কী হবে? হঠাৎ করে সমস্ত কিছু বদলাতে হবে, কারণটির ফলে আর 'এসকিউএলএক্সসেপশন' নিক্ষেপ করা হবে না, বরং এর পরিবর্তে 'পার্সএক্সএমএলএক্সসেপশন'!
কেএল

8

এটা নির্ভর করে.

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

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

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


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

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

2
উল্লেখ করার জন্য আপনাকে ধন্যবাদ exception handling layer- যেমন একটি ওয়েব অ্যাপ্লিকেশন, একটি ফিল্টার।
জেক টরন্টো

5

আমি এই সম্পর্কে মন্তব্য পেতে চাই, কিন্তু আমি খুঁজে বার যখন এটি অগত্যা খারাপ অভ্যাস হয় না। (বা ভয়ঙ্করভাবে খারাপ)। তবে আমি ভুল হতে পারে।

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

রানটাইম এক্সসেপশন ধরে নেওয়া পরে ধরা পড়ে এবং তা উপেক্ষা করা হয় না, এটি কোনও অনারআররিজিউমনেস্টের কাছে নেই।

OnErrorResumeNext তখন ঘটবে যখন কেউ ব্যতিক্রম ধরা পড়ে এবং কেবল এটিকে উপেক্ষা করে বা কেবল প্রিন্ট করে। এটি প্রায় সব ক্ষেত্রেই মারাত্মকভাবে খারাপ অভ্যাস।


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

@ মিশেলক সমস্যাটি "ব্যবহারিক ত্রুটির সাথে তত কাছাকাছি" অনুশীলনের প্রায়শই অর্থ "বেশ কয়েকটি হস্তক্ষেপকারী স্তরগুলির মাধ্যমে যা আপনার সরাসরি নিয়ন্ত্রণের বাইরে থাকে" means উদাহরণস্বরূপ, যদি আমার ক্লাসকে একটি নির্দিষ্ট ইন্টারফেস প্রয়োগ করতে হয় তবে আমার হাত বাঁধা। এটি কল ট্রিতে নির্বিচারে ঘটতে পারে। এমনকি ইন্টারফেসগুলি আমার নিয়ন্ত্রণে থাকা অবস্থায়, ছোঁড়া ঘোড়া ঘোষণাগুলি অ্যাবস্ট্রাকশনকে ফাঁস করে দিতে পারে যদি কেবলমাত্র কংক্রিটের বাস্তবায়নগুলির একটি সীমিত সেট থাকে যা অনুধাবন করতে পারে throw প্রতিটি ক্লায়েন্টকে কয়েকটির বাস্তবায়নের বিশদের জন্য মূল্য প্রদান করা কোনও দুর্দান্ত ডিজাইনের ট্রেড অফ আইএমও নয়।
টিম সেগুইন 10'17

4

টি এল; ডিআর

প্রতিজ্ঞা

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

উপসংহার

আমরা একটি রানটাইম ব্যতিক্রম হিসাবে একটি চেক করা ব্যতিক্রম পুনর্বিবেচনা করতে পারি যদি প্রচার বা ইন্টারফেস কোড ধরে নেওয়া হয় যে অন্তর্নিহিত বাস্তবায়ন বাহ্যিক অবস্থার উপর নির্ভর করে, যখন এটি পরিষ্কারভাবে হয় না।


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

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

উদাহরণস্বরূপ, নিম্নলিখিতগুলির জন্য একটি রানটাইম ব্যতিক্রম নিক্ষেপ করা উপযুক্ত:

float nan = 1/0;

এটি শূন্য রানটাইম ব্যতিক্রম দ্বারা একটি বিভাগ ফেলবে। কোডটি ত্রুটিযুক্ত হওয়ায় এটি উপযুক্ত ।

বা উদাহরণস্বরূপ, এখানে এর HashMapনির্মাণকারীর একটি অংশ :

public HashMap(int initialCapacity, float loadFactor) {
    if (initialCapacity < 0)
        throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity);
    if (initialCapacity > MAXIMUM_CAPACITY)
        initialCapacity = MAXIMUM_CAPACITY;
    if (loadFactor <= 0 || Float.isNaN(loadFactor))
        throw new IllegalArgumentException("Illegal load factor: " +
                loadFactor);
    // more irrelevant code...
}

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

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

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

মিঃ মগগলসের উত্তরে উল্লিখিত উদাহরণটি নেওয়া যাক:

public void dataAccessCode(){
   try{
       ..some code that throws SQLException
   }catch(SQLException ex){
       throw new RuntimeException(ex);
   }
}

চেক করা ব্যতিক্রমটি পরিচালনা করার জন্য এটি সঠিক উপায় নয়। এই পদ্ধতির সুযোগে ব্যতিক্রমটি সামলানোর কেবলমাত্র অক্ষমতা মানেই এই নয় যে অ্যাপটি ক্র্যাশ করা উচিত। পরিবর্তে, এটি এর মতো উচ্চতর স্কোপে প্রচার করা উপযুক্ত:

public Data dataAccessCode() throws SQLException {
    // some code that communicates with the database
}

যা কলারের মাধ্যমে পুনরুদ্ধারের সম্ভাবনার পক্ষে অনুমতি দেয়:

public void loadDataAndShowUi() {
    try {
        Data data = dataAccessCode();
        showUiForData(data);
    } catch(SQLException e) {
        // Recover by showing an error alert dialog
        showCantLoadDataErrorDialog();
    }
}

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

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

এখন যেহেতু আমরা এই পার্থক্যটি স্পষ্ট পেয়েছি, রানটাইম ব্যতিক্রম হিসাবে চেক করা ব্যতিক্রমটিকে পুনর্বিবেচনা করা ঠিক হয়ে গেলে আমরা অনুমান করতে এগিয়ে যেতে পারি।


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

নিম্নোক্ত বিবেচনা কর:

StringReader sr = new StringReader("{\"test\":\"test\"}");
try {
    doesSomethingWithReader(sr); // calls #read, so propagates IOException
} catch (IOException e) {
    throw new IllegalStateException(e);
}

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


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


2

স্বতন্ত্র অ্যাপ্লিকেশন জন্য। যখন আপনি জানেন যে আপনার অ্যাপ্লিকেশনটি যেভাবে ব্যতিক্রম করতে পারে তা পরিচালনা করতে পারে না, পরিবর্তে চেক করা রানটাইম এক্সেপশন নিক্ষেপ করার পরিবর্তে ত্রুটি নিক্ষেপ করুন, অ্যাপ্লিকেশনটি ক্রাশ হতে দিন, বাগ-প্রতিবেদনের জন্য আশা করুন এবং আপনার অ্যাপ্লিকেশনটি ঠিক করুন। (দেখুন উত্তর এর mrmuggles প্রো এবং বিরূদ্ধে এর বনাম অবারিত চেক করা এর একটি গভীরতা আলোচনার জন্য।)


2

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


1

পুরো "পরীক্ষিত ব্যতিক্রম" জিনিসটি একটি খারাপ ধারণা।

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

  1. একজন কলার থেকে কলি হয়ে, তর্ক করার মাধ্যমে।

  2. কলি থেকে কলারের কাছে, ফেরতের মান হিসাবে to

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

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

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


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

0

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

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

উদাহরণস্বরূপ Integer.parseInt (স্ট্রিং) একটি স্ট্রিং নেয় এবং এর পূর্ণসংখ্যার সমতুল্য ফেরত দেয় এবং স্ট্রিংটি সংখ্যাসূচক না হলে ক্ষেত্রে নম্বর ফরম্যাটএক্সসেপশন নিক্ষেপ করে। এখন কল্পনা করুন যে কোনও ক্ষেত্রের সাথে একটি ফর্ম জমা দেওয়ার ageপদ্ধতিটি এই পদ্ধতির মাধ্যমে রূপান্তরিত হয়েছে তবে ক্লায়েন্ট ইতিমধ্যে তার পক্ষ থেকে বৈধতা নিশ্চিত করেছে, সুতরাং ব্যতিক্রমের চেক জোর করার কোনও কারণ নেই।


0

এখানে সত্যিই বেশ কয়েকটি প্রশ্ন রয়েছে

  1. চেক করা ব্যতিক্রমগুলি কি আপনার চেক না করা উচিত?

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

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

  1. আপনি যদি চেক না করা ব্যতিক্রমটিকে একটি পরীক্ষিত ব্যতিক্রম হিসাবে রূপান্তর করতে চলেছেন তবে কীভাবে এটি করা উচিত।

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

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


0

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

কয়েক বছর ধরে আমি খুঁজে পেয়েছি যে সর্বদা কেউ একটি তুচ্ছ সমস্যা সম্পর্কে বিভ্রান্ত থাকে কারণ তারা কিছু মৌলিক বিষয়গুলির বোঝার অভাব বোধ করে।

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

আসুন ধরা যাক আপনার অ্যাপের নীট আপ নেট, টিসিপি, এইচটিটিপি, আরএসটি, ডেটা মডেল, ব্যবসায় থেকে নিম্নলিখিত স্তর রয়েছে।

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

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

কোনও ব্যতিক্রমকে স্তর থেকে স্তর পর্যন্ত স্থানান্তরিত করার সময় এটির প্রতিটি দিক এবং এটি বর্তমান স্তর যে বিমূর্ততাটি সরবরাহ করে তার জন্য এটি কী বোঝায় তা পুনর্বিবেচনা করা গুরুত্বপূর্ণ। এটি অন্যের সাথে ব্যতিক্রমটি প্রতিস্থাপন করা হতে পারে, এটি বেশ কয়েকটি ব্যতিক্রমকে একত্রিত করতে পারে। এটি তাদের চেক করা থেকে চেক করা বা বিপরীত দিকে রূপান্তর করতে পারে।

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


-2

আমার মতে,

ফ্রেমওয়ার্ক স্তরে, একই জায়গায় চালকটির কাছে ধরা চেষ্টা আরও ব্লক কমাতে আমাদের রানটাইম ব্যতিক্রমগুলি হওয়া উচিত।

অ্যাপ্লিকেশন স্তরে, আমরা খুব কমই রানটাইম ব্যতিক্রম ক্যাপচার করি এবং আমি মনে করি এই অনুশীলনটি খারাপ ছিল।


1
এবং কাঠামো স্তরের এই ব্যতিক্রমগুলি নিয়ে আপনি কী করবেন?
ম্যাথিউউ

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