E-Dobavki - in webtsjinst foar it sykjen fan fiedingsadditieven yn Java en Spring Boot, skreaun troch myn studinten

Ynlieding

It barde sa dat ik de lêste hast twa jier programmearring learde op ien fan 'e IT-skoallen yn Kiev. Ik begon dit te dwaan Just For Fun. Ik haw ris in programmearblog skreaun, doe haw ik it opjûn. Mar de winsk om nuttige dingen te fertellen oan ynteressearre minsken is net ferdwûn.

Myn haadtaal is Java. Ik skreau spultsjes foar mobile tillefoans, software foar radiokommunikaasje, en ferskate webtsjinsten derop. En ik lear Java.

Hjir wol ik it ferhaal fertelle fan de training fan myn lêste groep. Hoe't se gongen fan it begjinnen fan training nei it skriuwen fan in wurkjende webtsjinst. In nuttige webtsjinst foar it finen fan fiedingssupplementen. Fergees, gjin reklame, registraasje en SMS.

De tsjinst sels is hjir - E-Dobavki.com.

E-Dobavki - in webtsjinst foar it sykjen fan fiedingsadditieven yn Java en Spring Boot, skreaun troch myn studinten

It projekt is edukatyf en befettet gjin reklame. As ik begryp fan dizze publikaasje, kinne jo keppelings jaan oan sokke projekten.

Foardat ik it projekt sels beskriuw, sil ik jo in bytsje fertelle oer it learproses fan 'e groep; sûnder dit sil it byld net kompleet wêze.

9 moannen training

Op de skoalle dêr't ik lesjaan is de kursus Java yn 2 dielen ferdield. Yn totaal nimt de kursus sawat 9 moannen, mei alle pauzes (nijjiersfakânsje, tiid om tuskenprojekten te skriuwen).

It earste diel bringt learlingen yn 'e kunde mei de basisbegripen fan taal. Fariabelen, metoaden, OOP basics en al dat guod.

It twadde diel fan 'e kursus soarget foar dat de studint al min of mear begrypt hoe't jo yn Java skriuwe, en hy kin in "folwoeksen" technologystapel krije. It begjint allegear mei SQL, dan JDBC, Hibernate. Dan HTTP, servlets. Folgjende is Spring, in bytsje oer git en maven. En studinten skriuwe einprojekten.

Alle training is ferdield yn modules. Ik haw twa kear yn 'e wike lessen hâlden. De doer fan ien les is twa oeren.

Myn oanpak fan learen

Ik útbrocht 5 groepen. It liket in protte foar twa jier, mar ik haw hast altyd 2 groepen parallel liede.

Ik haw ferskate oanpak besocht.

De earste opsje is dat ien pear wurdt tawiisd foar in presintaasje mei in teory. It twadde pear is suver praktyk. Dizze oanpak wurke op ien of oare manier, mar it wie net heul effektyf, neffens my.

De twadde opsje dêr't ik by kaam en dêr't ik no oan wurkje, is net om in hiel pear oan teory te wijen. Ynstee mingje ik koarte seksjes fan teory foar 5-10 minuten, en fersterkje se fuortendaliks mei praktyske foarbylden. Dizze oanpak wurket better.

As der genôch tiid is, rop ik de learlingen nei myn plak, set se op myn laptop en se dogge sels praktyske foarbylden. It wurket geweldich, mar spitigernôch nimt it in protte tiid.

Net elkenien makket it oan 'e ein

In iepenbiering foar my wie it feit dat net de hiele groep de ein fan de kursus berikt.

Neffens myn waarnimmings skriuwt mar de helte fan de learlingen it einprojekt. De measte fan harren wurde eliminearre yn it earste diel fan 'e kursus. En dyjingen dy't it twadde diel berikt hawwe, falle meastentiids net ôf.

Se ferlitte om ferskate redenen.

De earste is kompleksiteit. Wat se ek sizze, Java is net de ienfâldichste taal. Om sels it ienfâldichste programma te skriuwen, moatte jo it konsept fan in klasse, in metoade begripe. En om te begripen wêrom't jo moatte skriuwe iepenbiere statyske leechte haad(String[] arg) D'r binne in pear mear begripen om te begripen.

Fergelykje dit mei Turbo Pascal, dat is wêr't in protte minsken mei begûnen, ynklusyf my:

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

Foar safier't ik wit, sil de skoalle dit probleem oplosse troch ekstra testen yn te fieren. No kin net elkenien Java studearje. Dit is noch op it konseptstadium, mar de stap is dúdlik de juste.

En de twadde reden is lykas yn 'e foto hjirûnder:

E-Dobavki - in webtsjinst foar it sykjen fan fiedingsadditieven yn Java en Spring Boot, skreaun troch myn studinten

Minsken tinke faak dat programmearring giet oer it typen fan in soad tekst en it krijen fan in soad jild foar it. Lykas in copywriter, allinich mear jild.

De realiteit is in bytsje oars. In protte routine koade, ûnsichtbere bugs, in konstant learproses. It is nijsgjirrich, mar net foar elkenien.

Dit binne de statistiken. Earst makke it my oerstjoer, ik tocht dat ik miskien wat ferkeard die. No begryp ik dat de statistiken sawat itselde binne foar de measte kursussen. No meitsje ik my der gjin soargen oer, mar lear dy minsken dy't der belangstelling foar hawwe.

Service idee

Sadree't de learlingen de hiele kursus foltôge hiene, wie it tiid om it einprojekt te skriuwen. Der wiene ferskillende ideeën. Se biede ToDo-blêden, projektbehearprojekten, en wat oars oan.

Ik woe wat ienfâldich, mar nuttich dwaan. Myn kritearium wie ienfâldich - oft myn freonen en ik it koenen brûke. In webtsjinst foar it sykjen nei fiedingsadditieven foldie oan dizze easken.

It idee is ienfâldich. As jo ​​​​in produkt keapje yn in winkel, sjogge jo in soarte fan E-additive yn 'e komposysje. It is net dúdlik út de koade hoe gefaarlik it is of net (en der binne ek gefaarlike tafoegings dy't ferbean binne yn in protte lannen).

Jo iepenje de webside, fier de namme fan it oanfolling yn (nûmer, ien fan 'e alternative nammen), en krije in gearfetting fan it oanfolling:

E-Dobavki - in webtsjinst foar it sykjen fan fiedingsadditieven yn Java en Spring Boot, skreaun troch myn studinten

Der binne ferlykbere projekten. Jo kinne it additief ek gewoan yn Google ynfiere, hoewol it de ynformaasje net altyd goed toant.

Mar om't it projekt edukatyf is, stopten de boppesteande swierrichheden ús net :)

Ymplemintaasje

Elkenien skreau yn Java, boarnekoade fan it projekt op Github.

D'r wiene 7 fan ús, ynklusyf my. Elkenien makke in pull-fersyk, en ik, of in oare persoan út 'e groep, akseptearre dit pull-fersyk.

De útfiering fan it projekt duorre sawat in moanne - fan it útsprekken fan it idee oant de steat dy't jo no sjogge.

Parsing additieven

It earste ding dat ien fan 'e studinten die, neist de basis oanmeitsjen fan in ramt om de databank (entiteiten, repositories, ensfh.), wie it parsearjen fan add-ons fan in besteande ynformaasjeside.

Dit wie nedich om de oerbleaune punten te testen. Gjin ekstra koade is nedich om de databank te befolkjen. Neidat wy ferskate tafoegings rap hawwe parseard, koene wy ​​de UI, sortearjen en filterjen fierder testen.

Spring Boot kinne jo meitsje meardere profilen. In profyl is in bestân mei ynstellings.

Foar de dev-omjouwing brûkten wy in profyl mei in lokale H2 DBMS en de standert HTTP-poarte (8080). Sadwaande, elke kear as de applikaasje waard lansearre, waard de databank wiske. De parser yn dit gefal wie it ding dat ús rêde.

Sykje en filterjen

In wichtich punt is sykjen en filterjen. In persoan yn in winkel moat fluch klikke op de koade fan it oanfolling, of ien fan 'e nammen, en krije it resultaat.

Dêrom hat de Additive entiteit ferskate fjilden. Dit is de additive koade, alternative nammen, beskriuwing. It sykjen wurdt útfierd mei Like yn alle fjilden tagelyk. En as jo [123] of [amaranth] ynfiere, krije jo itselde resultaat.

Wy diene dit alles basearre op Spesifikaasjes. Dit is in diel fan Spring wêrmei jo te beskriuwen basis sykbetingsten (lykas guon fjild, bygelyks), en dan kombinearje dizze betingsten (OF of EN).

Nei't jo in tsiental spesifikaasjes hawwe skreaun, kinne jo komplekse fragen stelle lykas "alle gefaarlike kleurtafoegings dy't it wurd [read] yn 'e beskriuwing hawwe."

Wat it wurkjen mei de Spring-database oanbelanget, fyn ik it heul handich. Dit is benammen wier as jo wurkje mei komplekse fragen. Ik begryp dat dit in eigen overhead hat, en in mei de hân skreaune en optimalisearre SQL-query sil flugger rinne.

Mar ik hâlde my ek oan it stânpunt dat it net nedich is om alles foarôf te optimalisearjen. De earste ferzje moat begjinne, wurkje en it ferfangen fan yndividuele dielen tastean. En as der in lading is, moatte dizze yndividuele dielen opnij skreaun wurde.

Feiligens

It is ienfâldich. D'r binne brûkers mei de ADMIN-rol - se kinne tafoegings bewurkje, se wiskje en nije tafoegje.

En d'r binne oare brûkers (registrearre as net). Se kinne allinich troch de list mei tafoegings blêdzje en sykje nei dejingen dy't se nedich binne.

Spring Security waard brûkt om rjochten te skieden. Brûkersgegevens wurde opslein yn in databank.

Brûkers kinne registrearje. No jout it neat. As studinten trochgean mei it ûntwikkeljen fan de tsjinst en yntrodusearje guon personaliseare funksjes, dan sil registraasje fan pas komme.

Responsiviteit en Bootstrap

It folgjende punt is oanpassingsfermogen. Yn it gefal fan ús tsjinst (op syn minst sa't wy it seagen), sil de mearderheid fan brûkers mei mobile tillefoans wêze. En jo moatte de oanfolling fluch besjen fan jo mobile tillefoan.

Om net te lije mei CSS, namen wy Bootstrap. Goedkeap, fleurich en sjocht der fatsoenlik út.

Ik kin net neame de ynterface ideaal. De haadside is noch minder, en de side foar in detaillearre beskriuwing fan it additief is smel; op mobile tillefoans moat it breder makke wurde.

Ik kin allinne mar sizze dat ik besocht it wurk sa min mooglik te bemuoien. Dit is noch altyd in studinteprojekt. En fansels kinne de jonges sokke mominten letter korrigearje.

In minút fan SEO-optimalisaasje

Sûnt ik bin nau belutsen by websiden en alles relatearre oan SEO foar mear as twa jier, koe ik gjin projekt frijlitte sûnder op syn minst basis SEO-optimisaasje.

Eins haw ik in sjabloangeneraasje makke fan Titel en beskriuwing foar elke tafoeging. De URL is hast CNC, hoewol it kin wurde makke koarter.

Ik haw ek oanwêzichheidskellers tafoege. De side tafoege oan Yandex Webmaster en Google Search Console om warskôgingen fan sykmasines te kontrolearjen.

It is net genôch. Jo moatte ek robots.txt en sitemap.xml tafoegje foar folsleine yndeksearring. Mar wer, dit is in studinteprojekt. Ik sil har fertelle wat der dien wurde moat, en as se wolle, sille se it dwaan.

Jo moatte in SSL-sertifikaat taheakje. De fergese Let's Encrypt sil ek wurkje. Ik die dit foar Spring Boot. It is net dreech om te dwaan, en it fertrouwen fan 'e PS nimt ta.

Wat is de folgjende foar it projekt?

Dan is de kar trouwens oan de jonges. It orizjinele idee fan it projekt omfette ek in databank fan produkten mei keppelings nei tafoegings.

Fier "Snickers" yn en sjoch hokker nutritionele tafoegings it befettet.

Sels oan it begjin fan it projekt wist ik dat wy gjin produkten soene hawwe :) Dêrom begonen wy allinich mei additieven.

No kinne jo produkten tafoegje en ekstra yntrodusearje. buns. As it in wiidweidige databank is, sille d'r brûkers wêze.

Ynset

It projekt waard ynset op VPS, Aruba Cloud. Dit is de goedkeapste VPS dy't wy koene fine. Ik haw brûkt dizze provider foar mear as in jier foar myn projekten, en ik bin noflik tefreden mei it.

VPS skaaimerken: 1 GB RAM, 1 CPU (Ik wit net oer de frekwinsje), 20 GB SSD. Foar ús projekt is dit genôch.

It projekt is boud mei it gebrûklike mvn skjinne pakket. It resultaat is in fet jar - in útfierber bestân mei alle ôfhinklikens.

Om dit alles in bytsje te automatisearjen, skreau ik in pear bash-skripts.

It earste skript wisket it âlde jar-bestân en bout in nij.

It twadde skript lanseart de gearstalde pot, en jout it de namme fan it fereaske profyl troch. Dit profyl befettet ynformaasje oer databankferbining.

DB - MySQL op deselde VPS.

Totale projekt opnij starte omfettet:

  • oanmelde by VPS fia SSH
  • download de lêste git-feroarings
  • run local-jar.sh
  • kill rinnende applikaasje
  • run launch-production.sh

Dizze proseduere duorret trije minuten. Dit liket my in tûke kar foar sa'n lyts projekt.

Problemen

De wichtichste swierrichheden by it meitsjen fan it projekt wiene fan organisatoaryske aard.

Der is in groep minsken dy't lykje te witten hoe te programmearjen, mar net hiel goed. Se witte wat, mar se kinne it noch net echt tapasse. En no moatte se it projekt yn in moanne ôfmeitsje.

Ik identifisearre in betingst team lieder yn dizze groep. Hy hâlden in Google Doc mei in list fan taken, ferdield taken, en kontrolearre harren akseptaasje. Hy akseptearre ek pull-oanfragen.

Ik frege de learlingen ek elke jûn in koart ferslach te skriuwen oer it wurk dat se oan it projekt diene. As jo ​​​​neat dien hawwe, ok, skriuw gewoan "neat dien." Dit is geweldige oefening en makket jo in bytsje spannend. Net elkenien folge dizze regel, spitigernôch.

It doel fan al dizze beweging wie ienfâldich. Formearje in team, al is it mar foar in koarte tiid, om gear te wurkjen.

Ik woe dat de jonges fiele dat har wurk wichtich wie. Begryp dat se gjin sfearyske koade yn in fakuüm skriuwe. En wat se tegearre dogge is in projekt dat minsken dan brûke sille.

De earste wike as twa wie in opbou. Entiteiten en lytse commits waarden traach makke. Stadichoan roerde ik se op, en it wurk waard leuker. De kommunikaasje yn it petear waard libbender, studinten biede harren oanfollingen oan.

Ik leau dat it doel berikt is. It projekt is dien, de jonges krigen in bytsje ûnderfining mei it wurkjen yn in team. Der is in sichtber, taastber resultaat dat kin wurde toand oan freonen en fierder ûntwikkele.

befinings

Learje is ynteressant.

Nei elke klasse kaam ik emosjoneel agitearre werom. Ik besykje elk pear unyk te meitsjen en safolle mooglik kennis oer te bringen.

It is moai as de groep dêr't ik lesjaan oan de finale komt. It is foaral cool as jonges skriuwe "Ik haw in baan, alles is goed, tank." Ek al is it in junior, sels as it earst net it grutste jild is. Mar it wichtichste is dat se in stap naam nei har winsken, en se slagge.

Hoewol't it artikel frijwat volumineus bliek, wie it grif net mooglik om alle punten te dekken. Skriuw dêrom jo fragen yn 'e kommentaren.

Boarne: www.habr.com

Add a comment