Niezmienność pamięci podręcznej - NHibernate

0

Czytam o NHibernate. Jest w nim coś takiego jak ISessionFactory. Piszą, że to jest niezmienna (niewłaściwa) pamięć podręczna. Ja jednak tego nie rozumiem. Co to znaczy, że pamięć jest niezmienna? że nie można zmienić jej wielkości czy że nie można zmienić jej zawartości? to drugie wydaje mi się bez sensu.

0

Myślę, że chodzi o to, że ISessionFactory jest immutable.
Tutaj więcej szczegółów:
https://en.wikipedia.org/wiki/Immutable_object

Immutable objects are also useful because they are inherently thread-safe.[2]

0

Rozumiem że czytałeś to po polsku?

0
finito napisał(a):

Czytam o NHibernate. Jest w nim coś takiego jak ISessionFactory. Piszą, że to jest niezmienna (niewłaściwa) pamięć podręczna. Ja jednak tego nie rozumiem. Co to znaczy, że pamięć jest niezmienna? że nie można zmienić jej wielkości czy że nie można zmienić jej zawartości? to drugie wydaje mi się bez sensu.

Ale gdzie tak piszą? Jakieś źródło, cytat? Bo tak ogólnie to napisanie czegoś takiego w kontekście ISessionFactory nie ma sensu z wielu powodów - zaczynając od tego, że to interfejs, więc nie zawiera żadnych danych, które mogłyby się zmieniać, poprzez to, że jego celem jest tworzenie sesji, więc też nie operacja na którą jakaś "niezmienność" miałaby wpływ.
SessionFactory zawiera z drugiej strony cache drugiego poziomu - no ale znowu jego zmienność zależy od tego, co programista robi.
To, co się nie zmienia podczas życia SessionFactory to wczytana konfiguracja, ale chyba nie o to chodziło.

Tak więc bez dokładnego cytatu można sobie tylko zgadywać.

0

Tutaj:
Link

0

"A threadsafe (immutable) cache of compiled mappings for a single database." - no i wszystko jasne, jednak chodzi o niezmienność mapowań dla bazy. (Czyli to, co wyżej nazwałem konfiguracją.)
Warto czytać całe zdania.

0

@finito: masz rację, zawartość bazy zmieniana jest cały czas. Ale mapowania nie mają związku z zawartością tylko ze strukturą i opisują jak struktura tabel jest zamieniana przez NHibernate na obiekty C#. I to ta konfiguracja mapowań jest niezmienna w SessionFactory.

0
somekind napisał(a):

@finito: masz rację, zawartość bazy zmieniana jest cały czas. Ale mapowania nie mają związku z zawartością tylko ze strukturą i opisują jak struktura tabel jest zamieniana przez NHibernate na obiekty C#. I to ta konfiguracja mapowań jest niezmienna w SessionFactory.

Ahaaaaaaa, czyli dokładnie tak, jak przeczuwałem, tylko nie miałem pewności. Jednak popularność tego rozwiązania też nie jest dla mnie zbyt zrozumiała, bo przecież może się zawsze zdarzyć, że strukturę bazy także trzeba zmienić, choćby dlatego, że osoba tworząca tę strukturę jest omylnym człowiekiem i może popełnić błąd. Co wtedy z owym immunity?

0

Wtedy poprawiamy mapowania i restartujemy aplikację.

0

Okej, ale jak poprawić mapowanie, skoro dla mapowania istnieje coś takiego jak immunity? Jak zmienić mapowanie, skoro obiekt mapowania jest niezmienny? To po co to całe immunity oraz do czego ono się tak na prawdę odnosi, skoro mapowanie możemy zmienić.

2

Obiekt jest niezmienny, to znaczy w czasie jego życia nie można go zmienić. Ale jak utworzysz nowy obiekt, to może być już zmieniony. Jeśli zrestartujesz aplikację, to wszystkie obiekty masz nowe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1