1- Exception ها، استثنا هستن! فقط باید از اونها برای مواجه با مشکلات غیر قابل پیش بینی استفاده کنید.
2- هرگز از Exception برای کنترل جریان/flow نرم افزار استفاده نکنید. اینکار باعث میشه که نتونید مسیر اجرای کد رو دنبال کنید و پرفورمنس نرم افزار هم کاهش پیدا میکنه. (مثل دستور GoTo که در برخی زبانها وجود داره)
3- هرگز شی Exception رو بعنوان مقدار و خروجی return
نکنید.
4- Exception فقط باید حاوی اطلاعات رخداد/رویداد باشد و نباید حاوی پارامترها(یا اطلاعات اضافی) باشه که روی نحوه انجام و منطق داخل بلوک catch
تاثیر بذاره.
5- هرگز Exception های زیرساختی/داخلی مثل SystemException
, OutOfMemoryException
, StackOverflowException
, ComException
, ExecutionEngineException
, NullReferenceException
, IndexOutOfRangeException
رو پرتاب نکنید.
6- برای حالت debug نرم افزار Exception پرتاب نکنید.
7- داخل متد toString()
کلاس هاتون Exception پرتاب نکنید. اینکار عمل debugging رو سخت می کنه. (از این متد برای debug کردن استفاده میشه)
8- داخل توابع مقایسه ای(true/false) و equal هرگز Exception پرتاب نکنید.
9- هرگز StackOverflowException
و OutOfMemoryException
رو catch نکنید. اینها غیرقابل کنترل و هندل شدن هستن.
10- همیشه Exception های سطح پایین و general رو به Exception های ریز تر و خاص تر wrap کنید. مثل:
NotFoundException
-> FileNotFoundException
/URLNotFoundException
11- همیشه عملیات پاکسازی/Cleanup رو در بلوک finally
قراربدید و نه در بلوک
. بلوک catchfinally
همیشه اجرا میشه اما بلوک catch
فقط هنگام رخداد Exception اجرا میشه.
12- فقط باید زمانی Exception رو catch
کنید که میتونید بخوبی مشکل رو handle و recovery کنید. درغیراینصورت بهتره Exception رو catch
نکنید. (چون درواقع صرفا مخفیش کردید)
13- بهتره که هنگام timeout شدن یک عملیات، TimeoutException پرتاب کنید نه اینکه توسط if/else اونرو handle کنید.
14- در بلوک finally
هرگز Exception پرتاب نکنید.
15- صرفا Log و rethrow کردن یک Exception در بلوک catch
بمعنای handle کردنش نیست.
16- هرگز Exception مادر/عمومی مثل Exception
رو throw نکنید.
17- برای wrap کردن Exception همیشه از کلاس مادر Exception
یا RuntimeException
ارث بری کنید.
18- بهتره در بلوک catch
از if/else
استفاده نکنید تا از ایجاد branch های تودرتو جلوگیری بشه.
19- همیشه پیامهای Exception رو در فایلی log کنید.
20- بجای throw ex
از throw
استفاده کنید تا پیامهای stacktrace قبلی و کنونی موجود در ex حفظ بشن.
catch(Exception ex)
{
throw;
}