go backsqlschool blogs list

Do you use an ORM? Please learn how to use it properly.

by Antonios Chatzipavlis

Τα τελευταία χρόνια έχει μεγάλη κουβέντα και μεγάλη χρήση από αρκετούς στην χρήση ORMs. Υπάρχουν αρκετά πλέον στην αγορά (EF, ΝHibernate κ.α.) και έτσι ο καθένας μπορεί να επιλέξει αυτό που του ταιριάζει.

Αρκετές φορές έχω βρεθεί σε συζητήσεις σχετικά με αυτά και από αυτές έχω αποκτήσει την φήμη ότι είμαι από αυτούς που τα κατακρίνουν και στέκονται απέναντι τους.

Η πραγματικότητα όμως είναι διαφορετική, και είναι διαφορετική καθώς έχω κάνει πραγματική χρήση αυτών σε πραγματικά μεγάλο όγκο από database objects (tables, views, stored procedures, functions κ.λ.π) και σε μεγάλο όγκο δεδομένων.

Δεν είμαι αντίθετος στην σωστή χρήση τους και ξεκαθαρίζω αυτό.

Η πλειοψηφία και ιδιαίτερα οι κάτω των 35 πιστεύουν ότι έχουν βρει το άγιο δισκοπότηρο και με αυτό δεν χρειάζονται πλέον να ασχοληθούν με την database δηλαδή να την σχεδιάσουν σωστά ή να μάθουν να γράφουν σωστά κώδικα για αυτή.  Αυτό είναι παντελώς λάθος. Ακόμα και στην περίπτωση που έχω δύο πίνακες στην βάση μου θα πρέπει να ασχοληθώ σοβαρά με τον σχεδιασμό της database.

Προσωπικά την δυνατότητα που αρκετά ORMs δίνουν και την ονομάζουν code first την χρησιμοποιώ σαν μέσο επικοινωνίας με τους developers για να μου πουν τι ακριβώς θέλουν να φτιάξουν και όχι για να μπει αυτό σε παραγωγική διαδικασία. Μετά φτιάχνω με τους "παραδοσιακούς τρόπους" την database.

Πολλοί ξεκινάνε και χρησιμοποιούν τα ORMs βλέποντας απλά μια παρουσίαση και απλά παραδείγματα. Λάθος μέγα. Πρέπει να διαβάσεις και πολύ μάλιστα για να μπορέσεις να κάνεις πραγματικά σοβαρή δουλειά μαζί τους.

Αυτό που κάνει όλους να είναι χαρούμενοι από την χρήση των ORMs είναι ότι αυτόματα δημιουργείται κώδικας για τα CRUD operations (Insert, Update, Delete και Read/Select ). Και εγώ είμαι χαρούμενος με αυτό εκτός από ένα σημείο, αυτό που αφορά τα read/select operations.

Ο κώδικας που δημιουργείται για αυτές τις read/select λειτουργίες δεν πάντα ο ιδανικός (για τις άλλες δεν υπάρχει πρόβλημα). Μπορώ να πως ότι δεν είναι ποτέ, ιδιαίτερα όταν εμπλέκονται πολλοί πίνακες, ιδανικός και αυτό που λέω πάντα είναι "Θέλεις να χρησιμοποιήσεις ORM; Κανένα πρόβλημα για τα insert update και delete, αλλά για τα select κοίτα καλά και πείραξε αυτά ώστε να παίζουν σωστά". Μάλιστα προτρέπω όλα τα περίπλοκα queries να γίνουν stored procedures ή views (αν δεν έχουν παραμέτρους).

Θα πρέπει να επισημανθεί ότι είναι καλό, απαραίτητο θα έλεγα, όταν γίνεται access της database με την χρήση ORM στον SQL Server να έχουμε ενεργοποιημένο το "Optimize for Ad hoc queries" και αυτό διότι τα ORMs είναι έτσι φτιαγμένα ώστε να κάνουν ad hoc queries. Αυτό δημιουργεί σοβαρά προβλήματα στο SQL Server και ιδιαίτερα με τη κατανάλωση μνήμης. Έχω γράψει για αυτό σε παλαιότερο μου post εδώ.

Ακόμα αρκετοί ισχυρίζονται ότι πλέον δεν χρειάζονται stored procedures με τα ORMs καθώς αυτά τους δίνουν τα parameterized queries και όπως ισχυρίζονται είναι καλύτερα από τις stored procedures. Λάθος, είναι ακριβώς τα ίδια όσον αφορά τους πόρους και την κατανάλωση τους.

Επίσης όταν οι stored procedures έχουν παραμέτρους και αυτές τις έχουμε κάνει map μέσα στο ORM, θα πρέπει αυτό το mapping να έχει γίνει σωστά όσον αφορά τα data types αυτών με αυτά που έχουν δηλωθεί σε αυτές.

Αυτό θέλω να περάσω σαν μήνυμα σε όλους είναι ότι πάντα μα πάντα θα πρέπει να σχεδιάσουμε και μάλιστα σωστά την βάση μας. Ποτέ χρησιμοποιούμε τον default code για τα select/read operations και οι stored procedures δεν θα πεθάνουν ποτέ όσο και αν κάποιοι επιμένουν να λένε το αντίθετο.

/*antonch*/

Ημερομηνία: 09 January 2014 12:23
Share it:

Σχόλια - Comments

user-gravatar

Στις 11 Jan 2014 @ 12:50 PM o/η Charalampos Karypidis έγραψε:

Έχεις απόλυτο δίκαιο Αντώνη. Ειδικά το σχόλιο που κάνεις για την δημιουργία της βάσης από από το εκάστοτε ORM. Αν και είμαι κάνω των 35, προτιμώ να έχω απόλυτο έλεγχο της δημιουργίας της βάσης παρά να αφήνω το ORM να την δημιουργεί όπως αυτό κρίνει καλύτερα. Άλλωστε τα ORM είναι ένας τρόπος για να καλυφθεί η διαφορά ανάμεσα σε ένα Object Oriented μοντέλο και μια Relational Database, και να κάνει την ζωή μας λίγο ευκολότερη. Βέβαια οφείλω να πω πως όσο το EF εξελίσσεται τόσο μας δίνει την δυνατότητα να δημιουργούμε μια βάση όπως ακριβώς την θέλουμε.

Αφήστε το σχόλιο σας - Leave your comment

Τα σχόλια έχουν κλείσει.
Επιτρέπονται μόνο τα σχόλια από τα μέλη του SqlSchool.gr.


newsletter subscription

Εάν επιθυμείτε να λαμβάνετε ενημέρωση από εμάς, δώστε μας το e-mail σας.
PASS chapter logo
Official Professional Association for SQL Server (PASS) chapter for Greece
Join to PASS