E-Dobavki - 'n webdiens om voedselbymiddels in Java en Spring Boot te soek, geskryf deur my studente

Inleiding

Dit het so gebeur dat ek die afgelope amper twee jaar programmering by een van die IT-skole in Kiev onderrig gee. Ek het dit net vir die pret begin doen. Ek het eenkeer 'n programmeringsblog geskryf, toe het ek dit opgegee. Maar die begeerte om nuttige dinge aan belangstellendes te vertel, het nie verdwyn nie.

My hooftaal is Java. Ek het speletjies vir selfone, sagteware vir radiokommunikasie en verskeie webdienste daarop geskryf. En ek leer Java.

Hier wil ek die storie vertel van die opleiding van my laaste groep. Hoe hulle van opleiding begin het tot die skryf van 'n werkende webdiens. 'n Nuttige webdiens om voedingsaanvullings te vind. Gratis, geen advertensies, registrasie en SMS.

Die diens self is hier - E-Dobavki.com.

E-Dobavki - 'n webdiens om voedselbymiddels in Java en Spring Boot te soek, geskryf deur my studente

Die projek is opvoedkundig en bevat geen advertensies nie. Soos ek verstaan ​​van hierdie publikasie, kan jy skakels na sulke projekte verskaf.

Voordat ek die projek self beskryf, sal ek jou 'n bietjie vertel van die groep se leerproses; daarsonder sal die prentjie onvolledig wees.

9 maande opleiding

By die skool waar ek skoolhou, is die Java-kursus in 2 dele verdeel. In totaal neem die kursus ongeveer 9 maande, met alle pouses (Nuwejaarvakansies, tyd om intermediΓͺre projekte te skryf).

Die eerste deel stel studente bekend aan die basiese konsepte van taal. Veranderlikes, metodes, OOP basiese beginsels en al daardie dinge.

Die tweede deel van die kursus maak voorsiening dat die student reeds min of meer verstaan ​​hoe om in Java te skryf, en hy kan 'n "volwasse" tegnologiestapel gegee word. Dit begin alles met SQL, dan JDBC, Hibernate. Dan HTTP, servlets. Volgende is Lente, 'n bietjie oor git en maven. En studente skryf finale projekte.

Alle opleiding is in modules verdeel. Ek het twee keer per week klasse gehou. Die duur van een les is twee uur.

My benadering tot leer

Ek het 5 groepe vrygestel. Dit lyk vir twee jaar na baie, maar ek het amper altyd 2 groepe parallel gelei.

Ek het verskillende benaderings probeer.

Die eerste opsie is dat een paar vir 'n aanbieding met 'n teorie toegeken word. Die tweede paar is pure oefening. Hierdie benadering het op een of ander manier gewerk, maar dit was na my mening nie baie effektief nie.

Die tweede opsie waartoe ek gekom het en waaraan ek nou werk, is om nie 'n hele paartjie aan teorie te wy nie. In plaas daarvan meng ek kort gedeeltes van teorie vir 5-10 minute, en versterk dit dadelik met praktiese voorbeelde. Hierdie benadering werk beter.

As daar genoeg tyd is, roep ek die studente na my plek, sit hulle by my skootrekenaar, en hulle doen self praktiese voorbeelde. Dit werk uitstekend, maar dit neem ongelukkig baie tyd.

Nie almal maak dit tot die einde nie

'n Openbaring vir my was die feit dat nie die hele groep die einde van die kursus bereik nie.

Volgens my waarnemings skryf slegs die helfte van die studente die finale projek. Die meeste van hulle word tydens die eerste deel van die kursus uitgeskakel. En diegene wat die tweede deel bereik het, val gewoonlik nie af nie.

Hulle vertrek om verskeie redes.

Die eerste is kompleksiteit. Maak nie saak wat hulle sΓͺ nie, Java is nie die eenvoudigste taal nie. Om selfs die eenvoudigste program te skryf, moet jy die konsep van 'n klas, 'n metode, verstaan. En om te verstaan ​​hoekom jy moet skryf openbare statiese leemte hoof(String[] arg) Daar is nog 'n paar konsepte om te verstaan.

Vergelyk dit met Turbo Pascal, wat is waarmee baie mense begin het, insluitend ek:

begin
    writeln("ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°");
end.

Sover ek weet, sal die skool hierdie probleem oplos deur bykomende toetse in te stel. Nou kan nie almal Java studeer nie. Dit is nog in die konsepstadium, maar die stap is duidelik die regte een.

En die tweede rede is soos in die prentjie hieronder:

E-Dobavki - 'n webdiens om voedselbymiddels in Java en Spring Boot te soek, geskryf deur my studente

Mense dink dikwels dat programmering daaroor gaan om baie teks te tik en baie geld daarvoor te kry. Soos 'n kopieskrywer, net meer geld.

Die werklikheid is 'n bietjie anders. Baie roetine-kode, onopvallende foute, 'n konstante leerproses. Dit is interessant, maar nie vir almal nie.

Dit is die statistieke. Eers het dit my ontstel, ek het gedink dat ek dalk iets verkeerd doen. Nou verstaan ​​ek dat die statistieke ongeveer dieselfde is vir die meeste kursusse. Nou bekommer ek my nie daaroor nie, maar leer daardie mense wat daarin belangstel.

Diens idee

Sodra studente die hele kursus voltooi het, was dit tyd om die finale projek te skryf. Daar was verskillende idees. Hulle het ToDo-blaaie, projekbestuursprojekte en iets anders aangebied.

Ek wou iets eenvoudig maar nuttig doen. My maatstaf was eenvoudig – of ek en my vriende dit kon gebruik. 'n Webdiens om na voedselbymiddels te soek het aan hierdie vereistes voldoen.

Die idee is eenvoudig. Wanneer jy 'n produk in 'n winkel koop, sien jy 'n soort E-toevoeging in die samestelling. Dit is nie duidelik uit die kode hoe gevaarlik dit is of nie (en daar is ook gevaarlike bymiddels wat in baie lande verbied is).

Jy maak die webwerf oop, voer die naam van die bylaag in (nommer, een van die alternatiewe name), en kry 'n opsomming van die bylaag:

E-Dobavki - 'n webdiens om voedselbymiddels in Java en Spring Boot te soek, geskryf deur my studente

Daar is soortgelyke projekte. Jy kan ook eenvoudig die byvoeging in Google tik, hoewel dit nie altyd die inligting korrek wys nie.

Maar aangesien die projek opvoedkundig is, het die probleme hierbo ons nie gekeer nie :)

Implementering

Almal het in Java geskryf, bronkode van die projek op Github.

Daar was 7 van ons, ek ingesluit. Almal het 'n trekversoek gedoen, en ek, of 'n ander persoon van die groep, het hierdie trekversoek aanvaar.

Die implementering van die projek het ongeveer 'n maand geneem - van die uitspraak van die idee tot die toestand wat jy nou sien.

Ontleed bymiddels

Die eerste ding wat een van die studente gedoen het, behalwe die basiese skepping van 'n raamwerk rondom die databasis (entiteite, bewaarplekke, ens.), was om byvoegings vanaf 'n bestaande inligtingswerf te ontleed.

Dit was nodig om die oorblywende punte te toets. Geen addisionele kode is nodig om die databasis te vul nie. Nadat ons verskeie bymiddels vinnig ontleed het, kon ons die UI, sortering en filter verder toets.

Spring Boot laat jou toe om verskeie profiele te skep. 'n Profiel is 'n lΓͺer met instellings.

Vir die dev-omgewing het ons 'n profiel met 'n plaaslike H2 DBMS en die verstek HTTP-poort (8080) gebruik. Dus, elke keer as die toepassing van stapel gestuur is, is die databasis skoongemaak. Die ontleder in hierdie geval was die ding wat ons gered het.

Soek en filter

'n Belangrike punt is soek en filter. 'n Persoon in 'n winkel moet vinnig op die kode van die bylaag, of een van die name, klik en die resultaat kry.

Daarom het die Additiewe entiteit verskeie velde. Dit is die bykomende kode, alternatiewe name, beskrywing. Die soektog word uitgevoer met behulp van Like in alle velde op dieselfde tyd. En as jy [123] of [amaranth] invoer, sal jy dieselfde resultaat kry.

Ons het dit alles gedoen op grond van spesifikasies. Dit is 'n deel van Lente wat jou toelaat om basiese soektoestande te beskryf (soos byvoorbeeld 'n veld), en dan hierdie voorwaardes (OF of EN) te kombineer.

Nadat u 'n dosyn spesifikasies geskryf het, kan u komplekse navrae vra soos "alle gevaarlike kleurbymiddels wat die woord [rooi] in die beskrywing het."

Wat die werk met die Spring-databasis betref, vind ek dit baie gerieflik. Dit is veral waar wanneer met komplekse navrae gewerk word. Ek verstaan ​​dat dit sy eie oorhoofse koste het, en 'n handgeskrewe en geoptimaliseerde SQL-navraag sal vinniger loop.

Maar ek hou ook by die standpunt dat dit nie nodig is om alles vooraf te optimaliseer nie. Die eerste weergawe moet begin, werk en die vervanging van individuele onderdele toelaat. En as daar 'n vrag is, moet hierdie individuele dele herskryf word.

Sekuriteit

Dis eenvoudig. Daar is gebruikers met die ADMIN-rol – hulle kan byvoegings wysig, uitvee en nuwes byvoeg.

En daar is ander gebruikers (geregistreer of nie). Hulle kan net deur die lys van bymiddels blaai en soek na die wat hulle nodig het.

Spring Security is gebruik om regte te skei. Gebruikersdata word in 'n databasis gestoor.

Gebruikers kan registreer. Nou gee dit niks. As studente voortgaan om die diens te ontwikkel en 'n paar persoonlike funksies bekend te stel, sal registrasie handig te pas kom.

Responsiwiteit en Bootstrap

Die volgende punt is aanpasbaarheid. In die geval van ons diens (ten minste soos ons dit gesien het), sal die meerderheid gebruikers met selfone wees. En jy moet die aanvulling vinnig van jou selfoon af bekyk.

Om nie met CSS te ly nie, het ons Bootstrap geneem. Goedkoop, vrolik, en lyk ordentlik.

Ek kan nie die koppelvlak ideaal noem nie. Die hoofbladsy is nog minder, en die bladsy vir 'n gedetailleerde beskrywing van die bymiddel is smal; op selfone moet dit wyer gemaak word.

Ek kan net sΓͺ dat ek so min as moontlik met die werk probeer inmeng het. Hierdie is steeds 'n studenteprojek. En natuurlik sal die ouens sulke oomblikke later kan regstel.

'n Minuut van SEO-optimalisering

Aangesien ek al meer as twee jaar nou betrokke is by webwerwe en alles wat met SEO verband hou, kon ek nie 'n projek vrystel sonder ten minste basiese SEO-optimering nie.

Trouens, ek het 'n sjabloongenerering van titel en beskrywing vir elke byvoeging gemaak. Die URL is amper CNC, hoewel dit korter gemaak kan word.

Ek het ook bywoningstellers bygevoeg. Het die webwerf by Yandex Webmaster en Google Search Console gevoeg om waarskuwings van soekenjins te monitor.

Dit is nie genoeg nie. Jy moet ook robots.txt en sitemap.xml byvoeg vir volledige indeksering. Maar weereens, dit is 'n studenteprojek. Ek sal vir hulle sΓͺ wat gedoen moet word, en as hulle wil, sal hulle dit doen.

Jy moet 'n SSL-sertifikaat aanheg. Die gratis Let's Encrypt sal ook werk. Ek het dit vir Spring Boot gedoen. Dit is nie moeilik om te doen nie, en die vertroue van die PS neem toe.

Wat is volgende vir die projek?

Dan is die keuse eintlik by die ouens. Die oorspronklike idee van die projek het ook 'n databasis van produkte met skakels na bymiddels ingesluit.

Tik "Snickers" in en kyk watter voedingsbymiddels dit bevat.

Selfs aan die begin van die projek het ek geweet dat ons geen produkte sou hΓͺ nie :) Daarom het ons net met bymiddels begin.

Nou kan jy produkte byvoeg en bykomende produkte bekendstel. broodjies. As dit 'n uitgebreide databasis is, sal daar gebruikers wees.

Ontplooiing

Die projek is op VPS, Aruba Cloud, ontplooi. Dit is die goedkoopste VPS wat ons kon kry. Ek gebruik hierdie verskaffer al meer as 'n jaar vir my projekte, en ek is aangenaam tevrede daarmee.

VPS-eienskappe: 1 GB RAM, 1 SVE (ek weet nie van die frekwensie nie), 20 GB SSD. Vir ons projek is dit genoeg.

Die projek word gebou met behulp van die gewone mvn-skoonpakket. Die resultaat is 'n vetpot - 'n uitvoerbare lΓͺer met alle afhanklikhede.

Om dit alles 'n bietjie te outomatiseer, het ek 'n paar bash-skrifte geskryf.

Die eerste skrip vee die ou jar-lΓͺer uit en bou 'n nuwe een.

Die tweede skrif begin die saamgestelde pot en gee dit die naam van die vereiste profiel deur. Hierdie profiel bevat databasisverbindinginligting.

DB - MySQL op dieselfde VPS.

Totale herbegin van projek sluit in:

  • meld aan by VPS via SSH
  • laai die nuutste git-veranderinge af
  • hardloop local-jar.sh
  • dood lopende toepassing
  • hardloop launch-production.sh

Hierdie prosedure duur drie minute. Dit lyk vir my na 'n slim keuse vir so 'n klein projek.

kompleksiteit

Die grootste probleme met die skep van die projek was van organisatoriese aard.

Daar is 'n groep mense wat blykbaar weet hoe om te programmeer, maar nie baie goed nie. Hulle weet iets, maar hulle kan dit steeds nie regtig toepas nie. En nou moet hulle die projek binne 'n maand voltooi.

Ek het 'n voorwaardelike spanleier in hierdie groep geΓ―dentifiseer. Hy het 'n Google-dokument met 'n lys take gehou, take versprei en die aanvaarding daarvan beheer. Hy het ook trekversoeke aanvaar.

Ek het ook die studente gevra om elke aand 'n kort verslag te skryf oor die werk wat hulle aan die projek gedoen het. As jy niks gedoen het nie, goed, skryf net "niks gedoen nie." Dit is goeie oefening en maak jou 'n bietjie gespanne. Nie almal het ongelukkig hierdie reΓ«l gevolg nie.

Die doel van al hierdie beweging was eenvoudig. Vorm 'n span, al is dit net vir 'n kort tydjie, om saam te werk.

Ek wou hΓͺ die ouens moet voel hul werk is belangrik. Verstaan ​​dat hulle nie sferiese kode in 'n vakuum skryf nie. En wat hulle saam doen, is 'n projek wat mense dan sal gebruik.

Die eerste week of twee was 'n opbou. Entiteite en klein verbintenisse is traag gemaak. Ek het hulle bietjie vir bietjie geroer, en die werk het lekkerder geword. Kommunikasie in die klets het lewendiger geword, studente het hul toevoegings aangebied.

Ek glo die doelwit is bereik. Die projek is klaar, die ouens het bietjie ervaring opgedoen om in 'n span te werk. Daar is 'n sigbare, tasbare resultaat wat aan vriende gewys en verder ontwikkel kan word.

Bevindinge

Leer is interessant.

Na elke klas het ek emosioneel opgewonde teruggekom. Ek probeer om elke paar uniek te maak en soveel as moontlik kennis oor te dra.

Dis lekker as die groep wat ek onderrig die finaal haal. Dit is veral gaaf as ouens skryf "Ek het werk gekry, alles is reg, dankie." Al is dit 'n junior, al is dit aanvanklik nie die grootste geld nie. Maar die belangrikste is dat hulle 'n stap na hul begeertes geneem het, en hulle het daarin geslaag.

Alhoewel die artikel redelik lywig geblyk het, was dit beslis nie moontlik om al die punte te dek nie. Skryf dus jou vrae in die kommentaar.

Bron: will.com

Voeg 'n opmerking