Czy możesz polecić wzorzec / podejście projektowe do ujawniania / tolerowania / odzyskiwania po błędach systemowych, obsługi wyjątków (Java, C ++, Perl, PHP)?
Niektóre błędy muszą zostać zgłoszone.
Niektóre błędy mogą być obsługiwane wewnętrznie (przez ponowienie lub są nieistotne (można je zignorować).
Jak ustrukturyzować kod, aby je złapać?
Ale wszystkie błędy muszą być rejestrowane.
Jakie są najlepsze praktyki?
A czy symulować je, aby móc w pełni przetestować komponenty, na które mają wpływ?
Ogólne pytanie specyficzne dla języka nieprogramowego mające zastosowanie do kilku współczesnych języków programowania, ale mile widziane byłyby przykłady ilustracji wzorców, podejść i filozofii w Javie, C ++, PHP i Perlu.
(Pytanie Również w stackoverflow: /programming/7432596/recommend-a-design-pattern-approach-to-exposing-tolerating-recovering-from-system ale myślałem, że powinien on zostać poproszony o programistów, ponieważ zbyt Myślę, że programiści zadają pytania dotyczące szerszych zagadnień związanych z oprogramowaniem / programowaniem, podczas gdy przepełnienie stosu dotyczy bardziej technicznej implementacji IMHO).
źródło
Odpowiedzi:
Fail fast to świetne podejście do projektowania i być może można je uznać za wzór: http://en.wikipedia.org/wiki/Fail-fast
Znalazłem również szereg zasad, które mogą się przydać:
źródło
Po pracy z wyjątkami w Javie i .NET ORAZ po przeczytaniu wielu artykułów o tym, jak / kiedy / dlaczego łapać wyjątki, w końcu wymyśliłem następujące kroki, które przechodzę w mojej głowie, gdy widzę potencjalny wyjątek lub wyjątek Muszę złapać (Java) ... nawet jeśli to się nigdy nie zdarzy (westchnienie ...). I wydaje się, że działa, przynajmniej dla mnie:
Powinienem również dodać krok 0 , w którym celowo rzucam coś, co nazywam wyjątkiem „biznesowym” (nowy wyjątek, który tworzę, rozszerzając klasę „wyjątek”), gdy niektóre złożone leczenie nie może zostać wykonane z powodu błędów danych, ALE zdarzają się, ponieważ podczas analizy zostały zidentyfikowane jako przypadki wyjątków.
Z wyjątkiem części dotyczącej logowania, w pełni zgadzam się z punktami napisanymi przez „mikera”; Dodam tylko, że wyjątek należy zarejestrować tylko raz .
Ponadto wymienione przeze mnie kroki mogą się różnić, jeśli piszesz jako API / Framework . Tam rzucanie dobrze zaprojektowanych wyjątków jest obowiązkowe, aby pomóc programistom zrozumieć ich błędy.
Jeśli chodzi o testowanie wyjątków, za pomocą próbnych obiektów powinieneś być w stanie przetestować prawie wszystko, niezależnie od tego, czy jest to wyjątek, czy nie, pod warunkiem, że twoje klasy przestrzegają najlepszej praktyki „jedna klasa do robienia jednej rzeczy”. Osobiście upewniam się, że najważniejsze, ale ukryte metody są oznaczone jako „chronione” zamiast „prywatne”, dzięki czemu mogę je przetestować bez większych problemów. Poza tym testowanie wyjątków jest proste, po prostu sprowokuj wyjątek i „spodziewaj się”, że wyjątek wystąpi, wychwytując go. Jeśli nie otrzymasz wyjątku, oznacza to, że wystąpił błąd przypadku testowego jednostki.
źródło
Zbuduj swoje obiekty we właściwy sposób, nie martw się czynnikami zewnętrznymi. Jeśli zdecydujesz się skorzystać z wyjątków, spraw, aby Twoje obiekty zgłaszały wyjątki, jeśli coś się nie powiedzie .
Gdy wszystkie Twoje obiekty będą działać poprawnie, powinno być dość łatwo wymyślić przejrzystą hierarchię odpowiedzialności za błędy w projekcie.
źródło