eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingCzy biblioteka powinna rzucać wyjątki? › Re: Czy biblioteka powinna rzucać wyjątki?
  • X-Received: by 2002:ac8:4a08:: with SMTP id x8mr18407193qtq.353.1586122265284; 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: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.samoylyk.n
    et!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: g...@g...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: <5...@g...com>
    <20200404215133.35e6e612@mateusz>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <b...@g...com>
    Subject: Re: Czy biblioteka powinna rzucać wyjątki?
    From: Maciej Sobczak <s...@g...com>
    Injection-Date: Sun, 05 Apr 2020 21:31:05 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:214812
    [ ukryj nagłówki ]


    > > 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

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: