sqlschool.gr logo

articles

Articles of SQLschool.gr Team

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

Antonios Chatzipavlis
Thursday 09 January 2014

Τα τελευταία χρόνια έχει μεγάλη κουβέντα και μεγάλη χρήση από αρκετούς στην χρήση 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*/

Comments

11 Jan 2014 @ 12:50 PM

user-gravatar

Charalampos Karypidis

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

Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios is a Data Solutions Consultant and Trainer. He has been working in IT since 1988. In his career, he has worked as senior developer, IT Manager, Solutions Architect and IT Consultant. Since 1995 he has been devoted on new technologies and software development tools, mainly by Microsoft, either by training company staff and colleagues or assisting them in design, development and implementation as a consultant or chief developer. He has focused in Databases and Data Science since 1995. He specialized in Microsoft SQL Server since version 6.0 in areas like SQL Server Internals, Database Design and Development, Business Intelligence and in 2010 he has started working with Azure Data Platform, NoSQL databases, Big Data Technologies and Machine Learning. He is an active member of many IT communities in Greece, answering colleagues' questions and writing articles in his web site. He is the owner of SQLschool.gr which is a community portal with a lot of information about Microsoft SQL Server. He has been a Microsoft Certified Trainer (MCT) since 2000. Microsoft honored him as MVP on Data Platform due to his activities in SQL Server since 2010. He holds a large number of Microsoft Certifications and Microsoft SQL Server Certifications since version 6.5.

Episode

Task Flows in Microsoft Fabric

image

More Episodes...

Tip

What's New in SQL Server 2022 - Episodes

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn


sqlschool.gr © 2010-2025 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.