E-Dobavki - isang serbisyo sa web para sa paghahanap ng mga additives ng pagkain sa Java at Spring Boot, na isinulat ng aking mga mag-aaral

Pagpapakilala

Nagkataon na sa huling halos dalawang taon ay nagtuturo ako ng programming sa isa sa mga IT school sa Kyiv. Sinimulan kong gawin itong Just For Fun. Minsan akong nagsulat ng isang programming blog, pagkatapos ay ibinigay ko ito. Ngunit ang pagnanais na magsabi ng kapaki-pakinabang na mga bagay sa mga taong interesado ay hindi nawala.

Ang aking pangunahing wika ay Java. Sumulat ako ng mga laro para sa mga mobile phone, software para sa mga komunikasyon sa radyo, at iba't ibang serbisyo sa web dito. At nagtuturo ako ng Java.

Dito ko gustong ikuwento ang training ng huli kong grupo. Paano sila nagmula sa pagsisimula ng pagsasanay hanggang sa pagsulat ng isang gumaganang serbisyo sa web. Isang kapaki-pakinabang na serbisyo sa web para sa paghahanap ng mga nutritional supplement. Libre, walang advertising, pagpaparehistro at SMS.

Ang serbisyo mismo ay narito - E-Dobavki.com.

E-Dobavki - isang serbisyo sa web para sa paghahanap ng mga additives ng pagkain sa Java at Spring Boot, na isinulat ng aking mga mag-aaral

Ang proyekto ay pang-edukasyon at hindi naglalaman ng anumang advertising. Sa pagkakaintindi ko mula sa ang publikasyong ito, maaari kang magbigay ng mga link sa mga naturang proyekto.

Bago ilarawan ang mismong proyekto, sasabihin ko sa iyo ang tungkol sa proseso ng pag-aaral ng grupo; kung wala ito, ang larawan ay hindi kumpleto.

9 na buwang pagsasanay

Sa paaralan kung saan ako nagtuturo, ang kursong Java ay nahahati sa 2 bahagi. Sa kabuuan, ang kurso ay tumatagal ng humigit-kumulang 9 na buwan, kasama ang lahat ng mga pahinga (mga pista opisyal ng Bagong Taon, oras upang magsulat ng mga intermediate na proyekto).

Ang unang bahagi ay nagpapakilala sa mga mag-aaral sa mga pangunahing konsepto ng wika. Mga variable, pamamaraan, mga pangunahing kaalaman sa OOP at lahat ng bagay na iyon.

Ang ikalawang bahagi ng kurso ay nagbibigay na ang mag-aaral ay higit pa o hindi gaanong naiintindihan kung paano magsulat sa Java, at maaari siyang bigyan ng isang "pang-adulto" na salansan ng teknolohiya. Nagsisimula ang lahat sa SQL, pagkatapos ay JDBC, Hibernate. Pagkatapos HTTP, servlets. Susunod ay Spring, isang maliit na tungkol sa git at maven. At ang mga mag-aaral ay sumulat ng mga huling proyekto.

Ang lahat ng pagsasanay ay nahahati sa mga module. Nagsagawa ako ng mga klase dalawang beses sa isang linggo. Ang tagal ng isang aralin ay dalawang oras.

Ang aking diskarte sa pag-aaral

Naglabas ako ng 5 grupo. Mukhang marami sa loob ng dalawang taon, ngunit halos palaging pinamunuan ko ang 2 grupo nang magkatulad.

Sinubukan ko ang iba't ibang paraan.

Ang unang opsyon ay ang isang pares ay inilalaan para sa isang pagtatanghal na may isang teorya. Ang pangalawang pares ay purong pagsasanay. Ang diskarte na ito sa paanuman ay nagtrabaho, ngunit ito ay hindi masyadong epektibo, sa aking opinyon.

Ang pangalawang opsyon na napuntahan ko at pinagsusumikapan ko ngayon ay hindi ang pag-ukol ng isang buong mag-asawa sa teorya. Sa halip, hinahalo ko ang mga maikling seksyon ng teorya sa loob ng 5-10 minuto, at agad na pinapalakas ang mga ito ng mga praktikal na halimbawa. Mas gumagana ang diskarteng ito.

Kung may sapat na oras, tinatawagan ko ang mga estudyante sa aking lugar, pinaupo sila sa aking laptop, at sila mismo ang gumagawa ng mga praktikal na halimbawa. Gumagana ito nang mahusay, ngunit sa kasamaang-palad ay nangangailangan ito ng maraming oras.

Hindi lahat ay umabot hanggang dulo

Ang isang paghahayag para sa akin ay ang katotohanan na hindi ang buong grupo ay umabot sa dulo ng kurso.

Ayon sa aking mga obserbasyon, kalahati lamang ng mga mag-aaral ang sumusulat ng huling proyekto. Karamihan sa kanila ay inalis sa unang bahagi ng kurso. At ang mga nakarating sa ikalawang bahagi ay karaniwang hindi nahuhulog.

Umalis sila sa iba't ibang dahilan.

Ang una ay ang pagiging kumplikado. Anuman ang sabihin nila, ang Java ay hindi ang pinakasimpleng wika. Upang magsulat kahit na ang pinakasimpleng programa, kailangan mong maunawaan ang konsepto ng isang klase, isang pamamaraan. At upang maunawaan kung bakit kailangan mong magsulat pampublikong static void main(String[] arg) Mayroong ilang higit pang mga konsepto upang maunawaan.

Ihambing ito sa Turbo Pascal, na sinimulan ng maraming tao, kasama ako:

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

Sa pagkakaalam ko, lulutasin ng paaralan ang problemang ito sa pamamagitan ng pagpapakilala ng karagdagang pagsubok. Ngayon hindi lahat ay maaaring mag-aral ng Java. Ito ay nasa yugto ng konsepto pa rin, ngunit ang hakbang ay malinaw na tama.

At ang pangalawang dahilan ay tulad ng nasa larawan sa ibaba:

E-Dobavki - isang serbisyo sa web para sa paghahanap ng mga additives ng pagkain sa Java at Spring Boot, na isinulat ng aking mga mag-aaral

Madalas iniisip ng mga tao na ang programming ay tungkol sa pag-type ng maraming text at pagkuha ng maraming pera para dito. Parang copywriter, mas maraming pera lang.

Ang katotohanan ay medyo naiiba. Maraming regular na code, hindi halatang mga bug, isang patuloy na proseso ng pag-aaral. Ito ay kawili-wili, ngunit hindi para sa lahat.

Ito ang mga istatistika. Noong una ay nagalit ako, naisip ko na baka may ginagawa akong mali. Ngayon naiintindihan ko na ang mga istatistika ay halos pareho para sa karamihan ng mga kurso. Ngayon hindi ako nag-aalala tungkol dito, ngunit turuan ang mga taong interesado dito.

Ideya ng serbisyo

Kapag natapos na ng mga mag-aaral ang buong kurso, oras na para isulat ang huling proyekto. Nagkaroon ng iba't ibang ideya. Nag-alok sila ng mga ToDo sheet, proyekto sa pamamahala ng proyekto, at iba pa.

Nais kong gumawa ng isang bagay na simple ngunit kapaki-pakinabang. Simple lang ang aking pamantayan - kung magagamit namin ito ng aking mga kaibigan. Natugunan ng isang serbisyo sa web para sa paghahanap ng mga additives ng pagkain ang mga kinakailangang ito.

Simple lang ang ideya. Kapag bumili ka ng isang produkto sa isang tindahan, makikita mo ang ilang uri ng E-additive sa komposisyon. Hindi malinaw sa code kung gaano ito mapanganib o hindi (at mayroon ding mga mapanganib na additives na ipinagbabawal sa maraming bansa).

Binuksan mo ang website, ilagay ang pangalan ng suplemento (numero, isa sa mga alternatibong pangalan), at kumuha ng buod ng suplemento:

E-Dobavki - isang serbisyo sa web para sa paghahanap ng mga additives ng pagkain sa Java at Spring Boot, na isinulat ng aking mga mag-aaral

May mga katulad na proyekto. Maaari mo ring i-type lamang ang additive sa Google, bagama't hindi ito palaging nagpapakita ng impormasyon nang tama.

Ngunit dahil pang-edukasyon ang proyekto, hindi kami napigilan ng mga paghihirap sa itaas :)

Pagpapatupad

Lahat ay sumulat sa Java, source code ng proyekto sa Github.

7 kami, kasama ako. Lahat ay gumawa ng pull request, at ako, o ibang tao mula sa grupo, ay tinanggap ang pull request na ito.

Ang pagpapatupad ng proyekto ay tumagal nang humigit-kumulang isang buwan - mula sa pagpapahayag ng ideya hanggang sa estado na nakikita mo ngayon.

Mga additives sa pag-parse

Ang unang bagay na ginawa ng isa sa mga mag-aaral, bukod sa pangunahing paglikha ng isang balangkas sa paligid ng database (mga entidad, mga repositoryo, atbp.), ay ang pag-parse ng mga add-on mula sa isang umiiral na site ng impormasyon.

Ito ay kinakailangan upang subukan ang natitirang mga puntos. Walang karagdagang code ang kailangan para ma-populate ang database. Sa mabilis na pag-parse ng ilang additives, maaari pa naming subukan ang UI, pag-uuri, at pag-filter.

Binibigyang-daan ka ng Spring Boot na lumikha ng maramihang mga profile. Ang profile ay isang file na may mga setting.

Para sa dev environment, gumamit kami ng profile na may lokal na H2 DBMS at ang default na HTTP port (8080). Kaya, sa bawat oras na ang application ay inilunsad, ang database ay na-clear. Ang parser sa kasong ito ay ang bagay na nagligtas sa amin.

Maghanap at mag-filter

Ang isang mahalagang punto ay ang paghahanap at pagsasala. Ang isang tao sa isang tindahan ay dapat mabilis na mag-click sa code ng suplemento, o isa sa mga pangalan, at makuha ang resulta.

Samakatuwid, ang Additive entity ay may ilang mga field. Ito ang additive code, mga alternatibong pangalan, paglalarawan. Isinasagawa ang paghahanap gamit ang Like sa lahat ng field nang sabay-sabay. At kung ipasok mo ang [123] o [amaranth], makakakuha ka ng parehong resulta.

Ginawa namin ang lahat ng ito batay sa Mga Pagtutukoy. Ito ay bahagi ng Spring na nagbibigay-daan sa iyong ilarawan ang mga pangunahing kondisyon sa paghahanap (tulad ng ilang field, halimbawa), at pagkatapos ay pagsamahin ang mga kundisyong ito (O o AT).

Sa pagsulat ng isang dosenang mga detalye, maaari kang magtanong ng mga kumplikadong query tulad ng "lahat ng mga mapanganib na pangkulay na additives na may salitang [pula] sa paglalarawan."

Sa mga tuntunin ng pagtatrabaho sa database ng Spring, nahanap ko itong napaka-maginhawa. Ito ay totoo lalo na kapag nagtatrabaho sa mga kumplikadong query. Naiintindihan ko na mayroon itong sariling overhead, at ang isang manu-manong nakasulat at na-optimize na query sa SQL ay tatakbo nang mas mabilis.

Ngunit sumunod din ako sa punto ng view na hindi na kailangang i-optimize ang lahat nang maaga. Ang unang bersyon ay dapat magsimula, gumana, at payagan ang pagpapalit ng mga indibidwal na bahagi. At kung may pag-load, ang mga indibidwal na bahagi na ito ay kailangang muling isulat.

Katiwasayan

Simple lang. May mga user na may tungkuling ADMIN - maaari nilang i-edit ang mga karagdagan, tanggalin ang mga ito, at magdagdag ng mga bago.

At may iba pang mga gumagamit (nakarehistro o hindi). Maaari lamang nilang i-browse ang listahan ng mga additives at hanapin ang mga kailangan nila.

Ginamit ang Spring Security upang paghiwalayin ang mga karapatan. Ang data ng gumagamit ay naka-imbak sa isang database.

Maaaring magparehistro ang mga gumagamit. Ngayon ay wala na itong ibinibigay. Kung ang mga mag-aaral ay patuloy na bubuo ng serbisyo at ipinakilala ang ilang mga personalized na function, kung gayon ang pagpaparehistro ay magiging kapaki-pakinabang.

Pagtugon at Bootstrap

Ang susunod na punto ay ang kakayahang umangkop. Sa kaso ng aming serbisyo (kahit sa paraang nakita namin ito), ang karamihan ng mga gumagamit ay magkakaroon ng mga mobile phone. At kailangan mong mabilis na tingnan ang suplemento mula sa iyong mobile phone.

Upang hindi magdusa sa CSS, kinuha namin ang Bootstrap. Mura, masayahin, at mukhang disente.

Hindi ko matatawag na perpekto ang interface. Ang pangunahing pahina ay mas mababa pa, at ang pahina para sa isang detalyadong paglalarawan ng additive ay makitid; sa mga mobile phone kailangan itong gawing mas malawak.

Masasabi ko lang na sinubukan kong makialam sa trabaho hangga't maaari. Student project pa rin ito. At siyempre, ang mga lalaki ay magagawang itama ang mga ganoong sandali mamaya.

Isang Minuto ng SEO Optimization

Dahil malapit na akong kasangkot sa mga website at lahat ng bagay na nauugnay sa SEO sa loob ng higit sa dalawang taon, hindi ako makakapaglabas ng isang proyekto nang walang kahit basic na SEO optimization.

Sa katunayan, gumawa ako ng template na henerasyon ng Pamagat at Paglalarawan para sa bawat add-on. Ang URL ay halos CNC, bagama't maaari itong gawing mas maikli.

Nagdagdag din ako ng attendance counter. Idinagdag ang site sa Yandex Webmaster at Google Search Console upang subaybayan ang mga babala mula sa mga search engine.

Hindi ito sapat. Kailangan mo ring magdagdag ng robots.txt at sitemap.xml para sa buong pag-index. Ngunit muli, ito ay isang proyekto ng mag-aaral. Sasabihin ko sa kanila kung ano ang kailangang gawin, at kung gusto nila, gagawin nila.

Kailangan mong mag-attach ng SSL certificate. Ang libreng Let's Encrypt ay gagana rin. Ginawa ko ito para sa Spring Boot. Hindi ito mahirap gawin, at tumataas ang tiwala ng PS.

Ano ang susunod para sa proyekto?

Pagkatapos, sa katunayan, ang pagpili ay nasa mga lalaki. Kasama rin sa orihinal na ideya ng proyekto ang isang database ng mga produkto na may mga link sa mga additives.

Ipasok ang "Snickers" at tingnan kung anong mga nutritional additives ang nilalaman nito.

Kahit na sa simula ng proyekto, alam ko na wala kaming anumang mga produkto :) Samakatuwid, nagsimula lamang kami sa mga additives.

Ngayon ay maaari kang magdagdag ng mga produkto at magpakilala ng mga karagdagang produkto. mga tinapay. Kung ito ay isang malawak na database, magkakaroon ng mga gumagamit.

Pag-deploy

Na-deploy ang proyekto sa VPS, Aruba Cloud. Ito ang pinakamurang VPS na mahahanap namin. Ginagamit ko ang provider na ito nang higit sa isang taon para sa aking mga proyekto, at ako ay nalulugod dito.

Mga katangian ng VPS: 1 GB RAM, 1 CPU (hindi ko alam ang dalas), 20 GB SSD. Para sa aming proyekto ito ay sapat na.

Ang proyekto ay binuo gamit ang karaniwang mvn clean package. Ang resulta ay isang fat jar - isang executable file na may lahat ng dependencies.

Upang i-automate ang lahat ng ito nang kaunti, nagsulat ako ng ilang mga script ng bash.

Tinatanggal ng unang script ang lumang jar file at bubuo ng bago.

Ang pangalawang script ay naglulunsad ng naka-assemble na garapon, na ipinapasa ito sa pangalan ng kinakailangang profile. Ang profile na ito ay naglalaman ng impormasyon sa koneksyon sa database.

DB - MySQL sa parehong VPS.

Kasama sa kabuuang pag-restart ng proyekto ang:

  • mag-log in sa VPS sa pamamagitan ng SSH
  • i-download ang pinakabagong mga pagbabago sa git
  • patakbuhin ang local-jar.sh
  • patayin ang tumatakbong application
  • patakbuhin ang launch-production.sh

Ang pamamaraang ito ay tumatagal ng tatlong minuto. Ito ay tila isang matalinong pagpipilian para sa akin para sa isang maliit na proyekto.

Mga Hirap

Ang mga pangunahing paghihirap sa paglikha ng proyekto ay isang kalikasan ng organisasyon.

Mayroong isang grupo ng mga tao na tila marunong magprograma, ngunit hindi masyadong mahusay. May alam sila, pero hindi pa rin talaga nila mailalapat. At ngayon kailangan nilang tapusin ang proyekto sa isang buwan.

Nakilala ko ang isang conditional team leader sa grupong ito. Nag-iingat siya ng isang Google Doc na may listahan ng mga gawain, namamahagi ng mga gawain, at kinokontrol ang kanilang pagtanggap. Tinanggap din niya ang mga pull request.

Hiniling ko rin sa mga mag-aaral na magsulat ng maikling ulat tuwing gabi tungkol sa gawaing ginawa nila sa proyekto. Kung wala kang ginawa, ok, isulat lang ang "wala." Ito ay mahusay na pagsasanay at nakakapagpa-tense sa iyo. Hindi lahat ay sumunod sa panuntunang ito, sa kasamaang-palad.

Ang layunin ng lahat ng kilusang ito ay simple. Bumuo ng isang pangkat, kahit sa maikling panahon lamang, upang magtulungan.

Gusto kong maramdaman ng mga lalaki na mahalaga ang kanilang trabaho. Unawain na hindi sila nagsusulat ng spherical code sa isang vacuum. At ang ginagawa nilang magkasama ay isang proyekto na gagamitin ng mga tao.

Ang unang linggo o dalawa ay isang build-up. Ang mga entity at maliliit na commit ay ginawang mabagal. Unti-unti ko silang pinukaw, at naging mas masaya ang trabaho. Ang komunikasyon sa chat ay naging mas masigla, ang mga mag-aaral ay nag-alok ng kanilang mga karagdagan.

Naniniwala ako na ang layunin ay nakamit. Ang proyekto ay tapos na, ang mga lalaki ay nakakuha ng kaunting karanasan sa pagtatrabaho sa isang koponan. Mayroong isang nakikita, nasasalat na resulta na maaaring ipakita sa mga kaibigan at higit pang mapaunlad.

Natuklasan

Ang pag-aaral ay kawili-wili.

Pagkatapos ng bawat klase ay bumalik ako na puno ng emosyon. Sinusubukan kong gawing kakaiba ang bawat pares at maghatid ng maraming kaalaman hangga't maaari.

Ang sarap kapag umabot sa finals ang grupong tinuturuan ko. Ito ay lalong cool kapag ang mga lalaki ay sumulat ng "Mayroon akong trabaho, lahat ay maayos, salamat." Kahit na ito ay isang junior, kahit na hindi ito ang pinakamalaking pera sa simula. Ngunit ang pinakamahalagang bagay ay gumawa sila ng isang hakbang patungo sa kanilang mga hangarin, at nagtagumpay sila.

Bagaman ang artikulo ay naging napakalaki, tiyak na hindi posible na masakop ang lahat ng mga punto. Samakatuwid, isulat ang iyong mga katanungan sa mga komento.

Pinagmulan: www.habr.com

Magdagdag ng komento