Czy dobrą praktyką jest wdrażanie bezużytecznej obsługi wyjątków, na wypadek, gdyby inna część kodu nie została poprawnie zakodowana?
Podstawowy przykład
Prosty, więc nie tracę wszystkich :).
Powiedzmy, że piszę aplikację, która wyświetli informacje o osobie (imię i nazwisko, adres itp.), Dane zostaną wyodrębnione z bazy danych. Powiedzmy, że to ja koduję część interfejsu użytkownika, a ktoś inny pisze kod zapytania DB.
Teraz wyobraź sobie, że specyfikacje Twojej aplikacji mówią, że jeśli dane osoby są niekompletne (powiedzmy, że brakuje nazwy w bazie danych), osoba kodująca zapytanie powinna to obsłużyć, zwracając „NA” dla brakującego pola.
Co jeśli zapytanie jest źle zakodowane i nie obsługuje tego przypadku? Co jeśli facet, który napisał zapytanie, poradzi sobie z niekompletnym wynikiem, a gdy spróbujesz wyświetlić informacje, wszystko się zawiesi, ponieważ twój kod nie jest przygotowany do wyświetlania pustych rzeczy?
Ten przykład jest bardzo prosty. Wierzę, że większość z was powie „to nie jest twój problem, nie jesteś odpowiedzialny za tę awarię”. Ale to wciąż twoja część kodu ulega awarii.
Inny przykład
Powiedzmy teraz, że to ja piszę zapytanie. Specyfikacje nie mówią tego samego, co powyżej, ale że facet piszący zapytanie „wstaw” powinien upewnić się, że wszystkie pola są wypełnione podczas dodawania osoby do bazy danych, aby uniknąć wstawienia niepełnych informacji. Czy powinienem chronić moje zapytanie „wybierz”, aby upewnić się, że przekazuję facetowi interfejsu użytkownika pełne informacje?
Pytania
Co się stanie, jeśli specyfikacje nie mówią wprost „ten facet jest odpowiedzialny za poradzenie sobie z tą sytuacją”? Co się stanie, jeśli osoba trzecia zaimplementuje inne zapytanie (podobne do pierwszego, ale na innym DB) i użyje twojego kodu interfejsu użytkownika, aby go wyświetlić, ale nie obsługuje tego przypadku w swoim kodzie?
Czy powinienem zrobić wszystko, co konieczne, aby zapobiec możliwej awarii, nawet jeśli to nie ja mam zająć się złym przypadkiem?
Nie szukam odpowiedzi typu „on (on) jest odpowiedzialny za awarię”, ponieważ nie rozwiązuję tutaj konfliktu, chciałbym wiedzieć, czy powinienem chronić swój kod przed sytuacjami, to nie moja odpowiedzialność Poradzić sobie? Tutaj wystarczyłoby proste „jeśli coś pustego zrobić”.
Zasadniczo to pytanie dotyczy zbędnej obsługi wyjątków. Pytam o to, ponieważ kiedy pracuję sam nad projektem, mogę kodować 2-3 razy podobną obsługę wyjątków w kolejnych funkcjach, „na wszelki wypadek” zrobiłem coś złego i przepuściłem zły przypadek.