Υπάρχουν πάρα πολλά utilities και frameworks τα οποία μπορεί να πει κανείς ότι κάνουν code generation. Καταρχήν, μπορείς να χρησιμοποιήσεις το ίδιο το Visual Studio για να τραβήξεις ένα data source (object ή dataset) και να το ρίξεις σε μία φόρμα. Το VS θα προσθέσει στη φόρμα τα κατάλληλα πεδία, το datasource και το navigation toolbar. Μπορεί η λύση να είναι λίγο χειροκίνητη αλλά δουλεύει.
Μετά, σε καθαρά code generation επίπεδο, υπάρχει το Codesmith το οποίο χρησιμοποιεί templates γραμμένα σε μία γλώσσα που θυμίζει ASP.NET για να δημιουργήσει κλάσεις και data access layers από το σχήμα μίας βάσης (και όχι μόνο). Στο Codeplex υπάρχουν πάρα πολλοί άλλοι code generators. Το καλό με τους code generators είναι ότι μπορούν να δημιουργήσουν τις φόρμες και τα data layers γρήγορα, από εκεί και πέρα όμως οι αλλαγές στη βάση θα πρέπει να μεταφερθούν στις φόρμες με το χέρι.
Τέλος, υπάρχουν διάφορα frameworks όπως το Deklarit, το Ideablade DevForce και το DevExpress eXpressApp Framework τα οποία μπορούν να δημιουργήσουν φόρμες, data layers ακόμα και τους πίνακες από ένα object model. Όλα υποστηρίζουν με κάποιο τρόπο τη μεταφορά των αλλαγών από το object model στη βάση ή το αντίστροφο, ακόμα και στον πελάτη. Το κάθε εργαλείο όμως έχει τη δική του φιλοσοφία. Για παράδειγμα, το eXpressApp Framework δημιουργεί μόνο του τους πίνακες από το object model και δεν επιτρέπει reverse engineering της βάσης, κάτι που το κάνουν τα άλλα frameworks. Έχει όμως ενσωματωμένη υποστήριξη για το Workflow Foundation. Το καλό με αυτές τις λύσεις είναι ότι επιτρέπουν την γρήγορη ανάπτυξη μιας καλά σχεδιασμένης εφαρμογής. Το "κακό" είναι ότι δίνουν πολύ περισσότερα από ένα form generator και απατιούν προσαρμογή στον τρόπο που δουλεύει το κάθε εργαλείο.
Παρόμοια frameworks στην προ-.NET εποχή δεν είχαν μεγάλη επιτυχία καθώς δεν έδιναν μία ολοκληρωμένη αρχιτεκτονική και είχαν πολλούς περιορισμούς. Από τότε όμως τα πράγματα έχουν αλλάξει πολύ. Κάθε ένα από τα παραπάνω frameworks μπορεί να ανταπεξέλθει σε αρκετά μεγάλα και δύσκολα projects.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos