Nette Documentation Preview

syntax
Ιστορία της Nette
*****************

.[perex]
Η προέλευση του Nette χρονολογείται από το 2004, όταν ο συγγραφέας του David Grudl άρχισε να αναζητά ένα κατάλληλο πλαίσιο για τη συγγραφή εφαρμογών, καθώς η καθαρή PHP δεν ήταν πλέον επαρκής. Καμία από τις διαθέσιμες λύσεις που υπήρχαν εκείνη την εποχή δεν του ταίριαζε, οπότε άρχισε σταδιακά να σκιαγραφεί τα χαρακτηριστικά ενός νέου πλαισίου, το οποίο αργότερα πήρε το όνομα Nette.

Εκείνη την εποχή δεν υπήρχαν ακόμη τα σημερινά πλαίσια όπως το Symfony, το Laravel ή το Ruby on Rails. Στον κόσμο της Java, το JSF (JavaServer Faces) ήταν το πρότυπο, και στον ανταγωνιστικό χώρο του .NET, το ASP.NET Webforms ήταν το κυρίαρχο πλαίσιο. Και τα δύο επέτρεπαν τη δημιουργία σελίδων με τη χρήση επαναχρησιμοποιήσιμων στοιχείων UI. Ο David θεώρησε ότι οι μέθοδοι αφαίρεσης και οι προσπάθειές τους να δημιουργήσουν απάτη μέσω του stateless πρωτοκόλλου HTTP με τη χρήση συνεδριών ή postbacks ήταν ελαττωματικές και θεμελιωδώς προβληματικές. Προκάλεσαν πολλές δυσκολίες για τους χρήστες και τις μηχανές αναζήτησης. Για παράδειγμα, αν αποθηκεύατε έναν σύνδεσμο, εκπλαγείτε όταν βρίσκατε αργότερα διαφορετικό περιεχόμενο κάτω από αυτόν.

Η δυνατότητα σύνθεσης σελίδων από επαναχρησιμοποιήσιμα στοιχεία UI γοήτευσε τον David, ο οποίος το γνώριζε καλά από τους Delphi, ένα δημοφιλές εργαλείο για την κατασκευή εφαρμογών γραφείου εκείνη την εποχή. Του άρεσαν οι αγορές με συστατικά ανοιχτού κώδικα για τους Delphi. Έτσι προσπάθησε να λύσει το ερώτημα πώς να δημιουργήσει ένα πλαίσιο συστατικών που με τη σειρά του θα λειτουργούσε σε πλήρη αρμονία με το stateless HTTP. Έψαχνε για μια ιδέα που θα ήταν φιλική προς τους χρήστες, το SEO και τους προγραμματιστές. Και έτσι γεννήθηκε η Nette.

.[note]
Το όνομα Nette προέκυψε τυχαία στο μπάνιο, όταν ο συγγραφέας εντόπισε ένα μπουκάλι με τζελ ξυρίσματος Gillette, περιστραμμένο έτσι ώστε να φαίνεται μόνο το *llette*.

Ακολούθησαν χιλιάδες ώρες έρευνας, σκέψης και επαναδιατύπωσης. Σε ένα σκονισμένο γκαράζ σε ένα χωριό κάπου έξω από το Μπρνο, δημιουργήθηκαν τα πρώτα περιγράμματα του μελλοντικού πλαισίου. Η βάση της αρχιτεκτονικής ήταν το μοτίβο MVC, το οποίο χρησιμοποιήθηκε τότε από το ξεχασμένο πλέον πλαίσιο PHP Mojavi και αργότερα έγινε δημοφιλές από τη διαφημιστική εκστρατεία γύρω από το Ruby on Rails. Μια από τις πηγές έμπνευσης ήταν ακόμη και το πλαίσιο phpBase που δεν δημοσιεύτηκε ποτέ από τον Honza Tichý.

Άρθρα για το επερχόμενο Nette άρχισαν να εμφανίζονται στο blog του συγγραφέα. Αστειεύονταν ότι επρόκειτο για vaporware. Αλλά τότε, τον Οκτώβριο του 2007, στο συνέδριο PHP Seminar της Πράγας, ο David παρουσίασε δημοσίως το Nette. Παρεμπιπτόντως, αυτό το συνέδριο εξελίχθηκε σε WebExpo ένα χρόνο αργότερα, αργότερα ένα από τα μεγαλύτερα συνέδρια πληροφορικής στην Ευρώπη. Ακόμα και τότε το Nette παρουσίαζε με υπερηφάνεια μια σειρά από πρωτότυπες έννοιες, όπως το προαναφερθέν μοντέλο συστατικών, ο αμφίδρομος δρομολογητής, ο ειδικός τρόπος σύνδεσης μεταξύ των παρουσιαστών κ.λπ. Είχε φόρμες, έλεγχο ταυτότητας, προσωρινή αποθήκευση κ.λπ. Τα πάντα εξακολουθούν να χρησιμοποιούνται στο Nette με την αρχική του αντίληψη μέχρι σήμερα.

.[note]
Το Nette χρησιμοποιεί *παρουσιαστή* αντί για *ελεγκτή* επειδή υπήρχαν υποτίθεται πάρα πολλές λέξεις που άρχιζαν με *con* στον κώδικα (ελεγκτής, front controller, control, config, container, ...).

Στα τέλη του 2007, ο David Grudl δημοσίευσε τον κώδικα και το Nette 0.7 κυκλοφόρησε. Μια ενθουσιώδης κοινότητα προγραμματιστών σχηματίστηκε γύρω από αυτό και άρχισε να συναντιέται κάθε μήνα στην εκδήλωση Posobota. Στην κοινότητα συμμετείχαν πολλοί από τους σημερινούς φωστήρες, όπως ο Ondrej Mirtes, συγγραφέας του σπουδαίου εργαλείου PHPStan. Η ανάπτυξη του Nette προχώρησε και τα επόμενα δύο χρόνια κυκλοφόρησαν οι εκδόσεις 0.8 και 0.9, θέτοντας τις βάσεις για όλα σχεδόν τα σημερινά μέρη του πλαισίου. Συμπεριλαμβανομένων των αποσπασμάτων AJAX που προηγούνται του Hotwire για Ruby on Rails ή του Symfony UX Turbo κατά 14 χρόνια.

Αλλά ένα κρίσιμο πράγμα έλειπε από το Nette τότε. Το Dependecy injection container (DIC). Η Nette χρησιμοποιούσε ένα *service locator* και η πρόθεση ήταν να μεταβεί σε dependecy injection. Αλλά πώς να σχεδιαστεί ένα τέτοιο πράγμα; Ο David Grudl, ο οποίος δεν είχε καμία εμπειρία με το DI εκείνη την εποχή, πήγε για φαγητό με τον Vasek Purchart, ο οποίος χρησιμοποιούσε το DI εδώ και περίπου μισό χρόνο. Μαζί συζήτησαν το θέμα και ο David άρχισε να εργάζεται πάνω στο Nette DI, μια βιβλιοθήκη που έφερε πλήρη επανάσταση στον τρόπο με τον οποίο σκεφτόμαστε για τη σχεδίαση εφαρμογών. Το δοχείο DI έγινε ένα από τα πιο επιτυχημένα μέρη του πλαισίου. Και έδωσε το έναυσμα για δύο παρακλάδια: τη μορφή Neon και τη βιβλιοθήκη Schema.

.[note]
Η μετάβαση στην έγχυση εξαρτήσεων χρειάστηκε πολύ χρόνο και περιμέναμε δύο χρόνια για μια νέα έκδοση του Nette. Ως εκ τούτου, όταν τελικά κυκλοφόρησε, είχε την αρίθμηση 2. Επομένως, η έκδοση 1 της Nette δεν υπάρχει.

Η Nette ξεκίνησε τη σύγχρονη ιστορία της το 2012 με την έκδοση 2.0. Έφερε επίσης τη βάση δεδομένων Nette Database, η οποία περιλάμβανε ένα εξαιρετικά εύχρηστο εργαλείο βάσης δεδομένων, που τώρα ονομάζεται Explorer. Αυτή η βιβλιοθήκη προγραμματίστηκε αρχικά από τον Jakub Vrána, γείτονα του David Grudl και συγγραφέα του δημοφιλούς εργαλείου Adminer. Την περαιτέρω ανάπτυξή της ανέλαβε στη συνέχεια ο Jan Škrášek για τρία χρόνια.

Το 2014 κυκλοφόρησε η έκδοση Nette 2.1, την οποία ακολούθησε σύντομα η έκδοση Nette 2.2. Πώς είναι αυτό δυνατόν; Η έκδοση 2.2 ήταν η ίδια με την έκδοση 2.1, απλά χωρισμένη σε είκοσι ξεχωριστά πακέτα. Το εργαλείο Composer επικράτησε στον κόσμο της PHP και άλλαξε τον τρόπο με τον οποίο σκεφτόμαστε τη δημιουργία βιβλιοθηκών. Η Nette έπαψε να είναι ένας μονόλιθος και διασπάστηκε σε μικρότερα ανεξάρτητα μέρη. Το καθένα με το δικό του αποθετήριο, issue tracker και τη δική του ροή ανάπτυξης και έκδοσης. Με αυτόν τον τρόπο η Nette δεν χρειάζεται να περάσει από τον παραλογισμό που συνηθίζεται στα μονολιθικά frameworks, όπου βγαίνει μια νέα έκδοση ενός πακέτου παρόλο που τίποτα δεν έχει αλλάξει. Ο πραγματικός διαχωρισμός των αποθετηρίων Git απαιτούσε αρκετές εβδομάδες προετοιμασίας και εκατοντάδες ώρες μηχανογραφικού χρόνου.

Το Nette κατέλαβε επίσης την εκπληκτική 3η θέση στην παγκόσμια ψηφοφορία για το καλύτερο πλαίσιο PHP που διοργάνωσε το περιοδικό Sitepoint.



{{toc:no}}
{{leftbar: @menu-common}}

Ιστορία της Nette

Η προέλευση του Nette χρονολογείται από το 2004, όταν ο συγγραφέας του David Grudl άρχισε να αναζητά ένα κατάλληλο πλαίσιο για τη συγγραφή εφαρμογών, καθώς η καθαρή PHP δεν ήταν πλέον επαρκής. Καμία από τις διαθέσιμες λύσεις που υπήρχαν εκείνη την εποχή δεν του ταίριαζε, οπότε άρχισε σταδιακά να σκιαγραφεί τα χαρακτηριστικά ενός νέου πλαισίου, το οποίο αργότερα πήρε το όνομα Nette.

Εκείνη την εποχή δεν υπήρχαν ακόμη τα σημερινά πλαίσια όπως το Symfony, το Laravel ή το Ruby on Rails. Στον κόσμο της Java, το JSF (JavaServer Faces) ήταν το πρότυπο, και στον ανταγωνιστικό χώρο του .NET, το ASP.NET Webforms ήταν το κυρίαρχο πλαίσιο. Και τα δύο επέτρεπαν τη δημιουργία σελίδων με τη χρήση επαναχρησιμοποιήσιμων στοιχείων UI. Ο David θεώρησε ότι οι μέθοδοι αφαίρεσης και οι προσπάθειές τους να δημιουργήσουν απάτη μέσω του stateless πρωτοκόλλου HTTP με τη χρήση συνεδριών ή postbacks ήταν ελαττωματικές και θεμελιωδώς προβληματικές. Προκάλεσαν πολλές δυσκολίες για τους χρήστες και τις μηχανές αναζήτησης. Για παράδειγμα, αν αποθηκεύατε έναν σύνδεσμο, εκπλαγείτε όταν βρίσκατε αργότερα διαφορετικό περιεχόμενο κάτω από αυτόν.

Η δυνατότητα σύνθεσης σελίδων από επαναχρησιμοποιήσιμα στοιχεία UI γοήτευσε τον David, ο οποίος το γνώριζε καλά από τους Delphi, ένα δημοφιλές εργαλείο για την κατασκευή εφαρμογών γραφείου εκείνη την εποχή. Του άρεσαν οι αγορές με συστατικά ανοιχτού κώδικα για τους Delphi. Έτσι προσπάθησε να λύσει το ερώτημα πώς να δημιουργήσει ένα πλαίσιο συστατικών που με τη σειρά του θα λειτουργούσε σε πλήρη αρμονία με το stateless HTTP. Έψαχνε για μια ιδέα που θα ήταν φιλική προς τους χρήστες, το SEO και τους προγραμματιστές. Και έτσι γεννήθηκε η Nette.

Το όνομα Nette προέκυψε τυχαία στο μπάνιο, όταν ο συγγραφέας εντόπισε ένα μπουκάλι με τζελ ξυρίσματος Gillette, περιστραμμένο έτσι ώστε να φαίνεται μόνο το llette.

Ακολούθησαν χιλιάδες ώρες έρευνας, σκέψης και επαναδιατύπωσης. Σε ένα σκονισμένο γκαράζ σε ένα χωριό κάπου έξω από το Μπρνο, δημιουργήθηκαν τα πρώτα περιγράμματα του μελλοντικού πλαισίου. Η βάση της αρχιτεκτονικής ήταν το μοτίβο MVC, το οποίο χρησιμοποιήθηκε τότε από το ξεχασμένο πλέον πλαίσιο PHP Mojavi και αργότερα έγινε δημοφιλές από τη διαφημιστική εκστρατεία γύρω από το Ruby on Rails. Μια από τις πηγές έμπνευσης ήταν ακόμη και το πλαίσιο phpBase που δεν δημοσιεύτηκε ποτέ από τον Honza Tichý.

Άρθρα για το επερχόμενο Nette άρχισαν να εμφανίζονται στο blog του συγγραφέα. Αστειεύονταν ότι επρόκειτο για vaporware. Αλλά τότε, τον Οκτώβριο του 2007, στο συνέδριο PHP Seminar της Πράγας, ο David παρουσίασε δημοσίως το Nette. Παρεμπιπτόντως, αυτό το συνέδριο εξελίχθηκε σε WebExpo ένα χρόνο αργότερα, αργότερα ένα από τα μεγαλύτερα συνέδρια πληροφορικής στην Ευρώπη. Ακόμα και τότε το Nette παρουσίαζε με υπερηφάνεια μια σειρά από πρωτότυπες έννοιες, όπως το προαναφερθέν μοντέλο συστατικών, ο αμφίδρομος δρομολογητής, ο ειδικός τρόπος σύνδεσης μεταξύ των παρουσιαστών κ.λπ. Είχε φόρμες, έλεγχο ταυτότητας, προσωρινή αποθήκευση κ.λπ. Τα πάντα εξακολουθούν να χρησιμοποιούνται στο Nette με την αρχική του αντίληψη μέχρι σήμερα.

Το Nette χρησιμοποιεί παρουσιαστή αντί για ελεγκτή επειδή υπήρχαν υποτίθεται πάρα πολλές λέξεις που άρχιζαν με con στον κώδικα (ελεγκτής, front controller, control, config, container, …).

Στα τέλη του 2007, ο David Grudl δημοσίευσε τον κώδικα και το Nette 0.7 κυκλοφόρησε. Μια ενθουσιώδης κοινότητα προγραμματιστών σχηματίστηκε γύρω από αυτό και άρχισε να συναντιέται κάθε μήνα στην εκδήλωση Posobota. Στην κοινότητα συμμετείχαν πολλοί από τους σημερινούς φωστήρες, όπως ο Ondrej Mirtes, συγγραφέας του σπουδαίου εργαλείου PHPStan. Η ανάπτυξη του Nette προχώρησε και τα επόμενα δύο χρόνια κυκλοφόρησαν οι εκδόσεις 0.8 και 0.9, θέτοντας τις βάσεις για όλα σχεδόν τα σημερινά μέρη του πλαισίου. Συμπεριλαμβανομένων των αποσπασμάτων AJAX που προηγούνται του Hotwire για Ruby on Rails ή του Symfony UX Turbo κατά 14 χρόνια.

Αλλά ένα κρίσιμο πράγμα έλειπε από το Nette τότε. Το Dependecy injection container (DIC). Η Nette χρησιμοποιούσε ένα service locator και η πρόθεση ήταν να μεταβεί σε dependecy injection. Αλλά πώς να σχεδιαστεί ένα τέτοιο πράγμα; Ο David Grudl, ο οποίος δεν είχε καμία εμπειρία με το DI εκείνη την εποχή, πήγε για φαγητό με τον Vasek Purchart, ο οποίος χρησιμοποιούσε το DI εδώ και περίπου μισό χρόνο. Μαζί συζήτησαν το θέμα και ο David άρχισε να εργάζεται πάνω στο Nette DI, μια βιβλιοθήκη που έφερε πλήρη επανάσταση στον τρόπο με τον οποίο σκεφτόμαστε για τη σχεδίαση εφαρμογών. Το δοχείο DI έγινε ένα από τα πιο επιτυχημένα μέρη του πλαισίου. Και έδωσε το έναυσμα για δύο παρακλάδια: τη μορφή Neon και τη βιβλιοθήκη Schema.

Η μετάβαση στην έγχυση εξαρτήσεων χρειάστηκε πολύ χρόνο και περιμέναμε δύο χρόνια για μια νέα έκδοση του Nette. Ως εκ τούτου, όταν τελικά κυκλοφόρησε, είχε την αρίθμηση 2. Επομένως, η έκδοση 1 της Nette δεν υπάρχει.

Η Nette ξεκίνησε τη σύγχρονη ιστορία της το 2012 με την έκδοση 2.0. Έφερε επίσης τη βάση δεδομένων Nette Database, η οποία περιλάμβανε ένα εξαιρετικά εύχρηστο εργαλείο βάσης δεδομένων, που τώρα ονομάζεται Explorer. Αυτή η βιβλιοθήκη προγραμματίστηκε αρχικά από τον Jakub Vrána, γείτονα του David Grudl και συγγραφέα του δημοφιλούς εργαλείου Adminer. Την περαιτέρω ανάπτυξή της ανέλαβε στη συνέχεια ο Jan Škrášek για τρία χρόνια.

Το 2014 κυκλοφόρησε η έκδοση Nette 2.1, την οποία ακολούθησε σύντομα η έκδοση Nette 2.2. Πώς είναι αυτό δυνατόν; Η έκδοση 2.2 ήταν η ίδια με την έκδοση 2.1, απλά χωρισμένη σε είκοσι ξεχωριστά πακέτα. Το εργαλείο Composer επικράτησε στον κόσμο της PHP και άλλαξε τον τρόπο με τον οποίο σκεφτόμαστε τη δημιουργία βιβλιοθηκών. Η Nette έπαψε να είναι ένας μονόλιθος και διασπάστηκε σε μικρότερα ανεξάρτητα μέρη. Το καθένα με το δικό του αποθετήριο, issue tracker και τη δική του ροή ανάπτυξης και έκδοσης. Με αυτόν τον τρόπο η Nette δεν χρειάζεται να περάσει από τον παραλογισμό που συνηθίζεται στα μονολιθικά frameworks, όπου βγαίνει μια νέα έκδοση ενός πακέτου παρόλο που τίποτα δεν έχει αλλάξει. Ο πραγματικός διαχωρισμός των αποθετηρίων Git απαιτούσε αρκετές εβδομάδες προετοιμασίας και εκατοντάδες ώρες μηχανογραφικού χρόνου.

Το Nette κατέλαβε επίσης την εκπληκτική 3η θέση στην παγκόσμια ψηφοφορία για το καλύτερο πλαίσιο PHP που διοργάνωσε το περιοδικό Sitepoint.