بسیار دیده ام که برنامه نویسان به هر قیمتی سعی در جلوگیری از کرش ها می کنند. اما اکسپشن هایی را که نمی شود کنترل کرد واقعا آزار دهنده هستند؟ و در این مورد چک کردن null ها جواب ما است ؟
در حقیقت، در بعضی مواقع عمدا میخواهید که اپ شما کرش کند. این پست به شما توضیح خواهد داد که چرا ، و به شما نیز چند نکته ی کاربردی پیشنهاد می دهد.
پیش در آمد
در این پست بر روی چک کردن فیلدهای خالی برای راحتی تمرکز کرده است، اما می توان به راحتی به مباحث دیگر نیز عمومی سازی کرد.
ساختار چک کردن فیلد های خالی
(THE NULL CHECK ARCHITECTURE)
در حال حاضر ما یک اپلیکیشن ساده داریم که فقط لیستی از بازیکنان فوتبال را نشان می دهد:
public void showPlayers(List<Player> soccerPlayers) {
if (soccerPlayers == null) return;
// some awesome code here
}
همه چی حل شد!
نه صبر کنید… لیست می تواند خالی هم باشد:
public void showPlayers(List<Player> soccerPlayers) {
if (soccerPlayers == null || soccerPlayers.isEmpty()) return;
// some awesome code here
}
حال در مورد آن پنج لایه ای آرتیتکت بازیکنان فوتبال که در زیر ui قرار دارند چی ؟ آیا باید در هر لایه از آنها چک کردن خود را قرار بدهیم؟
قبل از آنکه بدانید باید چک کردن فیلد خالی را در همه جا اعمال کنید!
مشکل چک کردن فیلد خالی
واضح است که، چک کردن فیلد های خالی کد های شما را به طور قابل ملاحظه ای در هم و برهم می کند.
اما این تنها مشکل نیست! برای اینکه هنگامی که آن را در جایی استفاده کنید، در همه جا از آن استفاده خواهید کرد.
public void showPlayers(List<Player> soccerPlayers) {
if (soccerPlayers == null) return;
if (myRecyclerView == null) return;
if (myRecyclerView.getAdapter() == null) return;
// some awesome code here
}
حتی وقتی که به آنها احتیاج نداشته باشید، شما هنوز هم آن را اضافه می کنید… اجازه دهید لحظه ای عمیق تر شوید. مشکل دقیقا کجاست؟
کرش کردن برای نجات
اگر اپلیکیشن شما به مرحله ای برود که برای آن طراحی نشده است، باید کرش کند. هیچ راه عمومی برای رسیدگی به آن نیست.متدها نباید ورودی های خود را چک کنند برای هر سناریو که ممکن است اتفاق بیافتد. به جای آن، شما باید دقت کنید که آن ورودی چیست و برای آن آماده باشید.
اکسپشن های غیرمنتظر خوب هستند برای اینکه :
- با کرش کردن اپلیکیشن بلافاصله به شما اطلاع میدهند.
- مشکلات را هایلایت میکند به جای آنکه به صورت پنهان باشند.
- مشکل را دنبال کنید تا به آن برسید.
- به کرش ریپورت شما فرستاده می شود .
منبع : http://jeroenmols.com