2010-10-03 10 views
5

Mam niektóre obiekty Java o trwałości z wszystkimi @Notowania w mojej aplikacji sieci web. Wszystkie te obiekty znajdują się w warstwie danych. Czy najlepiej jest używać tych obiektów trwałości jako obiektów transferu danych?Istoty persystencji jako obiekty przesyłania danych

Na przykład, jeśli chcę przekazać dane pobrane z magazynu danych, czy powinienem zwrócić te obiekty trwałości, czy też ręcznie skopiować dane do pośrednika DTO i przekazać je z powrotem do innych warstw? Które podejście zaproponujesz?

Odpowiedz

1

chciałbym powiedzieć, że jest OK, aby to zrobić (w rzeczywistości główną zaletą dla tych ORMs byli do korzystania z tych obiektów domeny w różnych warstwach w/o konieczności niepotrzebnych DTOs), jeśli przestrzegać następujących wytycznych:

  1. Nie przedłużasz granic sesji, tzn. Wszelkie zmiany związane z bazą danych zawsze powinny być wykonywane przy użyciu zdefiniowanej warstwy dostępu do danych, a nie poprzez te przekazywane obiekty na innych warstwach.
  2. Wszystkie dane potrzebne w innej warstwie (warstwy powyżej warstwy dostępu do danych, takie jak warstwa Business Logic i warstwa prezentacji) są wstępnie wypełnione w tych obiektach, w przeciwnym razie otrzymasz wyjątki zgodnie z zachowaniem ORM.
  3. Nie przedłużaj granic sesji, aby rozwiązać problem wymieniony w nr 2
+0

+1 dobrze powiedziane. Dokładnie tak samo wykorzystujemy je w naszym produkcie. –

0

Nigdy nie potrzebowałem dodatkowego poziomu abstrakcji uzyskanego przez skopiowanie instancji trwałości do innej klasy DTO.

1

Jeśli masz absolutną pewność, że żadne kopie nie znajdą się w pamięci sesji lub nie zostaną przeniesione do innej instancji, nie ma takiej potrzeby.

Jeśli chcesz zachować te obiekty w wielu sesjach/żądaniach, to ma to sens.

Innym przypadkiem użycia jest sytuacja, w której trzeba bardzo dokładnie rozdzielić warstwy logowania i trwałości (tj. Zamienić różne warstwy utrwalania), a następnie połączenie za pomocą adnotacji może być kłopotliwe.

Powiązane problemy