E-Dobavki - huduma ya wavuti ya kutafuta viungio vya chakula katika Java na Spring Boot, iliyoandikwa na wanafunzi wangu

Utangulizi

Ilifanyika kwamba kwa karibu miaka miwili iliyopita nimekuwa nikifundisha programu katika shule moja ya IT huko Kyiv. Nilianza kufanya hivi Kwa Furaha tu. Wakati mmoja niliandika blogi ya programu, kisha nikaiacha. Lakini hamu ya kuwaambia mambo muhimu kwa watu wanaopendezwa haijaondoka.

Lugha yangu kuu ni Java. Niliandika michezo kwa ajili ya simu za mkononi, programu kwa ajili ya mawasiliano ya redio, na huduma mbalimbali za mtandao juu yake. Na mimi hufundisha Java.

Hapa nataka kusimulia hadithi ya mafunzo ya kikundi changu cha mwisho. Jinsi walivyotoka kuanza mafunzo hadi kuandika huduma ya wavuti inayofanya kazi. Huduma muhimu ya wavuti kwa ajili ya kutafuta virutubisho vya lishe. Bure, hakuna matangazo, usajili na SMS.

Huduma yenyewe iko hapa - E-Dobavki.com.

E-Dobavki - huduma ya wavuti ya kutafuta viungio vya chakula katika Java na Spring Boot, iliyoandikwa na wanafunzi wangu

Mradi huo ni wa kuelimisha na hauna matangazo yoyote. Kama ninavyoelewa kutoka uchapishaji huu, unaweza kutoa viungo kwa miradi kama hiyo.

Kabla ya kuelezea mradi wenyewe, nitakuambia kidogo juu ya mchakato wa kujifunza wa kikundi; bila hii, picha itakuwa haijakamilika.

Mafunzo ya miezi 9

Katika shule ninayofundisha, kozi ya Java imegawanywa katika sehemu 2. Kwa jumla, kozi inachukua takriban miezi 9, na mapumziko yote (likizo ya Mwaka Mpya, wakati wa kuandika miradi ya kati).

Sehemu ya kwanza inawafahamisha wanafunzi kuhusu dhana za kimsingi za lugha. Vigezo, mbinu, misingi ya OOP na mambo hayo yote.

Sehemu ya pili ya kozi hutoa kwamba mwanafunzi tayari anaelewa zaidi au chini jinsi ya kuandika katika Java, na anaweza kupewa stack ya teknolojia ya "watu wazima". Yote huanza na SQL, kisha JDBC, Hibernate. Kisha HTTP, servlets. Inayofuata ni Spring, kidogo juu ya git na maven. Na wanafunzi huandika miradi ya mwisho.

Mafunzo yote yamegawanywa katika moduli. Nilifanya madarasa mara mbili kwa wiki. Muda wa somo moja ni masaa mawili.

Mbinu yangu ya kujifunza

Nilitoa vikundi 5. Inaonekana kama mengi kwa miaka miwili, lakini karibu kila wakati niliongoza vikundi 2 sambamba.

Nimejaribu mbinu tofauti.

Chaguo la kwanza ni kwamba jozi moja imetengwa kwa uwasilishaji na nadharia. Jozi ya pili ni mazoezi safi. Njia hii kwa namna fulani ilifanya kazi, lakini haikuwa na ufanisi sana, kwa maoni yangu.

Chaguo la pili ambalo nilikuja na ambalo ninafanyia kazi sasa sio kutoa wanandoa wote kwa nadharia. Badala yake, ninachanganya sehemu fupi za nadharia kwa dakika 5-10, na mara moja huwaimarisha kwa mifano ya vitendo. Mbinu hii inafanya kazi vizuri zaidi.

Ikiwa kuna wakati wa kutosha, ninawaita wanafunzi mahali pangu, nikaketi kwenye kompyuta yangu ndogo, na wanafanya mifano ya vitendo wenyewe. Inafanya kazi nzuri, lakini kwa bahati mbaya inachukua muda mwingi.

Sio kila mtu anafika mwisho

Ufunuo kwangu ulikuwa ukweli kwamba sio kundi zima linafika mwisho wa kozi.

Kulingana na uchunguzi wangu, ni nusu tu ya wanafunzi wanaoandika mradi wa mwisho. Wengi wao huondolewa wakati wa sehemu ya kwanza ya kozi. Na wale ambao wamefikia sehemu ya pili kwa kawaida hawaanguki.

Wanaondoka kwa sababu mbalimbali.

Ya kwanza ni utata. Haijalishi wanasema nini, Java sio lugha rahisi zaidi. Kuandika hata mpango rahisi zaidi, unahitaji kuelewa dhana ya darasa, njia. Na kuelewa kwa nini unahitaji kuandika utupu tuli wa umma (String[] arg) Kuna dhana chache zaidi za kuelewa.

Linganisha hii na Turbo Pascal, ambayo ndio watu wengi walianza nayo, pamoja na mimi:

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

Nijuavyo, shule itatatua tatizo hili kwa kuanzisha majaribio ya ziada. Sasa sio kila mtu anayeweza kusoma Java. Hii bado iko katika hatua ya dhana, lakini hatua hiyo ni wazi kuwa ndiyo sahihi.

Na sababu ya pili ni kama kwenye picha hapa chini:

E-Dobavki - huduma ya wavuti ya kutafuta viungio vya chakula katika Java na Spring Boot, iliyoandikwa na wanafunzi wangu

Watu mara nyingi hufikiri kwamba programu ni kuhusu kuandika maandishi mengi na kupata pesa nyingi kwa ajili yake. Kama mwandishi wa nakala, pesa zaidi tu.

Ukweli ni tofauti kidogo. Nambari nyingi za kawaida, mende zisizo wazi, mchakato wa kujifunza mara kwa mara. Inavutia, lakini sio kwa kila mtu.

Hizi ni takwimu. Mwanzoni ilinikasirisha, nilifikiri kwamba labda nilikuwa nikifanya kitu kibaya. Sasa ninaelewa kuwa takwimu ni takriban sawa kwa kozi nyingi. Sasa sijali kuhusu hilo, lakini wafundishe wale watu wanaopendezwa nayo.

Wazo la huduma

Mara tu wanafunzi walipomaliza kozi nzima, ulikuwa wakati wa kuandika mradi wa mwisho. Kulikuwa na mawazo tofauti. Walitoa karatasi za ToDo, miradi ya usimamizi wa mradi, na kitu kingine.

Nilitaka kufanya kitu rahisi lakini muhimu. Kigezo changu kilikuwa rahisi - ikiwa mimi na marafiki zangu tungeweza kukitumia. Huduma ya wavuti ya kutafuta viongeza vya chakula ilikidhi mahitaji haya.

Wazo ni rahisi. Unaponunua bidhaa kwenye duka, unaona aina fulani ya nyongeza ya E katika muundo. Haijulikani wazi kutoka kwa msimbo jinsi ilivyo hatari au la (na pia kuna nyongeza hatari ambazo zimepigwa marufuku katika nchi nyingi).

Unafungua tovuti, ingiza jina la nyongeza (nambari, mojawapo ya majina mbadala), na kupata muhtasari wa nyongeza:

E-Dobavki - huduma ya wavuti ya kutafuta viungio vya chakula katika Java na Spring Boot, iliyoandikwa na wanafunzi wangu

Kuna miradi inayofanana. Unaweza pia kuandika kiongezi kwa Google, ingawa haionyeshi habari ipasavyo kila wakati.

Lakini kwa kuwa mradi huo ni wa kielimu, shida zilizo hapo juu hazikutuzuia :)

Utekelezaji

Kila mtu aliandika katika Java, msimbo wa chanzo wa mradi kwenye Github.

Tulikuwa 7, kutia ndani mimi. Kila mtu alitoa ombi la kuvuta, na mimi, au mtu mwingine kutoka kwa kikundi, akakubali ombi hili la kuvuta.

Utekelezaji wa mradi ulichukua takriban mwezi mmoja - kutoka kutoa wazo hadi hali unayoiona sasa.

Kuchanganua viungio

Jambo la kwanza ambalo mmoja wa wanafunzi alifanya, kando na uundaji wa msingi wa mfumo kuzunguka hifadhidata (vyombo, hazina, n.k.), ilikuwa kuchanganua nyongeza kutoka kwa tovuti iliyopo ya habari.

Hii ilikuwa muhimu ili kupima pointi zilizobaki. Hakuna msimbo wa ziada unaohitajika ili kujaza hifadhidata. Baada ya kuchanganua viongezeo kadhaa kwa haraka, tunaweza kujaribu zaidi UI, kupanga na kuchuja.

Boot ya Spring hukuruhusu kuunda wasifu nyingi. Wasifu ni faili iliyo na mipangilio.

Kwa mazingira ya dev, tulitumia wasifu ulio na H2 DBMS ya ndani na mlango chaguomsingi wa HTTP (8080). Kwa hivyo, kila wakati programu ilipozinduliwa, hifadhidata ilifutwa. Mchanganuzi katika kesi hii ndiye aliyetuokoa.

Tafuta na kuchuja

Jambo muhimu ni kutafuta na kuchuja. Mtu aliye dukani lazima abofye haraka msimbo wa nyongeza, au mojawapo ya majina, na apate matokeo.

Kwa hiyo, chombo cha Kuongeza kina nyanja kadhaa. Hii ndio nambari ya kuongeza, majina mbadala, maelezo. Utafutaji unafanywa kwa kutumia Like katika nyanja zote kwa wakati mmoja. Na ukiingia [123] au [amaranth], utapata matokeo sawa.

Tulifanya haya yote kwa kuzingatia Specifications. Hii ni sehemu ya Spring inayokuruhusu kuelezea masharti ya msingi ya utafutaji (kama vile sehemu fulani, kwa mfano), na kisha kuchanganya masharti haya (AU au NA).

Baada ya kuandika vipimo kadhaa, unaweza kuuliza maswali changamano kama "viongezeo vyote hatari vya kutia rangi ambavyo vina neno [nyekundu] katika maelezo."

Kwa upande wa kufanya kazi na hifadhidata ya Spring, naona ni rahisi sana. Hii ni kweli hasa wakati wa kufanya kazi na maswali magumu. Ninaelewa kuwa hii ina kichwa chake mwenyewe, na hoja iliyoandikwa na kuboreshwa ya SQL itaendesha haraka.

Lakini pia ninashikamana na maoni kwamba hakuna haja ya kuongeza kila kitu mapema. Toleo la kwanza lazima lianze, lifanye kazi, na kuruhusu uingizwaji wa sehemu za kibinafsi. Na ikiwa kuna mzigo, sehemu hizi za kibinafsi zinahitaji kuandikwa upya.

Usalama

Ni rahisi. Kuna watumiaji walio na jukumu la ADMIN - wanaweza kuhariri nyongeza, kuzifuta na kuongeza mpya.

Na kuna watumiaji wengine (waliosajiliwa au la). Wanaweza tu kuvinjari orodha ya nyongeza na kutafuta zile wanazohitaji.

Usalama wa Spring ulitumiwa kutenganisha haki. Data ya mtumiaji huhifadhiwa kwenye hifadhidata.

Watumiaji wanaweza kujiandikisha. Sasa haitoi chochote. Ikiwa wanafunzi wataendelea kukuza huduma na kuanzisha baadhi ya vipengele vilivyobinafsishwa, basi usajili utasaidia.

Mwitikio na Bootstrap

Jambo linalofuata ni kubadilika. Kwa upande wa huduma yetu (angalau jinsi tulivyoiona), watumiaji wengi watakuwa na simu za rununu. Na unahitaji kutazama haraka nyongeza kutoka kwa simu yako ya rununu.

Ili tusiteseke na CSS, tulichukua Bootstrap. Nafuu, furaha, na inaonekana heshima.

Siwezi kuita kiolesura kuwa bora. Ukurasa kuu ni mdogo zaidi, na ukurasa wa maelezo ya kina ya nyongeza ni nyembamba; kwenye simu za rununu inahitaji kufanywa kwa upana.

Ninaweza kusema tu kwamba nilijaribu kuingilia kazi kidogo iwezekanavyo. Huu bado ni mradi wa wanafunzi. Na kwa kweli, wavulana wataweza kusahihisha wakati kama huo baadaye.

Dakika ya Uboreshaji wa SEO

Kwa kuwa nimehusika kwa karibu katika tovuti na kila kitu kinachohusiana na SEO kwa zaidi ya miaka miwili, sikuweza kutoa mradi bila angalau uboreshaji wa msingi wa SEO.

Kwa kweli, nilitengeneza kizazi cha kiolezo cha Kichwa na Maelezo kwa kila kiongezi. URL ni karibu CNC, ingawa inaweza kufanywa fupi.

Pia niliongeza kaunta za mahudhurio. Aliongeza tovuti kwenye Yandex Webmaster na Google Search Console ili kufuatilia maonyo kutoka kwa injini za utafutaji.

Haitoshi. Pia unahitaji kuongeza robots.txt na sitemap.xml kwa indexing kamili. Lakini tena, huu ni mradi wa wanafunzi. Nitawaambia kile kinachohitajika kufanywa, na ikiwa wanataka, watafanya.

Unahitaji kuambatisha cheti cha SSL. Tusimbe Fiche bila malipo pia itafanya kazi. Nilifanya hivi kwa Spring Boot. Si vigumu kufanya, na imani ya PS huongezeka.

Nini kinafuata kwa mradi?

Kisha, kwa kweli, uchaguzi ni juu ya wavulana. Wazo la asili la mradi pia lilijumuisha hifadhidata ya bidhaa zilizo na viungo vya nyongeza.

Ingiza "Snickers" na uone ni viongeza vya lishe vilivyomo.

Hata mwanzoni mwa mradi huo, nilijua kwamba hatutakuwa na bidhaa yoyote :) Kwa hiyo, tulianza tu na viongeza.

Sasa unaweza kuongeza bidhaa na kuanzisha zingine. buns. Ikiwa ni hifadhidata pana, kutakuwa na watumiaji.

Kupelekwa

Mradi uliwekwa kwenye VPS, Aruba Cloud. Hii ndio VPS ya bei rahisi zaidi tunaweza kupata. Nimekuwa nikitumia mtoa huduma huyu kwa zaidi ya mwaka mmoja kwa miradi yangu, na nimefurahishwa nayo.

Tabia za VPS: 1 GB RAM, 1 CPU (sijui kuhusu mzunguko), 20 GB SSD. Kwa mradi wetu hii inatosha.

Mradi unajengwa kwa kutumia kifurushi cha kawaida cha mvn safi. Matokeo yake ni jarida la mafuta - faili inayoweza kutekelezwa na utegemezi wote.

Ili kuhariri haya yote kidogo, niliandika maandishi kadhaa ya bash.

Hati ya kwanza hufuta faili ya jar ya zamani na kuunda mpya.

Nakala ya pili inazindua jar iliyokusanyika, ikipitisha jina la wasifu unaohitajika. Wasifu huu una maelezo ya muunganisho wa hifadhidata.

DB - MySQL kwenye VPS sawa.

Jumla ya kuanza upya kwa mradi ni pamoja na:

  • ingia kwenye VPS kupitia SSH
  • pakua mabadiliko ya hivi karibuni ya git
  • endesha local-jar.sh
  • kuua programu inayoendesha
  • endesha uzinduzi-uzalishaji.sh

Utaratibu huu unachukua dakika tatu. Hii inaonekana kama chaguo nzuri kwangu kwa mradi mdogo kama huo.

Ugumu

Shida kuu katika kuunda mradi huo zilikuwa za asili ya shirika.

Kuna kundi la watu ambao wanaonekana kujua jinsi ya kupanga, lakini si vizuri sana. Wanajua kitu, lakini bado hawawezi kuitumia. Na sasa wanahitaji kukamilisha mradi kwa mwezi.

Nilimtambua kiongozi wa timu mwenye masharti katika kundi hili. Alihifadhi Hati ya Google iliyo na orodha ya kazi, kazi zilizosambazwa, na kudhibiti kukubalika kwao. Pia alikubali maombi ya kuvuta.

Pia niliwaomba wanafunzi waandike ripoti fupi kila jioni kuhusu kazi waliyofanya kwenye mradi huo. Ikiwa haukufanya chochote, sawa, andika tu "hakufanya chochote." Haya ni mazoezi mazuri na hukupa wasiwasi kidogo. Sio kila mtu alifuata sheria hii, kwa bahati mbaya.

Kusudi la harakati hizi zote lilikuwa rahisi. Unda timu, hata ikiwa ni kwa muda mfupi tu, ili kufanya kazi pamoja.

Nilitaka wavulana wahisi kuwa kazi yao ilikuwa muhimu. Elewa kwamba hawaandiki msimbo wa duara katika utupu. Na wanachofanya pamoja ni mradi ambao watu watautumia basi.

Wiki ya kwanza au mbili ilikuwa ya kujenga. Mashirika na ahadi ndogo zilifanywa kwa uvivu. Kidogo niliwachochea, na kazi ikawa ya kufurahisha zaidi. Mawasiliano kwenye gumzo yakawa hai, wanafunzi walitoa nyongeza zao.

Ninaamini kuwa lengo limefikiwa. Mradi umekamilika, wavulana walipata uzoefu mdogo wa kufanya kazi katika timu. Kuna matokeo yanayoonekana, yanayoonekana ambayo yanaweza kuonyeshwa kwa marafiki na kuendelezwa zaidi.

Matokeo

Kujifunza ni ya kuvutia.

Baada ya kila darasa nilirudi nikiwa nimechanganyikiwa kihisia. Ninajaribu kufanya kila jozi ya kipekee na kuwasilisha maarifa mengi iwezekanavyo.

Inapendeza kundi ninalofundisha linapofika fainali. Inapendeza sana wavulana wanapoandika "Nimepata kazi, kila kitu kiko sawa, asante." Hata kama ni mdogo, hata kama sio pesa kubwa mwanzoni. Lakini jambo muhimu zaidi ni kwamba walichukua hatua kuelekea matamanio yao, na walifanikiwa.

Ingawa makala hiyo iligeuka kuwa nyingi sana, kwa hakika haikuwezekana kuzungumzia mambo yote. Kwa hivyo, andika maswali yako kwenye maoni.

Chanzo: mapenzi.com

Kuongeza maoni