Προγραμματισμός

JRuby on Rails: Η δύναμη της Java, η απλότητα του Ruby on Rails

Η Ruby, η πλήρης χαρακτηριστική δυναμική γλώσσα (scripting), με ισχυρή υποστήριξη για λειτουργικό προγραμματισμό και μεταπρογραμματισμό, επέστησε πρόσφατα την προσοχή για την ευελιξία και την ευκολία της ανάπτυξης. Το JRuby, ένας διερμηνέας με βάση το JVM για το Ruby, συνδυάζει την ευκολία της γλώσσας Ruby με την εκτέλεση στο ισχυρό JVM, συμπεριλαμβανομένης της πλήρους ενσωμάτωσης από και προς βιβλιοθήκες Java.

Από το προηγούμενο JavaWorld άρθρο σχετικά με το θέμα ("JRuby for the Java World"), υπήρξαν μερικές συναρπαστικές εξελίξεις για το JRuby. Η Sun Microsystems προσέλαβε τους δύο κορυφαίους προγραμματιστές JRuby, τον Charles Nutter και τον Thomas E. Enebo, σε ένδειξη υποστήριξης για τον Ruby στο JVM. Η Java Platform, Standard Edition 6 (Java SE 6) κυκλοφόρησε με ένα νέο πρότυπο API για σύνδεση σε διερμηνείς για δυναμικές γλώσσες. Προβλέπονται σχέδια για το Java 7 VM για την υποστήριξη δυναμικών γλωσσών απευθείας με ένα νέο bytecode "κλήση δυναμικής" και εναλλαγή ορισμών κλάσης κατά την εκτέλεση. Εν τω μεταξύ, η ομάδα JRuby κυκλοφόρησε την έκδοση 0.9.2 με ευρύτερη υποστήριξη για το Ruby on Rails και η επόμενη μεγάλη κυκλοφορία του JRuby, που αναμένεται τον Φεβρουάριο, θα περιλαμβάνει πλήρη υποστήριξη για το Ruby on Rails.

Το Ruby on Rails, ένα εύχρηστο αλλά ισχυρό πλαίσιο Web που βασίζεται στη γλώσσα Ruby, έχει αποκτήσει γρήγορα δημοτικότητα για νέες εφαρμογές Web που υποστηρίζονται από βάση δεδομένων, ειδικά στον κόσμο του Web 2.0. Θα σας παραπέμψω αλλού για λεπτομέρειες του Ruby on Rails, που ονομάζεται επίσης Rails. Παρόλο που το έργο είναι μόλις 3 ετών, πολλά άρθρα και βιβλία έχουν γραφτεί γι 'αυτό και η τεκμηρίωσή του είναι εξαιρετική για ένα έργο ανοιχτού κώδικα (βλ. Την ιστοσελίδα Ruby on Rails). Ομοίως, σας παραπέμπω στο προηγούμενο άρθρο μου για μια εισαγωγή στο JRuby.

Σε αυτό το άρθρο, εξετάζω τη διασταύρωση μεταξύ Rails και Java. Συγκρίνω τα πλαίσια Rails και Java Web, περιγράφω τα οφέλη από την εκτέλεση του Rails με το JRuby και εξετάζω ορισμένα μαθήματα που ένας προγραμματιστής Java - ακόμη και αυτός που δεν χρησιμοποιεί Rails - μπορεί να μάθει από αυτό το καινοτόμο πλαίσιο.

Ισχύς συν απλότητα

Η σιδηροτροχιά επιταχύνει ριζικά και απλοποιεί την ανάπτυξη εφαρμογών Ιστού, αλλά υποφέρει από μια εικόνα ανωριμότητας, ειδικά σε υψηλού επιπέδου δυνατότητες επιχειρήσεων.

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

Το JRuby συνδέει τα συμπληρωματικά πλεονεκτήματα όλων αυτών των τεχνολογιών, υποσχόμενη πρόσθετη δημοτικότητα τόσο για το Ruby όσο και για τα Rails, ενώ παράλληλα δίνει στην πλατφόρμα Java έναν νέο ρόλο στην εκτέλεση γλωσσών εκτός Java.

Rails: Όπου κατευθύνονται τα πλαίσια Java

Για έναν προγραμματιστή Java, το Rails μοιάζει με το φυσικό αποκορύφωμα των τάσεων στην εξέλιξη των πλαισίων Java Web: λιγότερο περιττός κώδικας, περισσότερη αφαίρεση και δυναμισμός και πληρέστερη λειτουργικότητα.

Σύμβαση για τη διαμόρφωση

Οι πρώτες εκδόσεις του Java Platform, Enterprise Edition (Java EE) απαιτούσαν εκτεταμένη διαμόρφωση και κώδικα για κάθε στοιχείο. Το Enterprise JavaBeans, για παράδειγμα, είχε πολλά αρχεία διαμόρφωσης πηγαίου κώδικα και XML για κάθε φασόλι. Αυτή η πολυπλοκότητα μετέτρεψε το EJB σε μια λέξη-κλειδί για την ανάπτυξη βαρέων βαρών και τελικά οδήγησε σε μια στροφή 180 μοιρών στο EJB 3, το οποίο στοχεύει σε φασόλια POJO (απλά αντικείμενα Java) με ελάχιστη πλεονασμό και διαμόρφωση. Ωστόσο, οι εφαρμογές βαρέων βαρών Java EE απαιτούν από τους προγραμματιστές να αναπτύξουν κώδικα για να εκφράσουν τα ίδια επιχειρηματικά αντικείμενα σε πολλές βαθμίδες λογισμικού - GUI, επιχειρηματική λογική και επιμονή. Στη συνέχεια, παρά την πλεονασματικότητα και την ομοιότητα μεταξύ των επιπέδων, οι προγραμματιστές πρέπει να κολλήσουν τα επίπεδα μαζί με αρχεία διαμόρφωσης. Αντίθετα, τα νεότερα Java Web Frameworks Seam and Spring εκθέτουν επαγγελματικά αντικείμενα με πολύ λιγότερη διαμόρφωση και κώδικα.

Τα πλαίσια Java έχουν επίσης προχωρήσει προς την τυποποίηση και την ενσωμάτωση μιας στοίβας σε όλες τις βαθμίδες μιας εφαρμογής Web. Τις πρώτες μέρες, οι προγραμματιστές εφαρμογών Java Web αποκωδικοποιήθηκαν με το χέρι έξοδο HTML από servlets, δημιούργησαν τις δικές τους αρχιτεκτονικές Model-View-Controller και είχαν πρόσβαση στις βάσεις δεδομένων τους με SQL μέσω Java Database Connectivity (JDBC). Αργότερα, συγκέντρωσαν στοιχεία για να εκτελέσουν πολλές από τις κοινές λειτουργίες, όπως βιβλιοθήκες ετικετών, Struts και Hibernate. Πρόσφατα, η Spring ενσωμάτωσε μεγάλο μέρος της λειτουργικότητας σε μία ελαφριά στοίβα από πάνω προς τα κάτω.

Από την αρχή, η Rails έχει ενσωματώσει αυτές τις αρχές της απλότητας, αρχές που είναι γνωστές στην κοινότητα Rails ως "Μην επαναλάβετε τον εαυτό σας" και "Σύμβαση για τη διαμόρφωση". (Η μη απόλυση και οι ουσιαστικές προεπιλογές συγκαταλέγονται στις παλαιότερες αρχές της μηχανικής λογισμικού. Είναι ένα θαύμα που έπρεπε να περιμένουμε τόσο πολύ για κάτι σαν Rails.) Το πλαίσιο υποθέτει τη σύνδεση μεταξύ διαφορετικών επιπέδων με βάση απλές συμβάσεις. Για παράδειγμα, δεν υπάρχει ανάγκη για XML, σχολιασμούς ή παρόμοια, για να πει το πλαίσιο ότι η κλάση πελατών υποστηρίζεται από το οι πελάτες τραπέζι; Το επίπεδο αναδίπλωσης βάσης δεδομένων ActiveRecord της Rails το μαντέψει αυτό (λαμβάνοντας υπόψη την πολυφωνία και την κεφαλαιοποίηση). Οι ράγες φτάνουν μέχρι να προσθέσουν έμμεσα και δυναμικά χαρακτηριστικά για να αντικατοπτρίζουν τις στήλες της βάσης δεδομένων: α επίθετο Η στήλη φέρνει αυτόματα ένα επίθετο χαρακτηριστικό στο ον.

Σε ειδικές περιπτώσεις, όπου οι συμβάσεις δεν ικανοποιούν τις ανάγκες σας, μπορείτε ακόμα να προσθέσετε διαμόρφωση, χρησιμοποιώντας καθαρό κώδικα Ruby ή την ελαφριά μορφή YAML τύπου Ruby, και οι δύο παραλείπουν τις περιττές αγκύλες και τις ετικέτες κλεισίματος της XML. Αλλά πρέπει να τηρείτε τις προεπιλογές όπου είναι δυνατόν. Το Rails είναι "λογισμικό με γνώμονα", το οποίο το καθιστά πολύ πιο εύκολο όταν ακολουθείτε τη ροή.

Το Rails είναι ένα πλαίσιο "συμπεριλαμβανόμενων μπαταριών" (μια φράση που διαδίδεται από την Python): περιλαμβάνει όλα όσα χρειάζεστε για μια τυπική εφαρμογή Web που υποστηρίζεται από βάση δεδομένων, από επίπεδο πρόσβασης δεδομένων, μέσω μοντέλου, προβολής και ελεγκτή. Σας επιτρέπει να επικεντρωθείτε στο τι είναι συγκεκριμένο για την εφαρμογή σας, αντί να κωδικοποιήσετε κοινές λειτουργίες ή να αναζητήσετε βιβλιοθήκες ανοιχτού κώδικα που συνδυάζονται καλά μαζί.

Δυναμισμός και προβληματισμός

Τα πλαίσια Java κινούνται επίσης προς τη μεγαλύτερη χρήση προβληματισμού και μεταπρογραμματισμού. Το Spring, για παράδειγμα, χρησιμοποιεί την αντανάκλαση για να συνδέσει όλα τα κομμάτια της μαζί με την εξάρτηση έγχυσης, σε αντίθεση με την πιο στατική προσέγγιση της τυπικής στοίβας διακομιστή Java EE. Το Hibernate, το δημοφιλές πλαίσιο αντιστοίχισης αντικειμενικής αντιστοίχισης, κάνει τη χαρτογράφηση του με δυναμικό μεταπρογραμματισμό, ενημερώνοντας τον bytecode κατά το χρόνο εκτέλεσης, σε αντίθεση με τα αρχικά πλαίσια πρόσβασης δεδομένων, τα οποία απαιτούσαν πολύπλοκη δημιουργία πηγαίου κώδικα ή bytecode κατά την ανάπτυξη.

Οι προγραμματιστές του Hibernate έπρεπε να χρησιμοποιήσουν κάποιες προηγμένες τεχνικές για να επιτύχουν αυτήν τη λειτουργικότητα, αλλά στο Ruby, ο μεταπρογραμματισμός είναι ένα τόσο φυσικό μέρος της γλώσσας που η Rails, κατά το χρόνο εκτέλεσης, δημιουργεί δυναμικά όχι μόνο αντιστοιχίσεις, αλλά και τους ορισμούς κλάσης business-layer που απαιτούνται για πρόσβαση και εμφάνιση της υποκείμενης βάσης δεδομένων, ελαχιστοποιώντας έτσι την ανάγκη για μη αυτόματη κωδικοποίηση ή δημιουργία άκαμπτου κώδικα που δημιουργείται.

Υποστήριξη της διαδικασίας ανάπτυξης

Γύρω στα τέλη της δεκαετίας του 1990, οι προγραμματιστές Java "δοκιμάστηκαν μολυσμένοι" με τα πλαίσια JUnit, αλλά η συγγραφή δοκιμών για εφαρμογές από διακομιστή ήταν πάντα δύσκολη. Το Spring δημιουργεί τώρα δοκιμές μαζί με την εφαρμογή Web. Το Rails κάνει το ίδιο, εκμεταλλευόμενο το δυναμισμό και τον μεταπρογραμματισμό για να υποστηρίξει πολλαπλούς τύπους δοκιμών: δοκιμές μονάδας, οι οποίες ασκούν τις μεμονωμένες μεθόδους των τάξεων μοντέλου. λειτουργικές δοκιμές, οι οποίες λειτουργούν στο επίπεδο του επιμέρους αιτήματος Web · και δοκιμές ενοποίησης, οι οποίες εκτελούν μια σειρά αιτημάτων Ιστού σε μια προσομοιωμένη συνεδρία χρήστη.

Τα δημοφιλή εργαλεία Ant και Maven τυποποίησαν την αυτοματοποίηση των κατασκευών στην Java. Οι ράγες, επίσης, διευκολύνουν την κατασκευή με τον Ruby's τσουγκράνα εργαλείο κατασκευής; Προσθέτει ένα καινοτόμο σύστημα μετεγκατάστασης, το οποίο αυτοματοποιεί την αναβάθμιση (ή επαναφορά) σχημάτων και δεδομένων βάσης δεδομένων.