-
Data: 2012-06-04 18:04:43
Temat: Re: Try catch, prawidłowy sposób użycia
Od: zażółcony <r...@c...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 2012-06-04 16:14, Maciej Sobczak pisze:
> On 4 Cze, 10:31, zażółcony<r...@c...pl> wrote:
>
>>> Ja najchętniej korzystam z traksakcji z automatycznym rollbackiem,
>>> wyzwalanym przez destruktor. Wtedy opcja B jest kompletnie bez sensu
>>
>> Czyli korzystasz ze wzorca projektowego RAII
>
> Jeśli to tak nazwiesz, to wszyscy wiedzą, o co chodzi, ale specjalnie
> tej nazwy nie użyłem, bo w odniesieniu do obsługi transakcji znaczenie
> tego skrótu ma się nijak. Ale faktycznie chodzi o to samo.
Skrót jest kiepski, ale pojęcie transakcji i pojęcie zasobu
już nie są tak odległe. Do transakcji i pliku jako 'bazę przykładów'
dałbym jeszcze 'mutex', lub inaczej semafor binarny.
W przypadku tego ostatniego sytuacja wydaje mi się najbardziej
jaskrawa: semafor opuszczasz PRZED try, a podnosisz w finally.
Każda inna konstrukcja to prośba o brak parzystości operacji na semaforze.
W przypadku transakcji bd masz:
begin = alokacja zasobu (abstrakcyjna rezerwacja zasobów bazy danych),
commmit = zapis zasobu + jego zwolnienie,
rollback = obsługa błędu + jego awaryjne zwolnienie.
Z powyższego masz wprost widoczne, dlaczego begin jest przed try
a commit i rollback 'w środku'.
>> (nazwa niezbyt trafna, ale tak już zostało).
>> Taką konstrukcję zastosujesz tylko w językach bez asynchronicznie
>> działającego garbage collectora, tzn. w takich, w których masz jasno
>> zdefiniowany moment odpalania konstruktora.
>
> Destruktora. Nie ma problemu z garbage collectorem, może sobie być i
> jedno i drugie. To, że Javie jest tylko jedno to wybór projektantów
> języka a nie ograniczenia paradygmatyczne. GC nadaje się do obsługi
> pamięci ale nie od obsługi interakcji ze światem zewnętrznym.
Myśląnad tym - patrz 'closures'. Ale jest to problem w Javie
dobrze rozpracowany za pomocą innych wzorców, jeden właśnie taki,
o jakim mowa - try-catch-finally. Problem jest trochę, jak
obiekt wyskakuje 'na zewnątrz', kiedy pełny cykl jego życia
trudno objąć jedną funkcją. Wtedy jest trochę zabawy, ale generalnie
da się z tym całkiem dobrze żyć.
>
>>> No właśnie - co to za język programowania?
>>
>> Jeden z języków, w którym nie masz możliwości zastosowania wzorca RAII.
>
> Fuj. Powinni tego zakazać.
Po przesiadce z c++ na Javę też nie mogłem się początkowo
w tym odnaleźć, ale po kilku latach kompletnie mi nie żal :)
Do destruktorów absolutnie nie tęsknię :)
>> Wyobraź sobie, że zamiast transakcji masz tam operację otwarcia pliku,
> [...]
>> Zauważ, że jeśli wrzucisz otwieranie po try, to potem w finally musisz
>> się zastanawiać, czy robić close, czy nie (dodatkowy if). A tego właśnie
>> chcemy uniknąć.
>
> Ja tego unikam używając języków, gdzie mogę mieć normalne RAII. Bo
> zastanawianie się, gdzie postawić begin względem try to odwracanie
> uwagi od głównego zagadnienia, typowe dla języków niskiego poziomu.
Imo nie jest to większe odwracanie uwagi, niż wtedy, gdy
np. z założenia pchasz wrażliwe operacje w konstruktory obiektów
i potem musisz się zastanawiać, czy obiekt, który utworzyłeś
na pewno się w pełni zainicjalizował, czy mu czegoś brakuje
i czy przypadkiem destruktor się nie wypierniczy. A wywaka w
konstruktorze to w przypadku niektórych języków jest sprawa
bardzo brzydka. Akurat walczę z tematem przy okazji konstruowania
obiektów OLE z poziomu języka FoxPro.
BTW. Automatyczny 'rollback' w destruktorze obiektu transakcji też
ćwiczyłem. Dopóki ktoś nie zapomni o commicie brzmi cukierkowo :)
Imo w tym wypadku zamiast konstrukcji typu TransactionScope
czy RAII podobnych lepiej korzystać z abstrakcji
oddzielających kwestie bazy danych od logiki biznesowej
(transakcyjność jako aspekt, zewnętrzny manager transakcji
automagicznie otaczający dostarczoną funkcję biznesową
transakcją - tak, jak to się robi obecnie w Javie i w C#
zdaje się również).
Następne wpisy z tego wątku
- 04.06.12 19:21 Edek Pienkowski
- 04.06.12 23:13 M.M.
- 04.06.12 23:19 M.M.
- 05.06.12 00:47 n...@m...invalid
- 05.06.12 07:25 Waldek M.
- 05.06.12 08:43 zażółcony
- 05.06.12 09:01 Edek Pienkowski
- 05.06.12 10:13 AK
- 05.06.12 10:16 AK
- 05.06.12 10:44 Stachu 'Dozzie' K.
- 05.06.12 11:41 zażółcony
- 05.06.12 12:36 Edek Pienkowski
- 05.06.12 14:52 n...@m...invalid
- 05.06.12 14:53 n...@m...invalid
- 05.06.12 16:47 Andrzej Jarzabek
Najnowsze wątki z tej grupy
- Rosjanie chwalą się prototypem komputera kwantowego. "Najważniejszy projekt naukowy Rosji"
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Re: Najgorszy język programowania
- NOWY: 2025-09-29 Alg., Strukt. Danych i Tech. Prog. - komentarz.pdf
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
Najnowsze wątki
- 2026-01-02 Szalejąca dyskryminacja obywateli USA w Maili i Burkina Faso. Czy to legalne?
- 2026-01-02 Miało być zniesienie abonamentu RTV, a jest podwyżka!!!
- 2026-01-02 Miało być zniesienie abonamentu RTV, a jest podwyżka!!!
- 2026-01-02 Kogo KE opierdoli za nieskuteczną cenzurę? [Rząd tuski doniósł]
- 2026-01-02 Gdańsk => Konsultant Microsoft Dynamics AX/365 SCM Consultant - Servi
- 2026-01-02 Gdańsk => Solution Architect (Workday) - Legal Systems <=
- 2026-01-02 Gdańsk => Microsoft Dynamics 365 Finance Consultant <=
- 2026-01-02 Microsoft, C/C++ na Rust - news
- 2026-01-01 szyby macie całe?
- 2026-01-01 Najbogatsi ludzie na świecie są jeszcze bogatsi. Bezprecedensowa skala zysków
- 2026-01-01 Najbogatsi ludzie na świecie są jeszcze bogatsi. Bezprecedensowa skala zysków
- 2026-01-01 Wszystkiego najlepszego
- 2025-12-31 Czy potrafisz wskazać różnice? [TVN v. RMF]
- 2025-12-31 I kolejny jebnięty
- 2025-12-31 Myślenice => Specjalista ds. kontrolingu <=




5 Najlepszych Programów do Księgowości w Chmurze - Ranking i Porównanie [2025]