Data.Common.DbSchema, Alpha

Υποθέτω ότι δεν υπάρχει προγραμματιστής που έχει γράψει κώδικα για βάση δεδομένων μετά από λίγο θα έχει βαρεθεί να γράφει τα ίδια και τα ίδια. Το επόμενο βήμα, στην φυσική εξέλιξη των πραγμάτων, είναι να αρχίσει να ψάχνει ένα τρόπο, που να μπορεί να “διαβάσει” το σχήμα της βάσης δεδομένων και να το χρησιμοποιήσει ώστε να δημιουργήσει μια “μηχανή” (source code generation) που θα παράγει τον “βαρετό κώδικα”, γρήγορα, εύκολα και σωστά.

Ένας τρόπος για να αντιμετωπίσει κάποιος το πρόβλημα, είναι να χρησιμοποιήσει τα έτοιμα ORM/DAL frameworks και μηχανισμούς που ήδη υπάρχουν, ή, εναλλακτικά να φτιάξει ένα δικό του. Το σίγουρο είναι, ότι το δεύτερο πάντα φαντάζει πιο “εύκολο” με την πρώτη ματιά. Αλλά, αν κάποιος δοκιμάσει να το υλοποιήσει, το πρώτο πράγμα που θα σκοντάψει είναι, στο πως θα ανακαλύψει το σχήμα της βάσης που θα θελήσει κάθε φορά, χρησιμοποιώντας μια σταθερή μεθοδολογία. Το πρόβλημα είναι ακόμα πιο έντονο, όταν δεν κάποιος δεν χρησιμοποιεί μόνο μια μηχανή βάσης δεδομένων, ή, η βάση που θα χρησιμοποιήσει είναι για αυτόν σαν το λαχείο – εξαρτάται από το ποιος θα είναι ο αποδέκτης του project που έχει αναλάβει.

Η ανακάλυψη του schema μιας βάσης δεδομένων, σε άλλες βάσεις είναι πιο εύκολο, σε άλλες πιο δύσκολο, και σε άλλες μοιάζει απόκρυφη τέχνη. Δεν υπάρχει ένας δεδομένος/ σταθερός τρόπος που να ταιριάζει σε όλες, καθώς όλες οι βάσεις δεν υποστηρίζουν στον ίδιο βαθμό τα προκαθορισμένα standards, και γνωρίζοντας από προσωπική εμπειρία, οι καταστάσεις που βρίσκεται ο προγραμματιστής κατά την διάρκεια του εγχειρήματος είναι παρόμοιες με αυτές του μοντέλου Kübler-Ross – άρνηση, θυμός, παζάρι, κατάθλιψη, αποδοχή – μέχρι που θα εγκαταλείψει, ξέροντας ότι δεν μπορεί από μόνος του να το υλοποιήσει.

Στην περίπτωσή μου, πριν από λίγο καιρό, “παίζοντας” με το T4 engine του Visual Studio 2008, ανακάλυψα ότι μπορούσα να συνθέσω εύκολα templates που να παράγουν κώδικα για μένα. Χρησιμοποιώντας το T4Toolbox, έφτιαξα Τ4 templates για το επερχόμενο SubSonic3. Τα templates αυτά τράβηξαν την προσοχή του δημιουργού του SubSonic3, Rob Conery που μου ζήτησε να τα ξαναφτιάξω, με ένα τρόπο που να μην υπήρχαν hard references στα assemblies των database providers – για μια ακόμη η “ανάγκη” φορά χτύπησε την πόρτα μου. Η βιβλιοθήκη Data.Common.DbSchema, είναι η 3η ή 4η ξαναγραμένη (refactored) έκδοση της βιβλιοθήκης τους τελευταίους 3 μήνες – το ότι υπάρχει και δουλεύει και μάλλον οφείλεται στο ότι απλά η ν-οστή φορά είναι η “τυχερή”!

Το Data.Common.DbSchema είναι μια managed βιβλιοθήκη που έγινε διαθέσιμη μέσω του CodePlex με σκοπό να βοηθήσει όσους έχουν να αντιμετωπίσουν το πρόβλημα της εύκολης και γρήγορης εύρεσης του σχήματος μιας βάσης για την παραπέρα αυτοματοποίηση δημιουργίας κώδικα, που τους δίνει πρόσβαση στην βάση δεδομένων.

Σκοπός τη βιβλιοθήκης είναι να βρίσκει το schema μιας βάσης: Λέγοντας schema, εννοώ ότι μπορεί να ανακαλύψει τα Tables, Views της βάσης, και τα Columns που τα αποτελούν, τα Store Procedures και τα Parameters τους, και τέλος τις σχέσεις που έχουν μεταξύ τους, One-to-Many, Many-to-One, Many-to-Many.

Η βιβλιοθήκη της από μόνη της δεν αποτελεί ένα επίτευγμα – ο συνδυασμός της με άλλα frameworks, πχ ORM Mappers, μπορεί να αυτοματοποιήσει την δημιουργία κώδικα DAL. Μέσα στον πηγαίο κώδικα της βιβλιοθήκης περιέχεται και ένα παράδειγμα στην δημιουργία ενός Data Layer με την χρήση του NHibernate.

Η βιβλιοθήκη, αυτή τη στιγμή υποστηρίζει τις βάσεις, SQL Server, SQL Server Compact, MySQL, PostgreSQL και είναι πολύ εύκολο να επεκταθεί ώστε να υποστηρίξει και άλλες βάσεις. Δεν έχει hard references στα managed assemblies των data providers, για να μπορεί να γίνει εύκολο compile σε οποιοδήποτε περιβάλλον – χρησιμοποιεί τα αντικείμενα του DbProviderFactory για την πρόσβασή της στις βάσεις.

Με ετικέτα: , ,

Απάντηση