Mam kilka pytań dotyczących obsługi wyjątków w Javie. Czytałem trochę o tym i otrzymałem sprzeczne wytyczne.Dobre praktyki dotyczące obsługi wyjątków Java
Best Practices for Exception Handling
Chodźmy dzięki wspomnianym artykule:
Stwierdza, że należy generalnie unikać sprawdzonych wyjątków jeśli „Kod Klient nie może nic zrobić”. Ale co to dokładnie oznacza? Czy wyświetlenie komunikatu o błędzie w GUI jest wystarczającym powodem, aby bulgotać sprawdzony wyjątek? Ale zmusiłoby to programistę GUI do pamiętania, aby uchwycić RuntimeExceptions i ich potomków, aby wyświetlić potencjalne informacje o błędzie.
Drugi widok przedstawiony w tym artykule jest taki, że należy unikać wynalezienia własnych klas wyjątków, chyba że chcę zaimplementować w nich pewne pola/metody celne. Generalnie nie zgadzam się z tym, moja dzisiejsza praktyka była wręcz przeciwna: zawijałem wyjątki w mojej własnej strukturze wyjątków, aby odruchowe cele były realizowane przez klasy, które piszę, nawet jeśli tylko rozszerzają wyjątek bez dodawania nowych metod. Myślę, że pomaga to w bardziej elastycznym posługiwaniu się nimi w wyższych warstwach, a generalnie jest bardziej zrozumiały i czytelny dla programisty, który użyje tych klas.
Zaimplementowałem kod dzisiaj "nowy sposób" przedstawiony w artykule rzucając RuntimeException tu i tam, a następnie pozwól Sonar go przeanalizować. Aby wprowadzić zamieszanie jeszcze bardziej, Sonar oznaczył moje Wyrażenia RuntimeException jako błędy główne z komunikatem takim jak "Unikaj wyrzucania wyjątków typu root, wrap'em we własnych typach".
Wygląda to dość kontrowersyjnie, jak myślisz?
Też słyszałem od jednego z tech-leadów dzisiaj, że właśnie opakowywanie wyjątków jest złe, "ponieważ to jest naprawdę kosztowna operacja dla JVM". Dla mnie, po drugiej stronie, rzucanie SQLExceptions lub IOExceptions wszędzie wygląda jak odrobina przełamywania enkapsulacji ..
Jaki jest twój ogólny stosunek do pytań, które tutaj przedstawiłem?
Kiedy zawinąć wyjątków w moich własnych typów, kiedy nie powinien to zrobić?
Gdzie jest ten punkt „klient nic o tym nie może zrobić, wyrzucić wyjątek środowiska wykonawczego? '
Co z problemami z wydajnością?
Niestety nie jest to konstruktywne dla SO, jak na najczęściej zadawane pytania. Możesz spróbować wypróbować programmers.stackexchange.com - co jest powiedziane, kupić "Efektywną Javę" Joshua Blocha. Każdy, kto poważnie myśli o Javie, powinien posiadać kopię. –
Zdecydowanie migrowałbym to do Programmers.SE, gdybym mógł. Czy był czas, kiedy mogliśmy to zrobić? A może po prostu zawsze nie mogłem się doczekać tego czasu? –
https://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html to dobra lista dobrych praktyk. – bla