-
Data: 2012-03-16 09:39:17
Temat: Jaki wzorzec projektowy: pilnowanie cyklu życia innego obiektu ?
Od: zażółcony <r...@c...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Najbardziej mi tu pasuje Proxy, ale Proxy jest zbyt ogólny.
Może macie inny pomysł.
Sytuacja jest taka: mamy język programowania,
w którym destruktory są wywoływane w ściśle określonych
momentach, tzn. mamy np. C++ bez garbage collectora
lub np. FoxPro.
Wykorzystujemy destruktory obiektów do tego, by
obiekty sprzątały po sobie. Np. mamy obiekt File, który
w destruktorze robi closa na deskryptorze otwartego pliku.
Albo mamy obiekt Transakcja, który w destruktorze stara
się zrobić commit'a. Albo mamy obiekt BlokadaZasobu czy
Mutex, który w destruktorze zwalnia zablokowany
zasób/podnosi opuszczony wcześniej semafor.
Wykorzystujemy tu destruktory po to, by zminimalizować
potrzebę pamiętania o sprzątaniu po obiektach, u których
czas życia nie budzi wątpliwości (bo są np. tworzone
lokalnie w procedurze, czy nawet zagłębionej sekcji jakiejś
procedury(funkcji,metody), a referencja nie jest nigdzie
przekazywana. Da się na tym budować bardzo ładny, elegancki kod,
który w przypadku języków z garbage collectorem trzeba najczęściej
dodatkowo obudowywać klauzulami try {}finally {...}, żeby sprzątać
jawnie. Tu tego nie mamy, a przynajmniej mamy znacznie mniej.
A teraz idźmy dalej: teraz chcę wszystkie w.w. obiekty plików czy
blokad zasobów gromadzić w jakiejś kolekcji utrzymywanej i zarządzanej
przez jakiś singleton (np. Manager Blokad, Manager Transakcji ...),
np. po to, żeby móc je sobie wszystkie wyświetlić.
Czyli łamię zasadę nie przekazywania/nie trzymania referencji
obiektów na zewnątrz. Złamanie tej zasady wprost prowadzi
do tego, że przestaje działać sprzątanie/zamykanie (ze względu
na wiszące referencje).
Nie mamy do dyspozycji czegoś takiego, jak weak reference, więc żeby
temu zaradzić działamy wg. wzorca takiego:
Lokalnie tworzymy obiekt proxy, który trzyma referencję
na obiekt właściwy i proxy w swoim destruktorze pilnuje,
by obiekt, którym się obiekuje "wypisać z systemu"/posprzątać
po nim/zlikwidować wszystkie referencje.
Pasowało mi określenie 'strażnik', ale Guard Pattern to raczej do
walidacji się nadaje, więc nie pasuje.
Teoretycznie każdy z obiektów typu Plik czy Semafor mógłby sam siebie
zapisywać i wypisywać z globalnych list - ale uważam, ze czystsze jest
rozwiązanie, kiedy tego typu obiekty nie maja za bardzo pojęcia
kto i dlaczego się nimi interesuje, zajmują się swoimi technicznymi
zadaniami i niczym więcej.
Cały obowiązek pilnowania powiązań składam więc bardziej na factory
tych obiektów, które to będą bardziej świadome, co jest w systemie
i gdzie obiekty są zapisywane. No właśnie - z kreacją nie ma
problemu - jest wzorzec factory. A brakuje mi tu jakiegoś wzorca
typu 'Garbage', 'Złomuj' :)))
Jakiegoś urzędnika, który uczestniczył w narodzinach, zapisał to
w swoich papierach i jest bardzo zainteresowany, by zarejestrować
również śmierć. Bez tego papiery mu się nie będą zgadzać :)
Następne wpisy z tego wątku
- 16.03.12 10:04 Bronek Kozicki
- 16.03.12 10:06 zażółcony
- 16.03.12 11:06 Andrzej Jarzabek
- 16.03.12 12:28 zażółcony
- 17.03.12 12:17 Andrzej Jarzabek
- 21.03.12 08:13 zażółcony
- 21.03.12 14:22 Andrzej Jarzabek
- 21.03.12 14:42 Andrzej Jarzabek
- 21.03.12 14:46 zażółcony
Najnowsze wątki z tej grupy
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
Najnowsze wątki
- 2024-11-04 GNSS Motorola G85 vs Redmi Note 9 pro
- 2024-11-04 Katowice => SAP BTP Consultant (mid/senior) <=
- 2024-11-04 Katowice => Spedytor międzynarodowy <=
- 2024-11-04 Warszawa => Specjalista/tka ds. Zamówień publicznych <=
- 2024-11-04 Poznań => QA Engineer <=
- 2024-11-04 Poznań => QA Inżynier <=
- 2024-11-04 Polskie sądy są bardzo wyrozumiałe...
- 2024-11-04 Wrocław => SAP Project System/EPPM Consultant <=
- 2024-11-04 Gliwice => Team Lead / Tribe Lead FrontEnd <=
- 2024-11-04 Kraków => Programista Full Stack (.Net Core) <=
- 2024-11-04 Kraków => Software .Net Developer <=
- 2024-11-04 Kraków => Programista Full Stack .Net <=
- 2024-11-04 Warszawa => Key Account Manager <=
- 2024-11-04 Warszawa => Spedytor Międzynarodowy <=
- 2024-11-04 Warszawa => E-COMMERCE specialist <=