E-Dobavki - μια διαδικτυακή υπηρεσία για την αναζήτηση πρόσθετων τροφίμων σε Java και Spring Boot, γραμμένη από τους μαθητές μου

Εισαγωγή

Έτυχε τα τελευταία σχεδόν δύο χρόνια να διδάσκω προγραμματισμό σε μια από τις σχολές πληροφορικής στο Κίεβο. Ξεκίνησα να το κάνω μόνο για διασκέδαση. Κάποτε έγραψα ένα blog προγραμματισμού και μετά το παράτησα. Αλλά η επιθυμία να πούμε χρήσιμα πράγματα στους ενδιαφερόμενους δεν έχει φύγει.

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

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

Η ίδια η υπηρεσία είναι εδώ - E-Dobavki.com.

E-Dobavki - μια διαδικτυακή υπηρεσία για την αναζήτηση πρόσθετων τροφίμων σε Java και Spring Boot, γραμμένη από τους μαθητές μου

Το έργο είναι εκπαιδευτικό και δεν περιέχει καμία διαφήμιση. Όπως καταλαβαίνω από αυτήν την έκδοση, μπορείτε να παρέχετε συνδέσμους για τέτοια έργα.

Πριν περιγράψω το ίδιο το έργο, θα σας πω λίγα λόγια για τη διαδικασία εκμάθησης της ομάδας· χωρίς αυτό, η εικόνα θα είναι ελλιπής.

9 μήνες εκπαίδευση

Στη σχολή που διδάσκω, το μάθημα Java χωρίζεται σε 2 μέρη. Συνολικά, το μάθημα διαρκεί περίπου 9 μήνες, με όλα τα διαλείμματα (διακοπές της Πρωτοχρονιάς, χρόνος συγγραφής ενδιάμεσων έργων).

Το πρώτο μέρος εισάγει τους μαθητές στις βασικές έννοιες της γλώσσας. Μεταβλητές, μέθοδοι, βασικά στοιχεία του OOP και όλα αυτά.

Το δεύτερο μέρος του μαθήματος προβλέπει ότι ο μαθητής κατανοεί ήδη λίγο πολύ πώς να γράφει σε Java και μπορεί να του δοθεί μια στοίβα τεχνολογίας «ενήλικων». Όλα ξεκινούν με SQL, μετά JDBC, Hibernate. Μετά HTTP, servlets. Ακολουθεί η Άνοιξη, λίγο για το git και το maven. Και οι μαθητές γράφουν τελικά έργα.

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

Η προσέγγισή μου στη μάθηση

Έβγαλα 5 γκρουπ. Φαίνεται πολύ για δύο χρόνια, αλλά σχεδόν πάντα οδηγούσα 2 ομάδες παράλληλα.

Έχω δοκιμάσει διαφορετικές προσεγγίσεις.

Η πρώτη επιλογή είναι ότι ένα ζευγάρι διατίθεται για μια παρουσίαση με μια θεωρία. Το δεύτερο ζευγάρι είναι καθαρή πρακτική. Αυτή η προσέγγιση κατά κάποιο τρόπο λειτούργησε, αλλά δεν ήταν πολύ αποτελεσματική, κατά τη γνώμη μου.

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

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

Δεν φτάνουν όλοι μέχρι το τέλος

Αποκάλυψη για μένα ήταν το γεγονός ότι δεν φτάνει όλη η ομάδα στο τέλος του μαθήματος.

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

Φεύγουν για διάφορους λόγους.

Το πρώτο είναι η πολυπλοκότητα. Ό,τι κι αν λένε, η Java δεν είναι η πιο απλή γλώσσα. Για να γράψετε ακόμα και το πιο απλό πρόγραμμα, πρέπει να κατανοήσετε την έννοια μιας κλάσης, μιας μεθόδου. Και για να καταλάβετε γιατί πρέπει να γράψετε δημόσιο στατικό κενό main (String[] arg) Υπάρχουν μερικές ακόμη έννοιες που πρέπει να κατανοήσετε.

Συγκρίνετε αυτό με το Turbo Pascal, με το οποίο ξεκίνησαν πολλοί άνθρωποι, συμπεριλαμβανομένου και εμένα:

begin
    writeln("Первая программа");
end.

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

Και ο δεύτερος λόγος είναι όπως στην παρακάτω εικόνα:

E-Dobavki - μια διαδικτυακή υπηρεσία για την αναζήτηση πρόσθετων τροφίμων σε Java και Spring Boot, γραμμένη από τους μαθητές μου

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

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

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

Ιδέα εξυπηρέτησης

Μόλις οι μαθητές είχαν ολοκληρώσει ολόκληρο το μάθημα, ήρθε η ώρα να γράψουν το τελικό έργο. Υπήρχαν διαφορετικές ιδέες. Προσέφεραν φύλλα ToDo, έργα διαχείρισης έργων και κάτι άλλο.

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

Η ιδέα είναι απλή. Όταν αγοράζετε ένα προϊόν σε ένα κατάστημα, βλέπετε κάποιο είδος E-additive στη σύνθεση. Δεν είναι ξεκάθαρο από τον κώδικα πόσο επικίνδυνο είναι ή όχι (και υπάρχουν και επικίνδυνα πρόσθετα που απαγορεύονται σε πολλές χώρες).

Ανοίγετε τον ιστότοπο, εισάγετε το όνομα του συμπληρώματος (αριθμός, ένα από τα εναλλακτικά ονόματα) και λαμβάνετε μια περίληψη του συμπληρώματος:

E-Dobavki - μια διαδικτυακή υπηρεσία για την αναζήτηση πρόσθετων τροφίμων σε Java και Spring Boot, γραμμένη από τους μαθητές μου

Υπάρχουν παρόμοια έργα. Μπορείτε επίσης απλά να πληκτρολογήσετε το πρόσθετο στο Google, αν και δεν εμφανίζει πάντα σωστά τις πληροφορίες.

Επειδή όμως το έργο είναι εκπαιδευτικό, οι παραπάνω δυσκολίες δεν μας σταμάτησαν :)

Реализация

Όλοι έγραψαν σε Java, πηγαίος κώδικας του έργου στο Github.

Ήμασταν 7 άτομα, μαζί και εγώ. Όλοι έκαναν ένα αίτημα έλξης και εγώ, ή άλλο άτομο από την ομάδα, αποδέχθηκα αυτό το αίτημα έλξης.

Η υλοποίηση του έργου κράτησε περίπου ένα μήνα - από την έκφραση της ιδέας μέχρι την κατάσταση που βλέπετε τώρα.

Πρόσθετα ανάλυσης

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

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

Το Spring Boot σάς επιτρέπει να δημιουργήσετε πολλά προφίλ. Το προφίλ είναι ένα αρχείο με ρυθμίσεις.

Για το περιβάλλον dev, χρησιμοποιήσαμε ένα προφίλ με τοπικό H2 DBMS και την προεπιλεγμένη θύρα HTTP (8080). Έτσι, κάθε φορά που εκκινούσε η εφαρμογή, η βάση δεδομένων εκκαθαριζόταν. Ο αναλυτής σε αυτή την περίπτωση ήταν αυτό που μας έσωσε.

Αναζήτηση και φιλτράρισμα

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

Επομένως, η οντότητα Πρόσθετο έχει πολλά πεδία. Αυτός είναι ο πρόσθετος κωδικός, εναλλακτικές ονομασίες, περιγραφή. Η αναζήτηση πραγματοποιείται με τη χρήση Like σε όλα τα πεδία ταυτόχρονα. Και αν εισαγάγετε [123] ή [αμάραντο], θα έχετε το ίδιο αποτέλεσμα.

Όλα αυτά τα κάναμε με βάση τις Προδιαγραφές. Αυτό είναι ένα μέρος του Spring που σας επιτρέπει να περιγράφετε βασικές συνθήκες αναζήτησης (όπως κάποιο πεδίο, για παράδειγμα) και στη συνέχεια να συνδυάσετε αυτές τις συνθήκες (OR ή AND).

Έχοντας γράψει μια ντουζίνα προδιαγραφές, μπορείτε να κάνετε σύνθετες ερωτήσεις όπως «όλα τα επικίνδυνα πρόσθετα χρωματισμού που έχουν τη λέξη [κόκκινο] στην περιγραφή».

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

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

Ασφάλεια

Είναι απλό. Υπάρχουν χρήστες με ρόλο ΔΙΑΧΕΙΡΙΣΤΗ - μπορούν να επεξεργαστούν προσθήκες, να τις διαγράψουν και να προσθέσουν νέες.

Και υπάρχουν και άλλοι χρήστες (εγγεγραμμένοι ή μη). Μπορούν μόνο να περιηγηθούν στη λίστα με τα πρόσθετα και να αναζητήσουν αυτά που χρειάζονται.

Η Spring Security χρησιμοποιήθηκε για διαχωρισμό δικαιωμάτων. Τα δεδομένα χρήστη αποθηκεύονται σε μια βάση δεδομένων.

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

Απόκριση και Bootstrap

Το επόμενο σημείο είναι η προσαρμοστικότητα. Στην περίπτωση της υπηρεσίας μας (τουλάχιστον έτσι όπως την είδαμε), η πλειοψηφία των χρηστών θα είναι με κινητά τηλέφωνα. Και πρέπει να δείτε γρήγορα το συμπλήρωμα από το κινητό σας τηλέφωνο.

Για να μην υποφέρουμε με CSS, πήραμε το Bootstrap. Φτηνό, χαρούμενο και φαίνεται αξιοπρεπές.

Δεν μπορώ να πω τη διεπαφή ιδανική. Η κύρια σελίδα είναι ακόμη λιγότερο και η σελίδα για μια λεπτομερή περιγραφή του πρόσθετου είναι στενή· στα κινητά τηλέφωνα πρέπει να γίνει ευρύτερη.

Μπορώ μόνο να πω ότι προσπάθησα να παρεμβαίνω στη δουλειά όσο το δυνατόν λιγότερο. Αυτό είναι ακόμα ένα φοιτητικό έργο. Και φυσικά, τα παιδιά θα μπορέσουν να διορθώσουν τέτοιες στιγμές αργότερα.

Ένα λεπτό βελτιστοποίησης SEO

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

Στην πραγματικότητα, έφτιαξα μια γενιά προτύπων τίτλου και περιγραφής για κάθε πρόσθετο. Η διεύθυνση URL είναι σχεδόν CNC, αν και μπορεί να γίνει μικρότερη.

Πρόσθεσα επίσης μετρητές προσέλευσης. Προστέθηκε ο ιστότοπος στο Yandex Webmaster και στο Google Search Console για την παρακολούθηση προειδοποιήσεων από τις μηχανές αναζήτησης.

Δεν είναι αρκετό. Πρέπει επίσης να προσθέσετε robots.txt και sitemap.xml για πλήρη ευρετηρίαση. Αλλά και πάλι, αυτό είναι ένα φοιτητικό έργο. Θα τους πω τι πρέπει να γίνει και αν θέλουν θα το κάνουν.

Πρέπει να επισυνάψετε ένα πιστοποιητικό SSL. Το δωρεάν Let's Encrypt θα λειτουργήσει επίσης. Το έκανα για την Spring Boot. Δεν είναι δύσκολο να γίνει και η εμπιστοσύνη του ΠΣ αυξάνεται.

Τι ακολουθεί για το έργο;

Τότε, στην πραγματικότητα, η επιλογή είναι στα παιδιά. Η αρχική ιδέα του έργου περιελάμβανε επίσης μια βάση δεδομένων προϊόντων με συνδέσμους σε πρόσθετα.

Εισαγάγετε "Snickers" και δείτε ποια θρεπτικά πρόσθετα περιέχει.

Ακόμη και στην αρχή του έργου, ήξερα ότι δεν θα είχαμε κανένα προϊόν :) Επομένως, ξεκινήσαμε μόνο με πρόσθετα.

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

Ανάπτυξη

Το έργο αναπτύχθηκε σε VPS, Aruba Cloud. Αυτό είναι το φθηνότερο VPS που μπορούσαμε να βρούμε. Χρησιμοποιώ αυτόν τον πάροχο για περισσότερο από ένα χρόνο για τα έργα μου και είμαι ευχάριστα ευχαριστημένος με αυτό.

Χαρακτηριστικά VPS: 1 GB RAM, 1 CPU (δεν ξέρω για τη συχνότητα), 20 GB SSD. Για το έργο μας αυτό είναι αρκετό.

Το έργο κατασκευάζεται χρησιμοποιώντας το συνηθισμένο πακέτο mvn clean. Το αποτέλεσμα είναι ένα παχύ βάζο - ένα εκτελέσιμο αρχείο με όλες τις εξαρτήσεις.

Για να αυτοματοποιήσω λίγο όλο αυτό, έγραψα μερικά bash σενάρια.

Το πρώτο σενάριο διαγράφει το παλιό αρχείο jar και δημιουργεί ένα νέο.

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

DB - MySQL στο ίδιο VPS.

Η συνολική επανεκκίνηση του έργου περιλαμβάνει:

  • συνδεθείτε στο VPS μέσω SSH
  • κατεβάστε τις τελευταίες αλλαγές git
  • τρέχω τοπικό-jar.sh
  • kill τρέχουσα εφαρμογή
  • τρέξτε launch-production.sh

Αυτή η διαδικασία διαρκεί τρία λεπτά. Μου φαίνεται έξυπνη επιλογή για ένα τόσο μικρό έργο.

Δυσκολίες

Οι κύριες δυσκολίες στη δημιουργία του έργου ήταν οργανωτικής φύσης.

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

Αναγνώρισα έναν ηγέτη ομάδας υπό όρους σε αυτήν την ομάδα. Διατηρούσε ένα Έγγραφο Google με μια λίστα εργασιών, διένειμε εργασίες και έλεγχε την αποδοχή τους. Δέχτηκε επίσης αιτήματα έλξης.

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

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

Ήθελα τα παιδιά να αισθάνονται ότι η δουλειά τους ήταν σημαντική. Κατανοήστε ότι δεν γράφουν σφαιρικό κώδικα στο κενό. Και αυτό που κάνουν μαζί είναι ένα έργο που οι άνθρωποι θα χρησιμοποιήσουν στη συνέχεια.

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

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

Ευρήματα

Η μάθηση είναι ενδιαφέρουσα.

Μετά από κάθε μάθημα επέστρεφα συναισθηματικά ταραγμένος. Προσπαθώ να κάνω κάθε ζευγάρι μοναδικό και να μεταφέρω όσο το δυνατόν περισσότερη γνώση.

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

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

Πηγή: www.habr.com

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