Article View: pl.comp.programming
Article #216850Re: Czy biblioteka powinna rzucać wyjątki?
From: Maciej Sobczak
Date: Sun, 05 Apr 2020 21:31
Date: Sun, 05 Apr 2020 21:31
22 lines
3282 bytes
3282 bytes
> > Spotkałem się też z opinią, że biblioteka nie powinna rzucać > > wyjątków, bo w ten sposób narzuca ten aspekt interfejsu aplikacji - > > ale już aplikacja końcowa może sobie korzystać z wyjątków (które sama > > sobie zdefiniuje, sama rzuci i sama złapie), bo nikomu innemu tego > > nie narzuca. > > Podzielam ten pogląd. Korzystając z biblioteki, oczekuję maksymalnie > uproszczonego działania, które nie zakłóci mi mojego workflow. > Łapanie wyjątków jest mi w tym kontekście wyjątkowo nie po drodze. Inna > sprawa, że w praktyce - jak zauważyłeś - jest jak jest. Ale zauważmy, że biblioteki też korzystają z bibliotek - i w ten sposób można wytłumaczyć wyjątek out_of_memory: winę ponosi kto inny. Weźmy np. bibliotekę do wysyłania maili. Powiedzmy, że zgodnie w powyższymi regułami ona sama w sobie nie rzuca wyjątków, ale korzysta z innych bibliotek, w szczególności z podstawowej biblioteki run-time, gdzie jest operator new. I tenże operator rzuca wyjątek. Jeżeli biblioteka do maili jest poprawnie napisana, to będzie wewnętrznie exception-safe, czyli przepuści wyjątki z niższych warstw (z operatora new), pozostając sama w jakimś spójnym stanie. Przy takiej interpretacji można uznać, że reguły są spełnione. Jest jeszcze pomysł na funkcje callback, które są wołane w różnych awaryjnych sytuacjach. Taki callback daje użytkownikowi możliwość np. logowania problemów wtedy gdy występują, albo nawet rzucenia własnego wyjątku, właśnie po to, żeby go sobie złapać gdzie indziej na poziomie tej samej aplikacji. Wtedy znowu mamy spełnione reguły, że biblioteka sama z siebie nie rzuca wyjątków, ale je toleruje, jeśli jakieś przez nią przelatują. Na pewno nie jest łatwo takie biblioteki pisać, ale może to być jakiś ideał, którym można się w miarę możliwości kierować. -- Maciej Sobczak * http://www.inspirel.com
Technical Details
Message-ID:
<b6fe7cbb-35cc-48c6-bb7b-2ffe091ad6ec@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.samoylyk.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mailReferences:
<510f1c50-daca-4e1d-ada5-289afbc3b949@googlegroups.com> <20200404215133.35e6e612@mateusz>Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:2d83:: with SMTP id t125mr19330104qkh.359.1586122265562; Sun, 05 Apr 2020 14:31:05 -0700 (PDT) X-Received: by 2002:ac8:4a08:: with SMTP id x8mr18407193qtq.353.1586122265284; Sun, 05 Apr 2020 14:31:05 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.samoylyk.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Sun, 5 Apr 2020 14:31:05 -0700 (PDT) In-Reply-To: <20200404215133.35e6e612@mateusz> Complaints-To: groups-abuse@google.com Injection-Info: google-groups.googlegroups.com; posting-host=213.108.152.51; posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S NNTP-Posting-Host: 213.108.152.51 References: <510f1c50-daca-4e1d-ada5-289afbc3b949@googlegroups.com> <20200404215133.35e6e612@mateusz> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <b6fe7cbb-35cc-48c6-bb7b-2ffe091ad6ec@googlegroups.com> Subject: Re: Czy biblioteka powinna rzucać wyjątki? From: Maciej Sobczak <see.my.homepage@gmail.com> Injection-Date: Sun, 05 Apr 2020 21:31:05 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit