Domain,DTO objects και EJB 3.0 Entity Beans

Share on:

Στην τελευταία ημερίδα του jhug, αλλά και κατ ιδίαν ρώτησα τον Patrick Linskey για το ποια είναι η καλύτερη τακτικη στο να πάρουμε data από τη βάση και να τα δείξουμε σε μία σελίδα.Είναι καλό να παίρνουμε όπως είναι τα entity beans μας τα οποία ουσιαστικά είναι τα Domain/ DTO object μας από την εποχή του Hibernate 2.x ή αφού γεμίσουμε τα entity beans μέσα απο το DAO layer να έχουμε μια έξτρα ομάδα κλάσεων καθαρά Data Transfer objects τα οποία θα ταξιδεύουν στο web layer!

Ειπε οτι δεν υπάρχει direct λύση στο ερώτημα,

α)πολλές φορές με τη χρήση πια EJB 3.0 και entity beans θα αναγκαστείς να φέρεις στο προσκήνιο ένα xtra layer απο DTO object τα οποία συνήθως θα είναι πιο light weight σε ποσότητα πληροφορίας από το κλασικό entity bean το οποίο είναι αντικατοπτρισμός ενός πίνακα στην βάση δεδομένων. Ναι μεν Λοιπόν, θα έχεις πολλαπλές κλάσεις οι οποίες θα ορίζουν ουσιαστικά duplicated πληροφορία πχ to DTO θα έχει τη μισή πληροφορία από το Entity bean αλλά θα έχεις καταφέρει να χωρίσεις σε ακόμα μεγαλύτερο βαθμό το persistence layer με το web layer και φυσικά τον σύνδεσμο τους ο οποίος δεν είναι άλλος από την πληροφορία που θέλουμε να δείξουμε στον χρήστη!

β)άλλες φορές (τις πιο πολλές είπε) η απλότητα και η ευκολία του να ταξιδεύει

το entity bean EJB3.0 στο web layer είναι πραγματικά βολική.Εξάλλου πρέπει να σκεφτούμε οτι ουσιαστικά το EJb3.0 και το νέο Entity Bean δημιουργήθηκε γι'αυτό το σκοπό - μέσααπο την εμπειρία των Domain Objects άλλων ORM. Επίσης, μην ξεχνάμε οτι ουσιαστικά πολλά νεα web framework δουλευουν με αυτή την λογική. Δες το Seam, πειρε τα ευέλικτα πια Entity beans και τα δένει με Java Server Faces web components .πολύ εύστοχα ο δημιουργός του Gavin King, τα ονομάζει web-beans μιας και αυτό είναι!

Μόλις τελειώσα ένα set απο functionality σε prototype επίπεδο για την εφαρμογή που ετοιμάζουμε. Επέλεξα να χρησιμοποιήσω Struts στο web layer και EJB 3.o σε όλες του τις μορφές στο business - persistence layer. Δεν εισήγαγα νέο layer με DTO τα Entity, οι εντυπώσεις μου είναι άριστες. Είναι αρκετά βολικό να ξέρεις οτι είναι η ίδια κλάση που ουσιαστικά κάνει το mapping με τον πίνακα, η ίδια που τις τραβάς attributes για να τα δειξεις σε κάποια σελίδα.

Το μόνο που θα ήθελα στο Struts αυτή τη στιγμή είναι να υποστηρίξει IoC (με annotations) όπως πχ γίνεται στο Seam, για να εισάγω πιο εύκολα τα Entity beans μου σε αυτό, η ακόμα και τα Session Beans σε Actions κτλ. Πάντως για την ώρα .η τεχνολογία works as expected .οκ για την ώρα δε με πειράζει που το JPA έχει σε κάποια σημεία limit όσο αναφορά το functionality σε σχέση με το Pure Hibernate 3.0 approach! Μπορώ να περιμένω - αλλιώς θα ξεκινήσω να κάνω import hibernate πακέτα - κάτι που έτσι και αλλιώς σε advanced features θα χρειαστεί να το κάνω!