Я застряг, вирішуючи, як поводитися з винятками у своїй програмі.
Набагато, якщо мої проблеми з винятками виникають з 1) доступу до даних через віддалений сервіс або 2) десеріалізації об'єкта JSON. На жаль, я не можу гарантувати успіх для жодної з цих задач (перервати підключення до мережі, неправильно сформований об’єкт JSON, який не піддається моєму контролю).
Як результат, якщо я зіткнувся з винятком, я просто перехоплюю його у межах функції та повертаю FALSE до абонента. Моя логіка полягає в тому, що все, хто телефонує, дійсно піклується про те, якщо завдання було успішним, а не чому воно не було успішним.
Ось приклад типового коду (в JAVA) типового методу)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
Я думаю, що цей підхід чудовий, але мені дуже цікаво дізнатись, які найкращі практики стосуються управління винятками (чи слід насправді переробляти виняток аж до стека викликів?).
Підсумовуючи основні питання:
- Чи добре просто виловлювати винятки, але не переповнювати їх чи офіційно повідомляти систему (через журнал чи повідомлення користувачеві)?
- Які найкращі практики існують для винятків, які не призводять до того, що все вимагає блоку спробу / лову?
Слідування / редагування
Дякуємо за всі відгуки, знайшли чудові джерела щодо управління винятками в Інтернеті:
- Кращі практики поводження з винятками | O'Reilly Media
- Кращі практики роботи з винятками в .NET
- Найкращі практики: управління винятками (стаття вказує на copy.org copy.org)
- Винятки, що поводяться з малюнками
Здається, що управління винятками - одна з тих речей, які залежать від контексту. Але найголовніше, слід бути послідовним у тому, як вони керують винятками в системі.
Крім того, слідкуйте за кодом гниття за допомогою надмірної спроби / лову або не надаючи винятку його поваги (виняток попереджає систему, що ще потрібно попередити?).
Також це хороший коментар щодо вибору від m3rLinEz .
Я схильний погоджуватися з Андерсом Хейльсбергом і з вами, що більшість людей, які телефонують, дбають лише про те, успішна чи ні операція.
З цього коментаря виникає кілька питань, над якими слід замислюватися при роботі з винятками:
- Який сенс кидати цей виняток?
- Як має сенс поводитися з цим?
- Чи дійсно абонент дбає про виняток чи їх просто хвилює, чи дзвінок був успішним?
- Чи вимушене примушувати абонента керувати потенційним винятком?
- Ви поважаєте ідоми мови?
- Вам справді потрібно повернути прапор успіху, як булевий? Повернення булевого (або int) - це більше C-мислення, ніж Java (у Java ви просто обробляєте виняток).
- Дотримуйтесь конструкцій управління помилками, пов'язаних з мовою :)!