E-Dobavki - en webservice til søgning af fødevaretilsætningsstoffer i Java og Spring Boot, skrevet af mine elever

Indledning

Det skete sådan, at jeg de sidste næsten to år har undervist i programmering på en af ​​it-skolerne i Kiev. Jeg begyndte at gøre det her for sjov. Jeg skrev engang en programmeringsblog, så opgav jeg den. Men lysten til at fortælle nyttige ting til interesserede er ikke gået væk.

Mit hovedsprog er Java. Jeg skrev spil til mobiltelefoner, software til radiokommunikation og forskellige webtjenester på det. Og jeg underviser i Java.

Her vil jeg fortælle historien om træningen af ​​min sidste gruppe. Hvordan de gik fra at begynde at træne til at skrive en fungerende webservice. En nyttig webservice til at finde kosttilskud. Gratis, ingen annoncering, registrering og SMS.

Selve servicen er her - E-Dobavki.com.

E-Dobavki - en webservice til søgning af fødevaretilsætningsstoffer i Java og Spring Boot, skrevet af mine elever

Projektet er lærerigt og indeholder ingen reklamer. Som jeg forstår af denne udgivelse, kan du give links til sådanne projekter.

Inden jeg beskriver selve projektet, vil jeg fortælle dig lidt om gruppens læringsproces; uden dette vil billedet være ufuldstændigt.

9 måneders træning

På skolen, hvor jeg underviser, er Java-forløbet delt op i 2 dele. I alt tager kurset cirka 9 måneder, med alle pauser (nytårsferie, tid til at skrive mellemprojekter).

Den første del introducerer eleverne til sprogets grundlæggende begreber. Variabler, metoder, OOP basics og alt det der.

Anden del af kurset forudsætter, at den studerende allerede mere eller mindre forstår at skrive i Java, og han kan få en "voksen" teknologistack. Det hele starter med SQL, derefter JDBC, Hibernate. Derefter HTTP, servlets. Næste er foråret, lidt om git og maven. Og eleverne skriver afsluttende projekter.

Al træning er opdelt i moduler. Jeg holdt undervisning to gange om ugen. Varigheden af ​​en lektion er to timer.

Min tilgang til læring

Jeg udgav 5 grupper. Det virker som meget i to år, men jeg ledede næsten altid 2 grupper parallelt.

Jeg har prøvet forskellige tilgange.

Den første mulighed er, at der tildeles et par til en præsentation med en teori. Det andet par er ren praksis. Denne tilgang virkede på en eller anden måde, men den var efter min mening ikke særlig effektiv.

Den anden mulighed, som jeg kom til, og som jeg arbejder på nu, er ikke at afsætte et helt par til teori. I stedet blander jeg korte teoriafsnit i 5-10 minutter, og forstærker dem straks med praktiske eksempler. Denne tilgang virker bedre.

Hvis der er tid nok, kalder jeg eleverne hen til mig, sætter dem ved min bærbare computer, og de laver selv praktiske eksempler. Det fungerer glimrende, men det tager desværre meget tid.

Ikke alle når til slutningen

En åbenbaring for mig var, at ikke hele gruppen når til slutningen af ​​forløbet.

Ifølge mine observationer er det kun halvdelen af ​​eleverne, der skriver det afsluttende projekt. De fleste af dem bliver elimineret i løbet af den første del af kurset. Og dem, der er nået til anden del, falder normalt ikke fra.

De går af forskellige årsager.

Den første er kompleksitet. Uanset hvad de siger, er Java ikke det enkleste sprog. For at skrive selv det enkleste program skal du forstå begrebet en klasse, en metode. Og for at forstå hvorfor du skal skrive public static void main(String[] arg) Der er et par flere begreber at forstå.

Sammenlign dette med Turbo Pascal, som er, hvad mange mennesker startede med, inklusive mig:

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

Så vidt jeg ved, vil skolen løse dette problem ved at indføre yderligere test. Nu vil ikke alle være i stand til at studere Java. Dette er stadig på konceptstadiet, men skridtet er klart det rigtige.

Og den anden grund er som på billedet nedenfor:

E-Dobavki - en webservice til søgning af fødevaretilsætningsstoffer i Java og Spring Boot, skrevet af mine elever

Folk tror ofte, at programmering handler om at skrive en masse tekst og få mange penge for det. Som en tekstforfatter, kun flere penge.

Virkeligheden er lidt anderledes. En masse rutinekode, uoplagte fejl, en konstant læringsproces. Det er interessant, men ikke for alle.

Det er statistikken. Først gjorde det mig ked af det, jeg tænkte, at jeg måske gjorde noget forkert. Nu forstår jeg, at statistikken er nogenlunde den samme for de fleste kurser. Nu bekymrer jeg mig ikke om det, men undervis de mennesker, der er interesserede i det.

Service idé

Når eleverne havde gennemført hele forløbet, var det tid til at skrive det afsluttende projekt. Der var forskellige ideer. De tilbød ToDo-ark, projektledelsesprojekter og noget andet.

Jeg ville gøre noget simpelt, men nyttigt. Mit kriterium var enkelt – om mine venner og jeg kunne bruge det. En webservice til at søge efter fødevaretilsætningsstoffer opfyldte disse krav.

Ideen er enkel. Når du køber et produkt i en butik, ser du en form for E-additiv i sammensætningen. Det fremgår ikke tydeligt af koden, hvor farligt det er eller ej (og der er også farlige tilsætningsstoffer, som er forbudt i mange lande).

Du åbner hjemmesiden, indtaster navnet på tillægget (nummer, et af de alternative navne), og får en oversigt over tillægget:

E-Dobavki - en webservice til søgning af fødevaretilsætningsstoffer i Java og Spring Boot, skrevet af mine elever

Der er lignende projekter. Du kan også blot indtaste additivet i Google, selvom det ikke altid viser oplysningerne korrekt.

Men da projektet er lærerigt, stoppede ovenstående vanskeligheder os ikke :)

implementering

Alle skrev på Java, kildekoden til projektet på Github.

Vi var 7, inklusive mig. Alle lavede en pull-anmodning, og jeg eller en anden person fra gruppen accepterede denne pull-anmodning.

Gennemførelsen af ​​projektet tog omkring en måned - fra idéen blev udtrykt til den tilstand, du ser nu.

Parsing af tilsætningsstoffer

Det første en af ​​eleverne gjorde, udover den grundlæggende oprettelse af en ramme omkring databasen (entiteter, repositories osv.), var at analysere tilføjelser fra en eksisterende informationsside.

Dette var nødvendigt for at teste de resterende punkter. Der kræves ingen yderligere kode for at udfylde databasen. Efter hurtigt at have analyseret adskillige additiver kunne vi yderligere teste brugergrænsefladen, sorteringen og filtreringen.

Spring Boot giver dig mulighed for at oprette flere profiler. En profil er en fil med indstillinger.

Til dev-miljøet brugte vi en profil med en lokal H2 DBMS og standard HTTP-porten (8080). Hver gang applikationen blev startet, blev databasen således ryddet. Parseren i dette tilfælde var det, der reddede os.

Søg og filtrering

Et vigtigt punkt er søgning og filtrering. En person i en butik skal hurtigt klikke på koden til tillægget, eller et af navnene, og få resultatet.

Derfor har Additive-enheden flere felter. Dette er den additive kode, alternative navne, beskrivelse. Søgningen udføres med Like i alle felter på samme tid. Og hvis du indtaster [123] eller [amaranth], vil du få det samme resultat.

Vi gjorde alt dette baseret på specifikationer. Dette er en del af Spring, der giver dig mulighed for at beskrive grundlæggende søgebetingelser (som f.eks. nogle felter) og derefter kombinere disse betingelser (ELLER eller OG).

Efter at have skrevet et dusin specifikationer kan du stille komplekse forespørgsler som "alle farlige farvetilsætningsstoffer, der har ordet [rød] i beskrivelsen."

I forhold til at arbejde med Spring-databasen, synes jeg det er meget praktisk. Dette gælder især, når du arbejder med komplekse forespørgsler. Jeg forstår, at dette har sin egen overhead, og en manuelt skrevet og optimeret SQL-forespørgsel vil køre hurtigere.

Men jeg holder også fast i det synspunkt, at der ikke er behov for at optimere alt på forhånd. Den første version skal starte, fungere og tillade udskiftning af individuelle dele. Og hvis der er en belastning, skal disse enkelte dele omskrives.

Sikkerhed

Det er simpelt. Der er brugere med rollen ADMIN - de kan redigere tilføjelser, slette dem og tilføje nye.

Og der er andre brugere (registrerede eller ej). De kan kun gennemse listen over tilsætningsstoffer og søge efter dem, de har brug for.

Spring Security blev brugt til at adskille rettigheder. Brugerdata gemmes i en database.

Brugere kan registrere sig. Nu giver det ikke noget. Hvis eleverne fortsætter med at udvikle tjenesten og indføre nogle personlige funktioner, så vil tilmelding være nyttig.

Reaktionsevne og Bootstrap

Det næste punkt er tilpasningsevne. I tilfælde af vores tjeneste (i hvert fald som vi så det), vil størstedelen af ​​brugerne være med mobiltelefoner. Og du skal hurtigt se tillægget fra din mobiltelefon.

For ikke at lide med CSS, tog vi Bootstrap. Billig, munter og ser anstændig ud.

Jeg kan ikke kalde grænsefladen ideel. Hovedsiden er endnu mindre, og siden for en detaljeret beskrivelse af additivet er smal; på mobiltelefoner skal den gøres bredere.

Jeg kan kun sige, at jeg forsøgte at blande mig i arbejdet så lidt som muligt. Dette er stadig et studenterprojekt. Og selvfølgelig vil fyrene være i stand til at rette sådanne øjeblikke senere.

Et minuts SEO-optimering

Da jeg har været tæt involveret i hjemmesider og alt relateret til SEO i mere end to år, kunne jeg ikke frigive et projekt uden mindst grundlæggende SEO-optimering.

Faktisk lavede jeg en skabelongenerering af titel og beskrivelse for hver tilføjelse. URL'en er næsten CNC, selvom den kan gøres kortere.

Jeg tilføjede også fremmødetællere. Føjede webstedet til Yandex Webmaster og Google Search Console for at overvåge advarsler fra søgemaskiner.

Det er ikke nok. Du skal også tilføje robots.txt og sitemap.xml for fuld indeksering. Men igen, dette er et studenterprojekt. Jeg vil fortælle dem, hvad der skal gøres, og hvis de vil, vil de gøre det.

Du skal vedhæfte et SSL-certifikat. Den gratis Let's Encrypt vil også fungere. Jeg gjorde dette til Spring Boot. Det er ikke svært at gøre, og tilliden til PS stiger.

Hvad er det næste for projektet?

Så er valget faktisk op til fyrene. Den oprindelige idé med projektet omfattede også en database med produkter med links til tilsætningsstoffer.

Indtast "Snickers" og se, hvilke ernæringsmæssige tilsætningsstoffer den indeholder.

Allerede i starten af ​​projektet vidste jeg, at vi ikke ville have nogen produkter :) Derfor startede vi kun med tilsætningsstoffer.

Nu kan du tilføje produkter og introducere yderligere. boller. Hvis det er en omfattende database, vil der være brugere.

Implementering

Projektet blev implementeret på VPS, Aruba Cloud. Dette er den billigste VPS, vi kunne finde. Jeg har brugt denne udbyder i mere end et år til mine projekter, og jeg er behageligt tilfreds med den.

VPS-egenskaber: 1 GB RAM, 1 CPU (jeg ved ikke om frekvensen), 20 GB SSD. For vores projekt er dette nok.

Projektet er bygget ved hjælp af den sædvanlige mvn clean-pakke. Resultatet er en fat jar - en eksekverbar fil med alle afhængigheder.

For at automatisere alt dette lidt, skrev jeg et par bash-scripts.

Det første script sletter den gamle jar-fil og bygger en ny.

Det andet script starter den samlede krukke og giver den navnet på den påkrævede profil. Denne profil indeholder oplysninger om databaseforbindelse.

DB - MySQL på samme VPS.

Samlet projektgenstart inkluderer:

  • log ind på VPS via SSH
  • download de seneste git-ændringer
  • køre local-jar.sh
  • dræbe kørende applikation
  • køre launch-production.sh

Denne procedure tager tre minutter. Det virker som et smart valg for mig til sådan et lille projekt.

kompleksitet

De største vanskeligheder ved at skabe projektet var af organisatorisk karakter.

Der er en gruppe mennesker, der ser ud til at vide, hvordan man programmerer, men ikke særlig godt. De ved noget, men de kan stadig ikke rigtig anvende det. Og nu skal de færdiggøre projektet om en måned.

Jeg identificerede en betinget teamleder i denne gruppe. Han opbevarede et Google-dokument med en liste over opgaver, distribuerede opgaver og kontrollerede deres accept. Han accepterede også pull-anmodninger.

Jeg bad også eleverne om at skrive en kort rapport hver aften om det arbejde, de lavede på projektet. Hvis du ikke gjorde noget, okay, så skriv bare "gjorde ingenting". Dette er fantastisk øvelse og får dig lidt anspændt. Ikke alle fulgte denne regel, desværre.

Formålet med al denne bevægelse var enkel. Dann et team, selv om det kun er for kort tid, for at arbejde sammen.

Jeg ønskede, at fyrene skulle føle, at deres arbejde var vigtigt. Forstå, at de ikke skriver sfærisk kode i et vakuum. Og det, de laver sammen, er et projekt, som folk så vil bruge.

Den første uge eller to var en opbygning. Enheder og små tilsagn blev lavet trægt. Lidt efter lidt rørte jeg dem op, og arbejdet blev sjovere. Kommunikationen i chatten blev livligere, studerende tilbød deres tilføjelser.

Jeg tror på, at målet er nået. Projektet er færdigt, gutterne fik lidt erfaring med at arbejde i et team. Der er et synligt, håndgribeligt resultat, som kan vises til venner og videreudvikles.

Fund

Læring er interessant.

Efter hver time kom jeg tilbage følelsesmæssigt ophidset. Jeg forsøger at gøre hvert par unikt og formidle så meget viden som muligt.

Det er rart, når den gruppe, jeg underviser, når finalen. Det er især fedt, når fyre skriver "Jeg har fået et job, alt er fint, tak." Også selvom det er en junior, selvom det ikke er de største penge i starten. Men det vigtigste er, at de tog et skridt mod deres ønsker, og det lykkedes.

Selvom artiklen viste sig at være ret omfangsrig, var det bestemt ikke muligt at dække alle punkter. Skriv derfor dine spørgsmål i kommentarerne.

Kilde: www.habr.com

Tilføj en kommentar