Är det någon mer som bråkar med hibernate i sin domän? räck upp sin hand… de som inte gjorde det var god lämna sidan…
Bra då är det bara vi kvar..
Utan närmare krusidull så vill jag dela med mig av följande problem som uppstod i koden efter ett tag.
Vi har en vy som skall visa upp ett stycke information allt går fint requestet går via sessions bönan ned till slut till domänen som sedemera plockar i hop det data som vyn vill ha .. STOP vänta här han använder inte ett repository nått är tok .. okej en annan implementation vi går till repositoryn och den frågar domänen genom HQL vad vyn vill ha och sedan så får vyn sitt data antigen genom ett frisläppt hibernate proxy aka entiteter eller för hoppningsvis en DTO eller ett Vy objekt, Vy objekt tycker jag beskriver det bättre.
Okej vad är det hemska med detta då kan man fråga? Jo
1. Om DTO/VY lösning med repository där implementation anväder HQL leder i de flesta fall till att man måste mappa upp relationer i domänen som endast är betydelse fulla för dto/vy objekt inte för domänen. aj aj ….
2. Om inte en DTO/Vy utan frisläppta entiteter och open-session-in-view lösning .. en hel massa extra sql slagningar till DB samt en potential “hoppsan jag råka traversera upp min produktion Databas i vyn” … ajajajajaj
3. Samma som ovan fast med restriktionen att entiteter inte är kopplade till en session. Leder detta till en massa LacyInitException i loggen samt arga användare. haha nä.. ajaj
Så vad göra? en lösning på detta om man vill behålla sin rika domän är att endast betrakta sin domän som write-only. Alltså du kan endast skapa,ändra eller tabort data i din domän.
Vill vyn ha data , aggregerat data eller en tårtbit av sin domän-kaka eller blandad data som finns på en helt annan databas så låt den få det men blanda förguds skull inte in domänen i det eller hibernate för den delen. Kör plain SQL eller jdbc template eller dylika.
Detta leder till så mycket mindre huvud bry så du anar inte

…
Mer läsning finnes av killen som myntat detta i DDD
Greg Young Rille