Efektywny transfer zdalnych, drobnoziarnistych danych poprzez przesyłanie zbioru tych danych.
Czasem encja ma wiele atrybutów, które są używane zawsze razem. Dla przykładu może to być (kraj, miasto, ulica, numer bloku, kod pocztowy, ...). Jeżeli chcemy je wykorzystywać to musimy wywołać naście metod typu getXXX z enterprise beans. Jak łatwo zauważyć to mocno nam obciąża sieć oraz mamy częste odwołania do bazy danych.
Rozwiązaniem jest używanie value object. Polega to na tym, że komponent łączy się z bazą danych tworzy value object, który jest zbiorem atrybutów, serializuje go i przesyła przez sieć do klienta. Klient wyciąga dane wywołując lokalnie metody przesłanego value object.
ValueObject
zawiera drobnoziarniste dane (będą dostępne lokalnie).
EnterpriseBean
ma dostęp do danych (z bazy danych), które będą kopiowane do ValueObject.
Zalety:
Zmniejsza ruch w sieci. Tylko raz wysyłamy zdalne wywołanie do enterprise bean on nam tworzy value obiect a potem odwołujemy się już lokalnie do tego obiektu. Warto też zauważyć, że value object jest serializowany na serwerze oraz deserializowany po stronie klienta, tak wiec jest przesyłany przez wartość nie przez zdalną referencję.
Zmniejsza ilość odwołań do bazy danych. Raz pobieramy zbiór danych a potem odwołujemy się już tylko do valueObject
Wady:
Nie aktualność danych. Należy pamiętać o tym, ze dane mogą być nieaktualne. Mają wartości dokładnie takie jak były w momencie stworzenia value object.
Value object jest prosta struktura zawierającą prywatne pola i metody do pobierania
tych pól. Musi być serializable. Musi implementować interfejs
Serializable
lub dostarczać metody które konwertują dane na coś będącego
Serializable
(np. na String
). Jest to potrzebne do przesyłania
przez sieć.
Powinniśmy unikać przesyłania dużych value objects. Przeznaczeniem value object jest zmniejszenie ruchu w sieci. Duże obiekty są kosztowne w transporcie wiec powinniśmy przesyłać je oddzielnie (nie łączyć w value object)
Jeżeli chcemy zmieniać dane musimy zmienione value object wysłać do kontenera z żądaniem wgrania nowych danych do bazy danych.