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 Chatzipavlis is a highly experienced Data Solutions Consultant and Trainer. He has been working in the IT industry since 1988, holding various roles such as senior developer, IT Manager, Data & AI Solutions Architect and Consultant.

Since 1995, Antonios has focused on modern technologies and software development tools, primarily by Microsoft. He has specialized in Data & AI since 2000, with expertise in Microsoft Data Platform (SQL Server, Azure SQL Databases, Azure Synapse Analytics, Microsoft Fabric, Power BI, AI) and Databricks.

Antonios is also a Microsoft Certified Trainer (MCT) for over 25 years, has been recognized as a Microsoft Most Valuable Professional (MVP) in Data Platform since 2010 and he is in the Data Expert 40 Powerlist 2024 by Boussias. He is the co-founder and visionary behind XLYTiCA, a company dedicated to Data & AI solutions.

Episode

Task Flows in Microsoft Fabric

image

More Episodes...

Tip

Get Certified: Become a Fabric Data Engineer

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.