Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Πώς διαφέρει η Java από άλλες δημοφιλείς γλώσσες; Γιατί πρέπει η Java να είναι η πρώτη γλώσσα που μαθαίνεται; Ας δημιουργήσουμε ένα σχέδιο που θα σας βοηθήσει να μάθετε Java τόσο από την αρχή όσο και εφαρμόζοντας δεξιότητες προγραμματισμού σε άλλες γλώσσες. Ας απαριθμήσουμε τις διαφορές μεταξύ της δημιουργίας κώδικα παραγωγής σε Java και της ανάπτυξης σε άλλες γλώσσες. Ο Mikhail Zatepyakin διάβασε αυτήν την έκθεση σε μια συνάντηση για μελλοντικούς συμμετέχοντες Πρόγραμμα Πρακτικής Άσκησης Yandex και άλλοι αρχάριοι προγραμματιστές - Java Junior meetup.


— Γεια σε όλους, με λένε Μίσα. Είμαι προγραμματιστής από το Yandex.Market και σήμερα θα σας πω γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Μπορείτε να κάνετε μια εύλογη ερώτηση: γιατί θα λέω αυτήν την ιστορία, και όχι κάποιος ισχυρός προγραμματιστής με πολλά χρόνια εμπειρίας; Γεγονός είναι ότι ο ίδιος σπούδασα Java πρόσφατα, πριν από ενάμιση χρόνο περίπου, οπότε θυμάμαι ακόμα πώς ήταν και τι παγίδες υπάρχουν.

Πριν από ένα χρόνο έκανα πρακτική άσκηση στο Yandex.Market. Ανέπτυξα το backend για το Beru, για το ίδιο το Market, μάλλον το χρησιμοποιήσατε. Τώρα συνεχίζω να δουλεύω εκεί, σε διαφορετική ομάδα. Δημιουργούμε μια αναλυτική πλατφόρμα για το Yandex.Market για επιχειρηματικούς συνεργάτες.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Ας αρχίσουμε. Γιατί να μάθετε Java από πρακτική άποψη; Το γεγονός είναι ότι η Java είναι μια πολύ διάσημη γλώσσα προγραμματισμού. Έχει μια πολύ μεγάλη κοινότητα.

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

Δεδομένου ότι η κοινότητα είναι πολύ μεγάλη, όποια ερώτηση έχετε θα βρείτε απάντηση σε κάποιο Stack Overflow ή σε άλλους ιστότοπους. Επίσης, κατά την ανάπτυξη σε Java, στην πραγματικότητα γράφετε κώδικα στο JVM, ώστε να μπορείτε εύκολα να μεταβείτε σε Kotlin, Scala και άλλες γλώσσες που χρησιμοποιούν το JVM.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Τι καλό έχει η Java από ιδεολογική άποψη; Υπάρχουν διάφορες γλώσσες προγραμματισμού. Λύνουν διάφορα προβλήματα, το ξέρεις αυτό. Για παράδειγμα, η Python είναι εξαιρετική για τη σύνταξη σεναρίων μιας γραμμής για την επίλυση γρήγορων προβλημάτων.

Το θετικό είναι ότι μπορείτε να ελέγξετε πλήρως τον εκτελέσιμο κώδικα. Για παράδειγμα, έχουμε αυτοκίνητα, αυτοκίνητα Yandex χωρίς οδηγό, ο κωδικός τους είναι γραμμένος με συν. Γιατί; Η Java έχει κάτι τέτοιο - Garbage Collector. Καθαρίζει τη μνήμη RAM από περιττά αντικείμενα. Αυτό το πράγμα ξεκινάει αυθόρμητα και κάνει stop-the-world, δηλαδή σταματάει το υπόλοιπο πρόγραμμα και πάει να μετρήσει αντικείμενα, καθαρή μνήμη αντικειμένων. Αν κάτι τέτοιο λειτουργεί σε drone, δεν είναι ωραίο. Το drone σας θα οδηγεί ευθεία, αυτή τη στιγμή καθαρίστε τη μνήμη του και μην κοιτάτε καθόλου το δρόμο. Επομένως, το drone είναι γραμμένο στα pro.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Ποια προβλήματα λύνει η Java; Είναι κυρίως μια γλώσσα για την ανάπτυξη μεγάλων προγραμμάτων που γράφονται με την πάροδο των ετών, από δεκάδες ή εκατοντάδες άτομα. Συγκεκριμένα, μεγάλο μέρος του backend στο Yandex.Market είναι γραμμένο σε Java. Έχουμε μια κατανεμημένη ομάδα σε πολλές πόλεις, δέκα άτομα σε κάθε μία. Και ο κώδικας είναι εύκολο να διατηρηθεί, υποστηρίζεται εδώ και δέκα χρόνια ή περισσότερα, και ταυτόχρονα έρχονται νέοι άνθρωποι και κατανοούν αυτόν τον κώδικα.

Τι χαρακτηριστικά πρέπει να έχει μια γλώσσα ώστε να υποστηρίζεται εύκολα ο κώδικας σε αυτήν και να μπορεί να αναπτυχθεί εύκολα σε μεγάλες ομάδες. Πρώτα απ 'όλα, θα πρέπει να είναι αναγνώσιμος κώδικας και να είναι εύκολη η εφαρμογή σύνθετων αρχιτεκτονικών λύσεων. Δηλαδή, θα πρέπει να είναι εύκολο να γράφουμε αφαιρέσεις υψηλού επιπέδου κλπ. Όλα αυτά μας παρέχει η Java. Αυτή είναι μια αντικειμενοστραφή γλώσσα. Είναι πραγματικά εύκολο να εφαρμόσετε αφαιρέσεις υψηλού επιπέδου και πολύπλοκες αρχιτεκτονικές.

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

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Ποιες βασικές δεξιότητες, κατά τη γνώμη μου, πρέπει να έχει ένας αρχάριος παίκτης JA; Πρώτα απ 'όλα, αυτή είναι η γνώση της βασικής γλώσσας Java. Ακολουθεί κάποιου είδους πλαίσιο Έγχυσης Εξάρτησης. Ο επόμενος ομιλητής, ο Kirill, θα μιλήσει για αυτό πληρέστερα. Δεν θα πάω πολύ βαθιά. Ακολουθεί η αρχιτεκτονική και τα μοτίβα σχεδιασμού. Πρέπει να μπορούμε να γράφουμε αρχιτεκτονικά όμορφο κώδικα για να γράφουμε μεγάλες εφαρμογές. Και αυτό είναι κάποιο είδος SQL ή ORM για εργασίες εργασίας με τη βάση δεδομένων. Και αυτό ισχύει περισσότερο για το backend.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Πηγαίνω! Πυρήνας Java. Δεν θα ανακαλύψω πραγματικά την Αμερική εδώ - πρέπει να γνωρίζετε την ίδια τη γλώσσα. Τι πρέπει να προσέξεις. Πρώτον, η Java κυκλοφόρησε πολλές εκδόσεις τα τελευταία χρόνια, δηλαδή, το 2014-2015 κυκλοφόρησε η έβδομη, μετά η όγδοη, η ένατη, η δέκατη, πολλές νέες εκδόσεις και πολλά νέα ωραία πράγματα εισήχθησαν σε αυτές , για παράδειγμα, το Java Stream API , το λάμδα κ.λπ. Πολύ ωραία, φρέσκα, δροσερά πράγματα που χρησιμοποιούνται στον κώδικα παραγωγής, τι ζητούν στις συνεντεύξεις και που πρέπει να γνωρίζετε. Επομένως, δεν πρέπει να πάρετε ένα βιβλίο από το ράφι της βιβλιοθήκης Java-4 και να πάτε να το μάθετε. Αυτό είναι το σχέδιό μας: μαθαίνουμε Java-8 ή νεότερη έκδοση.

Δίνουμε μεγάλη προσοχή σε καινοτομίες όπως Stream API, var κ.λπ. Ζητούνται κατά τη διάρκεια συνεντεύξεων και χρησιμοποιούνται συνεχώς στην παραγωγή. Δηλαδή, το Stream API είναι πολύ πιο cool από τους βρόχους, γενικά, ένα πολύ ωραίο πράγμα. Φροντίστε να δώσετε προσοχή.

Και υπάρχουν όλα τα είδη όπως επαναλήπτες, Εξαιρέσεις και ούτω καθεξής. Πράγματα που σας φαίνονται ασήμαντα αρκεί να γράψετε μόνοι σας κάποιο μικρό κώδικα. Δεν χρειάζεσαι αυτές τις Εξαιρέσεις, ποιος τις χρειάζεται άλλωστε; Σίγουρα όμως θα ρωτηθούν σε συνεντεύξεις, σίγουρα θα σας φανούν χρήσιμοι στην παραγωγή. Γενικά, θα πρέπει να προσέχετε τις Εξαιρέσεις, τους επαναληπτικούς και άλλα πράγματα.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Δεν μπορείτε να πάτε χωρίς δομές, αλλά θα είναι υπέροχο αν δεν γνωρίζετε απλώς ότι υπάρχουν σετ, λεξικά και φύλλα. Και επίσης διαφορετικές υλοποιήσεις δομών. Για παράδειγμα, το ίδιο λεξικό σε Java έχει πολλές υλοποιήσεις, συμπεριλαμβανομένων των HashMap και TreeMap. Έχουν διαφορετικά ασυμπτωτικά, είναι δομημένα διαφορετικά στο εσωτερικό τους. Πρέπει να ξέρετε πώς διαφέρουν και πότε να χρησιμοποιήσετε ποιο.

Θα είναι επίσης πολύ ωραίο αν γνωρίζετε πώς λειτουργούν αυτές οι δομές δεδομένων εσωτερικά. Δηλαδή, δεν είναι εύκολο να γνωρίζουμε τα ασυμπτωτικά τους - πόσο λειτουργεί το στοίχημα, πόσο καιρό λειτουργεί το πάσο, αλλά πώς λειτουργεί η δομή μέσα - για παράδειγμα, τι είναι ένας κάδος στο HashMap.

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

Μόλις αρχίσετε να γράφετε οποιονδήποτε μεγάλο κώδικα, σύνθετο, χρησιμοποιώντας βιβλιοθήκες, κώδικα πολλαπλών κλάσεων, θα συνειδητοποιήσετε ότι είναι δύσκολο για εσάς χωρίς να δημιουργήσετε συστήματα και να επιλύσετε εξαρτήσεις. Αυτοί είναι κυρίως οι Maven και Gradle. Σας επιτρέπουν να εισάγετε βιβλιοθήκες στο έργο σας σε μία γραμμή. Δηλαδή, γράφετε ένα xml μιας γραμμής και εισάγετε βιβλιοθήκες στο έργο. Υπέροχα συστήματα. Είναι περίπου τα ίδια, χρησιμοποιήστε είτε ένα - Maven ή Gradle.

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

Και κάποιου είδους περιβάλλον ανάπτυξης. Προτείνω το IntelliJ Idea. Επιταχύνει πολύ τη διαδικασία ανάπτυξης, σας βοηθάει πολύ, γράφει όλο τον κώδικα του boilerplate για εσάς, γενικά, είναι ωραίο.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Σύνδεσμοι από τη διαφάνεια: SQLZOO, habrapost

SQL. Λίγα λόγια για τα backenders. Υπήρχε πραγματικά μια αστεία υπόθεση εδώ. Δύο μέρες πριν από τη δεύτερη συνέντευξη πρακτικής μου, μια κοπέλα HR με πήρε τηλέφωνο και είπε ότι σε δύο μέρες θα με ρωτούσαν για SQL και HTTP, έπρεπε να τα μάθω. Και δεν ήξερα σχεδόν τίποτα για SQL ή HTTP. Και βρήκα αυτό το υπέροχο site - SQLZOO. Έμαθα SQL σε αυτό σε 12 ώρες, εννοώ, σύνταξη SQL, πώς να γράφω ερωτήματα SELECT, JOIN, κλπ. Πολύ ωραίο site, το προτείνω ανεπιφύλακτα. Στην πραγματικότητα, σε 12 ώρες έμαθα το 90% αυτών που ξέρω τώρα.

Και είναι επίσης υπέροχο να γνωρίζουμε την αρχιτεκτονική βάσης δεδομένων. Αυτά είναι όλα τα είδη κλειδιών, ευρετηρίων, κανονικοποίησης. Υπάρχει μια σειρά αναρτήσεων σχετικά με αυτό στο Habré.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Στην Java, εκτός από την SQL, υπάρχουν όλα τα είδη αντικειμενικών συστημάτων αντιστοίχισης, όπως το JPA. Υπάρχει κάποιος κωδικός. Στην πρώτη μέθοδο υπάρχει κάποιος κώδικας SQL - SELECT ID name FROM info.users WHERE id IN userIds. Από τη βάση δεδομένων των χρηστών, από τον πίνακα, λαμβάνονται τα αναγνωριστικά και τα ονόματά τους.

Στη συνέχεια, υπάρχει ένας συγκεκριμένος χάρτης που μετατρέπει ένα αντικείμενο από τη βάση σε αντικείμενο Java. Και υπάρχει μια τρίτη μέθοδος παρακάτω που εκτελεί πραγματικά αυτόν τον κώδικα. Όλα αυτά μπορούν να αντικατασταθούν χρησιμοποιώντας JPA με μία γραμμή, η οποία είναι γραμμένη παρακάτω. Κάνει το ίδιο πράγμα - βρείτε το All ByIdIn. Δηλαδή, με βάση το όνομα της μεθόδου, δημιουργεί ένα ερώτημα SQL για εσάς.

Πολύ ωραίο πράγμα. Εγώ ο ίδιος, όταν δεν ήξερα την SQL, χρησιμοποιούσα το JPA. Γενικά, προσέξτε. Εάν είστε πολύ τεμπέλης για να μάθετε SQL, είναι καταστροφή. Και, γενικά, φωτιά!

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Ανοιξη. Ποιος έχει ακούσει για κάτι τέτοιο όπως το πλαίσιο της Άνοιξης; Βλέπετε πόσοι είστε; Όχι χωρίς λόγο. Η άνοιξη περιλαμβάνεται στις απαιτήσεις κάθε δεύτερης κενή θέσης υποστήριξης Java. Χωρίς αυτό, δεν υπάρχει πουθενά μεγάλη εξέλιξη. Τι είναι η Άνοιξη; Πρώτα απ 'όλα, αυτό είναι ένα πλαίσιο Έγχυσης Εξάρτησης. Και για αυτό θα πει επόμενος ομιλητής. Αλλά εν συντομία, αυτό είναι ένα πράγμα που σας επιτρέπει να διευκολύνετε την εισαγωγή των εξαρτήσεων ορισμένων κλάσεων σε άλλες. Δηλαδή, η γνώση των εξαρτήσεων απλοποιείται.

Το Spring Boot είναι ένα κομμάτι του Spring που σας επιτρέπει να εκτελέσετε την εφαρμογή διακομιστή σας με ένα κουμπί. Πηγαίνετε στο THID, πατάτε μερικά κουμπιά και τώρα έχετε την εφαρμογή διακομιστή σας σε λειτουργία στον localhost 8080. Δηλαδή, δεν έχετε γράψει ούτε μια γραμμή κώδικα ακόμα, αλλά λειτουργεί ήδη. Πολύ ωραίο πράγμα. Αν γράψεις κάτι δικό σου, φωτιά!

Η άνοιξη είναι ένα πολύ μεγάλο πλαίσιο. Όχι μόνο επιλέγει την εφαρμογή διακομιστή σας και επιλύει το Dependency Injection. Σας επιτρέπει να κάνετε πολλά πράγματα, συμπεριλαμβανομένης της δημιουργίας μεθόδων REST API. Δηλαδή, γράψατε κάποια μέθοδο και επισυνάψατε τον σχολιασμό Get mapping. Και τώρα έχετε ήδη κάποια μέθοδο στο localhost που γράφει Hello world to you. Δύο γραμμές κώδικα και λειτουργεί. Καλό πράγμα.

Η άνοιξη διευκολύνει επίσης τα τεστ γραφής. Δεν υπάρχει τρόπος χωρίς δοκιμές σε μεγάλη ανάπτυξη. Ο κωδικός πρέπει να δοκιμαστεί. Για το σκοπό αυτό, η Java έχει μια δροσερή βιβλιοθήκη JUnit 5. Και το JUnit γενικά, αλλά η τελευταία έκδοση είναι η πέμπτη. Υπάρχουν τα πάντα για δοκιμή, κάθε είδους ισχυρισμοί και άλλα πράγματα.

Και υπάρχει ένα φοβερό πλαίσιο Mockito. Φανταστείτε ότι έχετε κάποια λειτουργικότητα που θέλετε να δοκιμάσετε. Η λειτουργικότητα κάνει πολλά πράγματα, μεταξύ των οποίων, κάπου στη μέση, συνδέεται στο VKontakte με το αναγνωριστικό σας, για παράδειγμα, και λαμβάνει το όνομα και το επώνυμο του χρήστη VKontakte από το αναγνωριστικό. Πιθανότατα δεν θα συμπεριλάβετε το VKontakte στις δοκιμές, αυτό είναι περίεργο. Αλλά πρέπει να δοκιμάσετε τη λειτουργικότητα, γι' αυτό φτιάξατε αυτήν την κατηγορία, χρησιμοποιώντας το Mockito, mok it, μιμώντας το.

Θα πείτε ότι όταν έρχεται ένα αίτημα σε αυτήν την τάξη με αναγνωριστικό τέτοιο και τέτοιο, επιστρέφει κάποιο επώνυμο, για παράδειγμα, Vasya Pupkin. Και θα λειτουργήσει. Δηλαδή θα δοκιμάσεις όλη τη λειτουργικότητα για mok one class. Πολύ ωραίο πράγμα.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Σύνδεσμος από διαφάνεια

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

Υπάρχει ένας ιστότοπος με τα πιο δημοφιλή μοτίβα - refactoring.guru, μπορείτε να τον διαβάσετε, να μάθετε ποια μοτίβα υπάρχουν, να διαβάσετε μια δέσμη θεωριών. Το πρόβλημα είναι ότι είναι πρακτικά άχρηστο. Στην πραγματικότητα, τα μοτίβα χωρίς πρακτική δεν είναι ιδιαίτερα χρήσιμα.

Θα ακούσετε για ορισμένα μοτίβα όπως το Singletone ή το Builder. Ποιος άκουσε αυτά τα λόγια; Πολλοί άνθρωποι. Υπάρχουν τόσο απλά μοτίβα που μπορείτε να εφαρμόσετε μόνοι σας. Αλλά τα περισσότερα από τα μοτίβα: στρατηγική, εργοστάσιο, πρόσοψη - δεν είναι σαφές πού να τα εφαρμόσετε.

Και μέχρι να δείτε στην πράξη στον κώδικα κάποιου άλλου ένα μέρος στο οποίο εφαρμόζεται αυτό το μοτίβο, δεν θα μπορείτε να το εφαρμόσετε μόνοι σας. Επομένως, η πρακτική είναι πολύ σημαντική με τα μοτίβα. Και μόνο το να διαβάζεις γι' αυτά στο refactoring.guru δεν είναι πολύ χρήσιμο, αλλά σίγουρα αξίζει να το κάνεις.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Γιατί χρειάζονται μοτίβα; Ας υποθέσουμε ότι έχετε μια συγκεκριμένη κατηγορία χρηστών. Έχει ταυτότητα και όνομα. Κάθε χρήστης πρέπει να έχει και αναγνωριστικό και όνομα. Πάνω αριστερά είναι η τάξη.

Ποιοι είναι οι τρόποι προετοιμασίας του Χρήστη; Υπάρχουν δύο επιλογές - είτε κατασκευαστής είτε ρυθμιστής. Ποια είναι τα μειονεκτήματα και των δύο προσεγγίσεων;

Κατασκευαστής. νέος χρήστης (7, "Bond"), εντάξει. Τώρα ας πούμε ότι δεν έχουμε κλάση Χρήστη, αλλά κάποια άλλη, με επτά αριθμητικά πεδία. Θα έχετε έναν κατασκευαστή που περιέχει επτά διαδοχικούς αριθμούς. Δεν είναι σαφές ποιοι είναι αυτοί οι αριθμοί και ποιος από αυτούς ανήκει σε ποιο ακίνητο. Ο σχεδιαστής δεν είναι σπουδαίος.

Η δεύτερη επιλογή είναι ρυθμιστής. Γράφετε ξεκάθαρα: setId(7), setName(“Bond”). Καταλαβαίνετε ποια ιδιότητα ανήκει σε ποιο πεδίο. Αλλά ο σέτερ έχει ένα πρόβλημα. Πρώτον, μπορεί να ξεχάσετε να αντιστοιχίσετε κάτι και, δεύτερον, το αντικείμενό σας αποδεικνύεται μεταβλητό. Αυτό δεν είναι ασφαλές για νήματα και μειώνει ελαφρώς την αναγνωσιμότητα του κώδικα. Αυτός είναι ο λόγος για τον οποίο οι άνθρωποι βρήκαν ένα δροσερό μοτίβο - Builder.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Περί τίνος πρόκειται? Ας προσπαθήσουμε να συνδυάσουμε τα πλεονεκτήματα και των δύο προσεγγίσεων - ρυθμιστή και κατασκευαστή - σε ένα. Φτιάχνουμε ένα συγκεκριμένο αντικείμενο, το Builder, το οποίο θα έχει επίσης πεδία Id και Name, το οποίο θα χτιστεί με βάση τον ρυθμιστή και το οποίο θα έχει μια μέθοδο Build που σας επιστρέφει έναν νέο χρήστη με όλες τις παραμέτρους. Παίρνουμε ένα αμετάβλητο αντικείμενο και ένα σέτερ. Δροσερός!

Ποια είναι τα προβλήματα; Εδώ έχουμε το κλασικό Builder. Το πρόβλημα είναι ότι μπορούμε ακόμα να ξεχάσουμε να ελέγξουμε σε κάποιο πεδίο. Και αν ξεχάσαμε να επισκεφτούμε το αναγνωριστικό, σε αυτήν την περίπτωση στο Builder αρχικοποιείται στο μηδέν, επειδή ο τύπος int δεν είναι μηδενικός. Και αν κάνουμε το Όνομα “Bond” και ξεχάσουμε να επισκεφτούμε το γραφείο ID, θα έχουμε έναν νέο χρήστη με αναγνωριστικό “0” και το όνομα “Bond”. Όχι κουλ.

Ας προσπαθήσουμε να το πολεμήσουμε αυτό. Στο Builder θα αλλάξουμε το int σε int ώστε να είναι μηδενικό. Τώρα όλα είναι υπέροχα.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Αν προσπαθήσουμε να δημιουργήσουμε έναν Χρήστη με το όνομα "Bond", ξεχνώντας να βάλουμε το αναγνωριστικό του, θα λάβουμε μια εξαίρεση μηδενικού δείκτη, επειδή το αναγνωριστικό δεν είναι μηδενικό και το Δόμηση έχει μια μηδενική εξαίρεση, συγκεκριμένα εξαίρεση δείκτη.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Ωστόσο, μπορούμε ακόμα να ξεχάσουμε να βάλουμε ένα όνομα, επομένως ορίζουμε την επανάληψη αντικειμένου σε null. Τώρα, όταν χτίζουμε το αντικείμενο μας από το Builder, ελέγχει ότι το πεδίο δεν είναι μηδενικό. Και δεν είναι μόνο αυτό.

Ας δούμε το τελευταίο παράδειγμα. Σε αυτήν την περίπτωση, αν με κάποιο τρόπο βάλουμε null στο χρόνο εκτέλεσης ID, θα ήταν υπέροχο να ξέρετε αμέσως ότι το κάνατε και δεν είναι ωραίο να κάνετε λάθος τώρα.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Πρέπει να ρίξετε ένα σφάλμα όχι τη στιγμή της δημιουργίας του χρήστη, αλλά όταν ορίσετε το null στο αναγνωριστικό. Επομένως, στο Builder θα αλλάξουμε τον ρυθμιστή Integer σε int και θα ορκιστεί αμέσως ότι έριξαν null.

Με λίγα λόγια, ποιο είναι το νόημα; Υπάρχει ένα απλό μοτίβο Builder, αλλά ακόμη και η υλοποίησή του έχει κάποιες λεπτές αποχρώσεις, επομένως είναι πολύ ωραίο να εξετάζετε διαφορετικές υλοποιήσεις μοτίβων. Κάθε μοτίβο έχει δεκάδες υλοποιήσεις. Όλα αυτά είναι πολύ ενδιαφέροντα.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Πώς γράφουμε το Builder στον κώδικα παραγωγής; Εδώ είναι ο Χρήστης μας. Επισυνάπτουμε μια περιστροφή Builder από τη βιβλιοθήκη Lombok σε αυτήν και η ίδια δημιουργεί ένα Builder για εμάς. Δηλαδή, δεν γράφουμε κανέναν κώδικα, αλλά η Java πιστεύει ήδη ότι αυτή η τάξη έχει Builder και μπορούμε να την ονομάσουμε έτσι.

Έχω ήδη πει ότι η Java έχει βιβλιοθήκες για σχεδόν τα πάντα, συμπεριλαμβανομένου του Lombok, μιας δροσερής βιβλιοθήκης που σας επιτρέπει να αποφύγετε να γράψετε boilerplate. Κατασκευαστής, ΠΑΡΕ.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Τα μοτίβα μπορεί να είναι αρχιτεκτονικά - σχετίζονται όχι μόνο με μια τάξη, αλλά με το σύστημα ως σύνολο. Υπάρχει μια τόσο καλή αρχή στο σχεδιασμό του συστήματος: Αρχή Ενιαίας Ευθύνης. Για τι μιλάει; Το γεγονός ότι κάθε τάξη πρέπει να είναι υπεύθυνη για κάποιες από τις δικές της λειτουργίες. Σε αυτήν την περίπτωση, έχουμε έναν ελεγκτή που επικοινωνεί με τους χρήστες, αντικείμενα JSON. Υπάρχει το Facade, το οποίο μετατρέπει αντικείμενα JSON σε μοντέλα με τα οποία θα λειτουργήσει η εφαρμογή Java. Υπάρχει μια Υπηρεσία που έχει πολύπλοκη λογική που λειτουργεί με αυτά τα μοντέλα. Υπάρχει ένα αντικείμενο πρόσβασης δεδομένων που τοποθετεί αυτά τα μοντέλα στη βάση δεδομένων και τα ανακτά από τη βάση δεδομένων. Και υπάρχει η ίδια η βάση δεδομένων. Με άλλα λόγια, δεν είναι όλα σε μια τάξη, αλλά φτιάχνουμε πέντε διαφορετικές κατηγορίες, και αυτό είναι ένα άλλο μοτίβο.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

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

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Εδώ είναι ένα παράδειγμα της εφαρμογής διακομιστή μου. Στο δεύτερο έτος, έγραψα μια εργασία όρου με τα παιδιά. Έγραφαν μια εφαρμογή για κινητά για τη διοργάνωση εκδηλώσεων. Εκεί, οι χρήστες μπορούσαν να συνδεθούν μέσω VKontakte, να τοποθετήσουν σημεία στο χάρτη, να δημιουργήσουν εκδηλώσεις, να καλέσουν τους φίλους τους σε αυτά, να αποθηκεύσουν εικόνες συμβάντων κ.λπ.

Τι έκανα στο έργο; Έγραψε μια εφαρμογή διακομιστή σε Spring Boot χωρίς χρήση SQL. Δεν τον ήξερα, χρησιμοποίησα JPA. Τι θα μπορούσε να κάνει; Συνδεθείτε στο VK μέσω OAuth-2. Πάρτε το διακριτικό του χρήστη, μεταβείτε στο VK με αυτό, ελέγξτε ότι είναι πραγματικός χρήστης. Λάβετε πληροφορίες σχετικά με τους χρήστες μέσω του VKontakte. Ήταν σε θέση να αποθηκεύσει πληροφορίες σε μια βάση δεδομένων, επίσης μέσω JPA. Αποθηκεύστε επιδέξια φωτογραφίες και άλλα αρχεία στη μνήμη του υπολογιστή και αποθηκεύστε συνδέσμους προς αυτά στη βάση δεδομένων. Εκείνη την εποχή δεν ήξερα ότι υπήρχαν αντικείμενα CLOB στη βάση δεδομένων, οπότε το έκανα με αυτόν τον τρόπο. Υπήρχε ένα REST API για χρήστες, εφαρμογές πελατών. Και υπήρχαν δοκιμές μονάδων για βασική λειτουργικότητα.

[...] Ένα μικρό παράδειγμα της επιτυχημένης εκμάθησης της Java. Στο πρώτο μου έτος στο πανεπιστήμιο, διδάχτηκα C# και μου δόθηκε η κατανόηση του προγραμματισμού OOP - τι είναι οι τάξεις, οι διεπαφές, η αφαίρεση και γιατί χρειάζονται. Με βοήθησε πολύ. Χωρίς αυτό, η εκμάθηση της Java είναι αρκετά δύσκολη· δεν είναι ξεκάθαρο γιατί χρειάζονται μαθήματα.

Γιατί να μάθετε Java και πώς να το κάνετε αποτελεσματικά. Αναφορά Yandex

Στο δεύτερο έτος στο πανεπιστήμιο, δίδαξαν ξανά Java core, αλλά δεν σταμάτησα εκεί, πήγα να σπουδάσω την Άνοιξη ο ίδιος και έγραψα μια εργασία μαθήματος, το έργο μου, το οποίο ανέφερα παραπάνω. Και με όλα αυτά, πήγα για πρακτική στο Yandex, πέρασα μια συνέντευξη και μπήκα στο Yandex.Market. Εκεί έγραψα το backend για το Beru, αυτή είναι η αγορά μας, και για το ίδιο το Yandex.Market.

Μετά από αυτό, πριν από έξι μήνες, μεταγράφηκα σε άλλη ομάδα της ίδιας Αγοράς. Κάνουμε αναλύσεις για επιχειρηματικούς συνεργάτες. Είμαστε στην αναλυτική πλατφόρμα, είμαστε τρεις στο backend, οπότε έχω πολύ μεγάλο μερίδιο επιρροής στο έργο. Είναι πολύ ενδιαφέρον, στην πραγματικότητα. Δηλαδή, ουσιαστικά παρέχουμε δεδομένα για την αγορά - ποιες είναι οι πωλήσεις, σε ποιες κατηγορίες, σε ποια μοντέλα, για επιχειρηματικούς συνεργάτες, μεγάλες γνωστές εταιρείες. Και είμαστε μόνο τρεις, γράφουμε αυτόν τον κώδικα και είναι πολύ ωραίο.

Ευχαριστώ! Χρήσιμοι σύνδεσμοι:
- "Java 8. Οδηγός αρχαρίων".
- ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ.
- SQLZOO.
- Κανονοποίηση βάσης δεδομένων.
- Σχεδιαστικά πρότυπα.
- Σχεδιαστικά πρότυπα.
- Καθαρίστε τον κώδικα.
- Αποτελεσματική Java.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο