اصول استفاده از Exception
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;
}
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.