Otwórz sesję w widoku wzorca
Zadaję to pytanie biorąc pod uwagę wybrane przeze mnie ramy rozwoju JPA (implementacja Hibernate), Spring i <wstaw MVC framework - Struts 1, Struts 2, Spring MVC, Stripes ...>.
Myślałem trochę o relacjach w mojej warstwie encji - na przykład mam jednostkę zamówienia, która ma wiele linii zamówień. Skonfigurowałem aplikację, aby chętnie ładowała linie zamówień dla każdego zamówienia. Czy uważasz, że jest to leniwy sposób na obejście leniwych problemów z inicjalizacją, które natrafiłbym, gdybym ustawił strategię pobierania na false?
Widzę to w następujący sposób: podczas pobierania jednostek i ich powiązań:
Użyj wzorca Otwórz sesję w widoku, aby utworzyć sesję na każdym żądaniu i zatwierdzić transakcję przed zwróceniem odpowiedzi.
Zaimplementuj warstwę DTO (Data Transfer Object) w taki sposób, że każde wykonane przeze mnie zapytanie DAO zwraca poprawnie zainicjowany DTO dla moich celów. Naprawdę nie podoba mi się ta opcja, ponieważ w moim doświadczeniu odkryłem, że tworzy ona wiele standardowych kodów kopiowania i staje się bałagan w utrzymaniu.
Nie mapuj żadnych skojarzeń w JPA, aby każde wykonywane przeze mnie zapytanie zwracało tylko te, które mnie interesują - to prawdopodobnie wymagałoby ode mnie posiadania DTO i będzie to trudne do utrzymania i myślę, że pokonuje cel posiadania ORM na pierwszym miejscu.
Z entuzjazmem pobierz wszystkie (lub większość skojarzeń) - w powyższym przykładzie zawsze pobieraj wszystkie linie zamówień, gdy odzyskuję zamówienie.
Moje pytanie brzmi: kiedy iw jakich okolicznościach użyłbyś której z tych opcji? Czy zawsze trzymasz się jednego sposobu?
Chciałbym zapytać kolegę, ale myślę, że gdybym nawet wspomniał termin „Otwarta sesja w widoku”, zostałbym powitany pustymi spojrzeniami :( To, czego naprawdę tu szukam, to porady od doświadczonego lub doświadczonego programisty.
Dzięki chłopaki!