আমি বিশ্বাস করি না যে স্থানীয় ক্যাচগুলি একটি অ্যান্টি-প্যাটার্ন, আসলে যদি আমি সঠিকভাবে মনে করি তবে এটি আসলে জাভাতে প্রয়োগ করা হয়েছে!
ত্রুটি পরিচালনা পরিচালনা করার ক্ষেত্রে আমার জন্য কী কী সামগ্রিক কৌশল is আপনি এমন একটি ফিল্টার চাইতে পারেন যা পরিষেবার সীমানায় সমস্ত ব্যতিক্রমকে ধরে ফেলতে পারে, আপনি ম্যানুয়ালি সেগুলি আটকাতে চাইতে পারেন - সামগ্রিক কৌশল রয়েছে ততক্ষণ উভয়ই ঠিক আছে, যা আপনার দলের কোডিং মানের মধ্যে চলে যাবে।
আমি নীচের একটি করতে পারলে ব্যক্তিগতভাবে আমি কোনও ফাংশনের অভ্যন্তরে ত্রুটিগুলি ধরা পছন্দ করি:
- প্রাসঙ্গিক তথ্য যুক্ত করুন (যেমন বস্তুর রাজ্য বা কী চলছে)
- ব্যতিক্রমটি নিরাপদে পরিচালনা করুন (যেমন ট্রাইএক্স পদ্ধতি)
- আপনার সিস্টেমটি কোনও পরিষেবার সীমানা অতিক্রম করে একটি বাহ্যিক গ্রন্থাগার বা এপিআইতে কল করছে
- আপনি একটি ভিন্ন ধরণের ব্যতিক্রম ধরতে এবং পুনর্বিবেচনা করতে চান (সম্ভবত অভ্যন্তরীণ ব্যতিক্রম হিসাবে মূল সহ)
- ব্যতিক্রমটি কিছু নিম্ন মানের পটভূমির কার্যকারিতার অংশ হিসাবে ছুঁড়ে দেওয়া হয়েছিল
যদি এটি এর মধ্যে একটিও না হয় তবে আমি স্থানীয় চেষ্টা / ক্যাপ যোগ করি না। যদি এটি হয় তবে দৃশ্যের উপর নির্ভর করে আমি ব্যতিক্রমটি হ্যান্ডেল করতে পারি (উদাহরণস্বরূপ একটি ট্রাইএক্স পদ্ধতি যা মিথ্যা ফিরিয়ে দেয়) বা পুনর্বিবেচনা করতে পারে তাই ব্যতিক্রমটি বিশ্ব কৌশল দ্বারা পরিচালিত হবে।
উদাহরণ স্বরূপ:
public bool TryConnectToDatabase()
{
try
{
this.ConnectToDatabase(_databaseType); // this method will throw if it fails to connect
return true;
}
catch(Exception ex)
{
this.Logger.Error(ex, "There was an error connecting to the database, the databaseType was {0}", _databaseType);
return false;
}
}
বা একটি পুনর্বিবেচনা উদাহরণ:
public IDbConnection ConnectToDatabase()
{
try
{
// connect to the database and return the connection, will throw if the connection cannot be made
}
catch(Exception ex)
{
this.Logger.Error(ex, "There was an error connecting to the database, the databaseType was {0}", _databaseType);
throw;
}
}
তারপরে আপনি স্ট্যাকের শীর্ষে ত্রুটিটি ধরেন এবং ব্যবহারকারীর কাছে একটি দুর্দান্ত ব্যবহারকারী বান্ধব বার্তা উপস্থাপন করেন।
আপনি যেদিকেই যান না কেন এই পরিস্থিতিগুলির জন্য ইউনিট পরীক্ষা তৈরি করা সর্বদা মূল্যবান যাতে আপনি নিশ্চিত করতে পারেন যে কার্যকারিতা কোনও পরবর্তী তারিখে প্রকল্পের প্রবাহকে পরিবর্তন না করে এবং ব্যাহত করে না।
আপনি কোন ভাষায় কাজ করছেন তবে একটি নেট নেট বিকাশকারী হিসাবে উল্লেখ করেন নি এবং উল্লেখ না করার জন্য এটি বহুবার দেখেছি।
আপনি উত্তর দিবেন না:
catch(Exception ex)
{
throw ex;
}
ব্যবহার করুন:
catch(Exception ex)
{
throw;
}
প্রাক্তনটি স্ট্যাকের ট্রেস পুনরায় সেট করে এবং আপনার শীর্ষ স্তরেরটিকে পুরোপুরি অকেজো করে তোলে!
TLDR
স্থানীয়ভাবে ক্যাচিং কোনও অ্যান্টি-প্যাটার্ন নয়, এটি প্রায়শই কোনও ডিজাইনের অংশ হতে পারে এবং ত্রুটিতে অতিরিক্ত প্রসঙ্গ যুক্ত করতে সহায়তা করতে পারে।