Co to oznacza, gdy ktoś mówi o nawodnieniu obiektu?
W sieci widzę projekt Java o nazwie Hydrate, który przekształca dane między różnymi reprezentacjami (RDMS na OOPS na XML). Czy to jest ogólne znaczenie nawodnienia obiektu; przekształcić dane między reprezentacjami? Czy może to oznaczać zrekonstruowanie hierarchii obiektów z przechowywanej reprezentacji?
Odpowiedzi:
W odniesieniu do bardziej ogólnego terminu hydrat
Nawodnienie obiektu polega na pobraniu obiektu istniejącego w pamięci, który nie zawiera jeszcze żadnych danych domeny („rzeczywistych” danych), a następnie zapełnienie go danymi domeny (np. Z bazy danych, z sieci lub z pliku system).
Z komentarzy Ericka Robertsona do tej odpowiedzi:
Jeśli nie musisz martwić się o zawirowania wydajności i nie debugujesz optymalizacji wydajności, które są wbudowane w interfejs API dostępu do danych, prawdopodobnie nie musisz jawnie zajmować się nawodnieniem. Zazwyczaj zamiast tego użyłbyś deserializacji , abyś mógł napisać mniej kodu. Niektóre interfejsy API dostępu do danych nie dają tej opcji, a w takich przypadkach musisz również samodzielnie wywołać krok nawodnienia.
Aby uzyskać więcej szczegółów na temat koncepcji nawodnienia, zobacz odpowiedź Ericka Robertsona na to samo pytanie.
W odniesieniu do projektu Java o nazwie hydrate
Pytałeś konkretnie o ten framework, więc przyjrzałem się mu.
Najlepiej, jak mogę powiedzieć, nie sądzę, aby ten projekt używał słowa „nawodnić” w bardzo ogólnym znaczeniu. Widzę jego użycie w tytule jako przybliżony synonim „serializacji”. Jak wyjaśniono powyżej, to użycie nie jest całkowicie dokładne:
Zobacz: http://en.wikipedia.org/wiki/Serialization
Nie mogę znaleźć przyczyny ich nazwy bezpośrednio w Hydrate FAQ , ale dostałem wskazówki na temat ich zamiaru. Myślę, że wybrali nazwę „Hydrate”, ponieważ przeznaczenie biblioteki jest podobne do popularnego, podobnego do dźwięku frameworku Hibernacja , ale zostało zaprojektowane z myślą o dokładnie odwrotnym przepływie pracy.
Większość ORM, w tym Hibernacja, przyjmuje podejście zorientowane na model obiektowy w pamięci, przy czym baza danych bierze pod uwagę drugie. Zamiast tego biblioteka Hydrate przyjmuje podejście zorientowane na schemat bazy danych, zachowując relacyjne struktury danych i pozwalając programowi na pracę nad nimi bardziej czysto.
Mówiąc metaforycznie, wciąż w odniesieniu do nazwy tej biblioteki: Hydrate jest jak „tworzenie czegoś gotowego do użycia” (jak ponowne nawadnianie suszonej żywności ). Jest to metaforyczne przeciwieństwo Hibernacji , które bardziej przypomina „odkładanie czegoś na zimę” (jak Animal Hibernation ).
O ile mogę powiedzieć, decyzja o nazwie biblioteki Hydrate nie dotyczyła ogólnego terminu programowania komputerowego „hydrate”.
Podczas używania ogólnego terminu programowania „hydrat” optymalizacje wydajności są zazwyczaj motywacją (lub debugowaniem istniejących optymalizacji). Nawet jeśli biblioteka obsługuje szczegółową kontrolę nad tym, kiedy i jak obiekty są zapełniane danymi, czas i wydajność nie wydają się być główną motywacją dla nazwy lub funkcjonalności biblioteki. Biblioteka wydaje się bardziej zainteresowana włączaniem mapowania od końca do końca i zachowaniem schematu.
źródło
deserialization == instantiation + hydration
@foo
nie jest potrzebna, aby odpowiedzieć autorowi postu.Nawodnienie odnosi się do procesu wypełniania obiektu danymi. Obiekt, który nie został jeszcze uwodniony, został utworzony w postaci instancji i reprezentuje byt, który ma dane, ale dane nie zostały jeszcze załadowane do obiektu. To jest zrobione ze względu na wydajność.
Ponadto termin „nawodnienie” jest używany przy omawianiu planów ładowania danych z baz danych lub innych źródeł danych. Oto kilka przykładów:
Można powiedzieć, że obiekt jest częściowo uwodniony, gdy załadujesz do niego tylko niektóre pola, ale nie wszystkie. Można to zrobić, ponieważ te inne pola nie są konieczne do bieżących operacji. Nie ma więc powodu, aby marnować przepustowość i cykle procesora ładując, przesyłając i ustawiając te dane, gdy nie będą używane.
Ponadto istnieją pewne ORM, takie jak Doctrine, które nie nawadniają obiektów po ich utworzeniu, ale tylko wtedy, gdy dane są dostępne w tym obiekcie. Jest to jedna metoda, która pomaga nie ładować danych, które nie będą używane.
źródło
Chociaż jest nieco zbędny, jak wspomniał Merlyn, z mojego doświadczenia odnosi się tylko do wypełniania / wypełniania obiektu, a nie tworzenia go / tworzenia, więc jest to użyteczne słowo, kiedy trzeba być precyzyjnym.
źródło
deserialization == instantiation + hydration
).To dość stare pytanie, ale wydaje się, że nadal istnieje zamieszanie co do znaczenia poniższych terminów. Mamy nadzieję, że będzie to jednoznaczne.
Hydrat
Kiedy widzisz opisy, takie jak: „obiekt, który czeka na dane, czeka na uwodnienie”, jest to mylące i mylące. Obiekty nie czekają na rzeczy, a nawodnienie to po prostu wypełnienie obiektu danymi.
Używając JavaScript jako przykładu:
Wszystko, co dodaje wartości,
obj
„uwadnia” ją. Po prostu używamObject.assign()
w tym przykładzie.Ponieważ terminy „serializować” i „deserializować” zostały również wspomniane w innych odpowiedziach, oto przykłady, które pomagają ujednoznacznić znaczenie tych pojęć z uwodnienia:
Serializuj
Deserializuj
źródło