E-Dobavki - վեբ ծառայություն սննդային հավելումների որոնման համար Java-ում և Spring Boot-ում, գրված իմ ուսանողների կողմից

Ներածություն

Այնպես եղավ, որ վերջին գրեթե երկու տարին ես ծրագրավորում եմ դասավանդում Կիևի ՏՏ դպրոցներից մեկում։ Ես սկսեցի դա անել պարզապես զվարճանքի համար: Մի անգամ ծրագրավորման բլոգ եմ գրել, հետո հրաժարվել եմ դրանից: Սակայն հետաքրքրված մարդկանց օգտակար բաներ պատմելու ցանկությունը չի վերացել։

Իմ հիմնական լեզուն Java-ն է: Դրանց վրա ես գրում էի խաղեր բջջային հեռախոսների համար, ծրագրային ապահովում ռադիոկապի համար և տարբեր վեբ ծառայություններ: Եվ ես դասավանդում եմ Java:

Այստեղ ես ուզում եմ պատմել իմ վերջին խմբի մարզումների պատմությունը։ Ինչպես են նրանք վերապատրաստում սկսելուց մինչև աշխատանքային վեբ ծառայություն գրելը: Օգտակար վեբ ծառայություն սննդային հավելումներ գտնելու համար: Անվճար, առանց գովազդի, գրանցման և SMS:

Ծառայությունն ինքնին այստեղ է - E-Dobavki.com.

E-Dobavki - վեբ ծառայություն սննդային հավելումների որոնման համար Java-ում և Spring Boot-ում, գրված իմ ուսանողների կողմից

Նախագիծը կրթական է և չի պարունակում որևէ գովազդ։ Ինչպես հասկանում եմ այս հրապարակումը, կարող եք նման նախագծերի հղումներ տրամադրել։

Նախքան նախագիծն ինքնին նկարագրելը, ես ձեզ մի փոքր կպատմեմ խմբի ուսուցման գործընթացի մասին, առանց դրա պատկերը թերի կլինի:

9 ամիս ուսուցում

Այն դպրոցում, որտեղ ես դասավանդում եմ, Java դասընթացը բաժանված է 2 մասի. Ընդհանուր առմամբ, դասընթացը տևում է մոտավորապես 9 ամիս՝ բոլոր ընդմիջումներով (ամանորյա արձակուրդներ, միջանկյալ նախագծեր գրելու ժամանակ):

Առաջին մասը ուսանողներին ծանոթացնում է լեզվի հիմնական հասկացություններին: Փոփոխականներ, մեթոդներ, OOP հիմունքներ և այդ ամենը:

Դասընթացի երկրորդ մասը նախատեսում է, որ ուսանողն արդեն քիչ թե շատ հասկանում է, թե ինչպես գրել Java-ով, և նրան կարող են տրվել «մեծահասակների» տեխնոլոգիական փաթեթ: Ամեն ինչ սկսվում է SQL-ից, հետո JDBC-ից, Hibernate-ից: Հետո HTTP, սերվիլետներ։ Հաջորդը Գարունն է, մի փոքր git-ի և maven-ի մասին: Իսկ ուսանողները գրում են վերջնական նախագծեր:

Բոլոր դասընթացները բաժանված են մոդուլների: Շաբաթը երկու անգամ պարապում էի։ Մեկ պարապմունքի տևողությունը երկու ժամ է։

Սովորելու իմ մոտեցումը

Ես թողարկեցի 5 խումբ. Թվում է, թե երկու տարի շատ է, բայց ես գրեթե միշտ զուգահեռ 2 խումբ եմ ղեկավարել։

Ես փորձել եմ տարբեր մոտեցումներ:

Առաջին տարբերակն այն է, որ մեկ զույգ հատկացվում է տեսությամբ ներկայացման համար։ Երկրորդ զույգը մաքուր պրակտիկա է: Այս մոտեցումը ինչ-որ կերպ աշխատեց, բայց այնքան էլ արդյունավետ չէր, իմ կարծիքով։

Երկրորդ տարբերակը, որին ես եկել եմ, և որի վրա հիմա աշխատում եմ, մի ամբողջ զույգ տեսությանը չնվիրելն է։ Փոխարենը ես 5-10 րոպե խառնում եմ տեսության կարճ հատվածները և անմիջապես ամրապնդում դրանք գործնական օրինակներով։ Այս մոտեցումն ավելի լավ է աշխատում:

Եթե ​​բավական ժամանակ է լինում, ես ուսանողներին կանչում եմ իմ մոտ, նստեցնում եմ նոթբուքիս մոտ և նրանք իրենք են գործնական օրինակներ անում։ Այն հիանալի է աշխատում, բայց, ցավոք, շատ ժամանակ է պահանջում:

Ոչ բոլորն են հասնում մինչև վերջ

Ինձ համար բացահայտում էր այն փաստը, որ ամբողջ խումբը չէ, որ հասնում է դասընթացի ավարտին:

Իմ դիտարկումներով՝ ուսանողների միայն կեսն է գրում վերջնական նախագիծը։ Դրանց մեծ մասը վերացվում է դասընթացի առաջին մասի ընթացքում։ Եվ նրանք, ովքեր հասել են երկրորդ մասին, սովորաբար չեն ընկնում:

Նրանք հեռանում են տարբեր պատճառներով։

Առաջինը բարդությունն է: Ինչ էլ ասեն, Java-ն ամենապարզ լեզուն չէ։ Նույնիսկ ամենապարզ ծրագիր գրելու համար պետք է հասկանալ դասի, մեթոդի հասկացությունը։ Եվ հասկանալու համար, թե ինչու է պետք գրել հանրային ստատիկ դատարկ հիմնական (String[] arg) Հասկանալու ևս մի քանի հասկացություն կա:

Համեմատեք սա Turbo Pascal-ի հետ, ինչով սկսեցին շատ մարդիկ, ներառյալ ես.

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

Որքան գիտեմ, դպրոցը այս խնդիրը կլուծի լրացուցիչ թեստավորում մտցնելով։ Այժմ ոչ բոլորը կկարողանան Java-ն ուսումնասիրել։ Սա դեռ հայեցակարգի փուլում է, բայց քայլն ակնհայտորեն ճիշտ է։

Իսկ երկրորդ պատճառը նման է ստորև նկարում.

E-Dobavki - վեբ ծառայություն սննդային հավելումների որոնման համար Java-ում և Spring Boot-ում, գրված իմ ուսանողների կողմից

Մարդիկ հաճախ մտածում են, որ ծրագրավորումը շատ տեքստ հավաքելն է և դրա համար մեծ գումար ստանալը: Ինչպես copywriter-ը, միայն ավելի շատ գումար:

Իրականությունը մի փոքր այլ է. Շատ սովորական կոդ, անհայտ սխալներ, մշտական ​​ուսուցման գործընթաց: Հետաքրքիր է, բայց ոչ բոլորի համար:

Սրանք վիճակագրություն են։ Սկզբում դա ինձ վրդովեցրեց, մտածեցի, որ միգուցե սխալ եմ անում։ Այժմ ես հասկանում եմ, որ վիճակագրությունը մոտավորապես նույնն է դասընթացների մեծ մասի համար: Հիմա ես չեմ անհանգստանում դրա համար, բայց սովորեցնում եմ այն ​​մարդկանց, ովքեր հետաքրքրված են դրանով:

Ծառայության գաղափարը

Երբ ուսանողները ավարտեցին ամբողջ դասընթացը, ժամանակն էր գրելու վերջնական նախագիծը: Տարբեր մտքեր կային։ Նրանք առաջարկեցին ToDo թերթեր, նախագծերի կառավարման նախագծեր և այլ բան:

Ես ուզում էի մի պարզ, բայց օգտակար բան անել: Իմ չափանիշը պարզ էր՝ արդյոք ես և ընկերներս կարող ենք օգտվել դրանից: Սննդային հավելումների որոնման վեբ ծառայությունը համապատասխանում էր այս պահանջներին:

Գաղափարը պարզ է. Խանութում ապրանք գնելիս բաղադրության մեջ տեսնում եք ինչ-որ էլեկտրոնային հավելում: Կոդից պարզ չէ, թե որքանով է դա վտանգավոր, թե ոչ (և կան նաև վտանգավոր հավելումներ, որոնք արգելված են շատ երկրներում):

Դուք բացում եք կայքը, մուտքագրում եք հավելվածի անվանումը (համարը, այլընտրանքային անուններից մեկը) և ստանում եք հավելվածի ամփոփագիրը.

E-Dobavki - վեբ ծառայություն սննդային հավելումների որոնման համար Java-ում և Spring Boot-ում, գրված իմ ուսանողների կողմից

Նմանատիպ նախագծեր կան։ Կարող եք նաև պարզապես մուտքագրել հավելումը Google-ում, թեև այն միշտ չէ, որ ճիշտ է ցույց տալիս տեղեկատվությունը:

Բայց քանի որ նախագիծը կրթական է, վերը նշված դժվարությունները մեզ չխանգարեցին :)

Իրականացման

Բոլորը գրել են Java-ում, Ծրագրի սկզբնական կոդը Github-ում.

Մենք 7 հոգի էինք, այդ թվում՝ ես։ Բոլորը քաշքշելու խնդրանք արեցին, և ես, կամ խմբի մեկ այլ անձ, ընդունեցինք այս խնդրանքը:

Ծրագրի իրականացումը տևեց մոտ մեկ ամիս՝ գաղափարը հնչեցնելուց մինչև այն վիճակը, որը հիմա տեսնում եք։

Վերլուծող հավելումներ

Առաջին բանը, ինչ արեց ուսանողներից մեկը, բացի տվյալների բազայի (առարկաներ, պահոցներ և այլն) շուրջ հիմնարար շրջանակ ստեղծելուց, գոյություն ունեցող տեղեկատվական կայքի հավելումների վերլուծությունն էր:

Սա անհրաժեշտ էր մնացած կետերը ստուգելու համար։ Տվյալների բազան համալրելու համար լրացուցիչ կոդ չի պահանջվում: Մի քանի հավելումներ արագ վերլուծելով՝ մենք կարող էինք հետագայում փորձարկել միջերեսը, տեսակավորումը և զտումը:

Spring Boot-ը թույլ է տալիս ստեղծել բազմաթիվ պրոֆիլներ: Պրոֆիլը կարգավորումներով ֆայլ է:

Մշակողի միջավայրի համար մենք օգտագործեցինք պրոֆիլ՝ տեղական H2 DBMS-ով և լռելյայն HTTP պորտով (8080): Այսպիսով, ամեն անգամ, երբ հավելվածը գործարկվում էր, տվյալների բազան մաքրվում էր։ Այս դեպքում վերլուծողը մեզ փրկեց։

Որոնում և զտում

Կարևոր կետը որոնումն ու զտումն է: Խանութում գտնվող մարդը պետք է արագ սեղմի հավելվածի կոդը կամ անուններից մեկը և ստանա արդյունքը։

Հետևաբար, հավելանյութն ունի մի քանի դաշտ: Սա հավելման ծածկագիր է, այլընտրանքային անուններ, նկարագրություն: Որոնումն իրականացվում է Like-ի միջոցով միաժամանակ բոլոր դաշտերում։ Եվ եթե մուտքագրեք [123] կամ [amaranth], դուք կստանաք նույն արդյունքը:

Այս ամենը մենք արել ենք՝ հիմնվելով Տեխնիկական պայմանների վրա: Սա Spring-ի մի մասն է, որը թույլ է տալիս նկարագրել որոնման հիմնական պայմանները (օրինակ, որոշ դաշտեր), այնուհետև համատեղել այս պայմանները (OR կամ AND):

Գրելով մեկ տասնյակ բնութագրեր, դուք կարող եք կատարել բարդ հարցումներ, ինչպիսիք են «բոլոր վտանգավոր գունազարդման հավելումները, որոնք նկարագրության մեջ ունեն [կարմիր] բառը»:

Spring շտեմարանի հետ աշխատելու առումով շատ հարմար եմ գտնում։ Սա հատկապես ճիշտ է բարդ հարցումների հետ աշխատելիս: Ես հասկանում եմ, որ սա ունի իր սեփական ծախսերը, և ձեռքով գրված և օպտիմիզացված SQL հարցումն ավելի արագ կաշխատի:

Բայց ես հավատարիմ եմ նաև այն տեսակետին, որ ամեն ինչ նախապես օպտիմալացնելու կարիք չկա։ Առաջին տարբերակը պետք է սկսվի, աշխատի և թույլ տա առանձին մասերի փոխարինում: Եվ եթե կա ծանրաբեռնվածություն, ապա այս առանձին մասերը պետք է վերաշարադրվեն:

Անվտանգություն

Դա պարզ է. Կան ADMIN դեր ունեցող օգտատերեր. նրանք կարող են խմբագրել լրացումները, ջնջել դրանք և ավելացնել նորերը:

Եվ կան այլ օգտվողներ (գրանցված կամ ոչ): Նրանք կարող են միայն թերթել հավելումների ցանկը և փնտրել իրենց անհրաժեշտը:

Spring Security-ն օգտագործվել է իրավունքների առանձնացման համար: Օգտագործողի տվյալները պահվում են տվյալների բազայում:

Օգտատերերը կարող են գրանցվել։ Հիմա դա ոչինչ չի տալիս։ Եթե ​​ուսանողները շարունակեն զարգացնել ծառայությունը և ներդնել որոշ անհատականացված գործառույթներ, ապա գրանցումը օգտակար կլինի:

Պատասխանատվություն և Bootstrap

Հաջորդ կետը հարմարվողականությունն է: Մեր ծառայության դեպքում (գոնե այնպես, ինչպես մենք տեսանք), օգտատերերի մեծամասնությունը կլինի բջջային հեռախոսներով։ Եվ դուք պետք է արագ դիտեք հավելվածը ձեր բջջային հեռախոսից:

CSS-ով չտուժելու համար վերցրինք Bootstrap-ը։ Էժան, կենսուրախ և պարկեշտ տեսք ունի:

Ես չեմ կարող ինտերֆեյսը իդեալական անվանել: Հիմնական էջը նույնիսկ ավելի քիչ է, իսկ հավելման մանրամասն նկարագրության էջը նեղ է, բջջային հեռախոսներում այն ​​պետք է ավելի լայնացնել:

Միայն կարող եմ ասել, որ փորձել եմ հնարավորինս քիչ միջամտել աշխատանքին։ Սա դեռ ուսանողական նախագիծ է։ Եվ իհարկե, տղաները կկարողանան ավելի ուշ շտկել նման պահերը։

SEO օպտիմիզացման րոպե

Քանի որ ես սերտորեն ներգրավված եմ կայքերում և SEO-ի հետ կապված ամեն ինչի հետ ավելի քան երկու տարի, ես չէի կարող նախագիծ թողարկել առանց առնվազն հիմնական SEO-ի օպտիմալացման:

Փաստորեն, ես ստեղծել եմ վերնագրի և նկարագրության ձևանմուշների սերունդ յուրաքանչյուր հավելման համար: URL-ը գրեթե CNC է, թեև այն կարելի է ավելի կարճ դարձնել:

Ավելացրի նաև հաճախումների հաշվիչներ: Կայքն ավելացրել է Yandex Webmaster-ին և Google Search Console-ին՝ որոնման համակարգերի զգուշացումները վերահսկելու համար:

Դա բավարար չէ։ Ամբողջական ինդեքսավորման համար անհրաժեշտ է նաև ավելացնել robots.txt և sitemap.xml: Բայց դարձյալ սա ուսանողական նախագիծ է։ Ես իրենց կասեմ, թե ինչ է պետք անել, եթե ցանկանան, կանեն։

Դուք պետք է կցեք SSL վկայագիր: Անվճար Let's Encrypt-ը նույնպես կաշխատի: Ես դա արեցի Spring Boot-ի համար: Դժվար չէ դա անել, իսկ ՀԾ-ի վստահությունը մեծանում է։

Ի՞նչ է սպասվում նախագծին:

Հետո, փաստորեն, ընտրությունը տղաներինն է։ Նախագծի սկզբնական գաղափարը ներառում էր նաև ապրանքների տվյալների բազա՝ հավելումների հղումներով:

Մուտքագրեք «Snickers» և տեսեք, թե ինչ սննդային հավելումներ է այն պարունակում:

Նույնիսկ նախագծի սկզբում ես գիտեի, որ ապրանք չենք ունենալու :) Հետևաբար, մենք սկսեցինք միայն հավելումներով:

Այժմ դուք կարող եք ավելացնել ապրանքներ և ներկայացնել լրացուցիչ: բուլկիներ. Եթե ​​դա ծավալուն տվյալների բազա է, ապա կլինեն օգտվողներ:

Տեղակայում

Նախագիծը տեղակայվել է VPS-ում, Aruba Cloud-ում: Սա ամենաէժան VPS-ն է, որը մենք կարող էինք գտնել: Ես օգտագործում եմ այս մատակարարն ավելի քան մեկ տարի իմ նախագծերի համար, և ես հաճելիորեն գոհ եմ դրանից:

VPS բնութագրերը՝ 1 ԳԲ օպերատիվ հիշողություն, 1 պրոցեսոր (հաճախականության մասին չգիտեմ), 20 ԳԲ SSD: Մեր նախագծի համար սա բավական է։

Նախագիծը կառուցված է սովորական mvn մաքուր փաթեթի միջոցով: Արդյունքը ճարպային բանկա է՝ գործարկվող ֆայլ՝ բոլոր կախվածություններով:

Այս ամենը մի փոքր ավտոմատացնելու համար ես մի երկու բաշ սցենար գրեցի։

Առաջին սցենարը ջնջում է հին jar ֆայլը և կառուցում նորը:

Երկրորդ սցենարը գործարկում է հավաքված սափորը՝ փոխանցելով նրան անհրաժեշտ պրոֆիլի անունը: Այս պրոֆիլը պարունակում է տվյալների բազայի միացման տեղեկատվություն:

DB - MySQL նույն VPS-ի վրա:

Ծրագրի ընդհանուր վերագործարկումը ներառում է.

  • մուտք գործեք VPS SSH-ի միջոցով
  • ներբեռնեք git-ի վերջին փոփոխությունները
  • վարել տեղային-ջար.շ
  • սպանել գործարկվող հավելվածը
  • գործարկել launch-production.sh

Այս ընթացակարգը տևում է երեք րոպե: Սա ինձ թվում է խելացի ընտրություն նման փոքր նախագծի համար:

Դժվարություններ

Նախագծի ստեղծման հիմնական դժվարությունները կազմակերպչական բնույթ էին կրում։

Մարդկանց մի խումբ կա, որը կարծես ծրագրավորել գիտի, բայց ոչ այնքան լավ: Նրանք ինչ-որ բան գիտեն, բայց դեռ չեն կարողանում իրականում կիրառել այն: Իսկ հիմա նրանք պետք է մեկ ամսից ավարտեն նախագիծը։

Այս խմբում ես բացահայտեցի պայմանական թիմի ղեկավար: Նա պահում էր Google Doc՝ առաջադրանքների ցանկով, բաշխում էր առաջադրանքները և վերահսկում դրանց ընդունումը: Նա նաև ընդունել է քաշքշուկի պահանջները:

Ես նաև խնդրեցի ուսանողներին ամեն երեկո կարճ զեկույց գրել նախագծի վրա իրենց կատարած աշխատանքի մասին: Եթե ​​ոչինչ չեք արել, լավ, պարզապես գրեք «ոչինչ չարեց»: Սա հիանալի պրակտիկա է և ձեզ մի փոքր լարում է: Ոչ բոլորն են հետևել այս կանոնին, ցավոք սրտի:

Այս ամբողջ շարժման նպատակը պարզ էր. Ստեղծեք թիմ, թեկուզ կարճ ժամանակով, միասին աշխատելու համար:

Ես ուզում էի, որ տղաները զգան, որ իրենց աշխատանքը կարևոր է։ Հասկացեք, որ նրանք վակուումում գնդաձև ծածկագիր չեն գրում: Եվ այն, ինչ նրանք անում են միասին, նախագիծ է, որից հետո մարդիկ կօգտագործեն:

Առաջին կամ երկու շաբաթը կուտակում էր: Սուբյեկտներն ու փոքր պարտավորությունները դանդաղորեն են կատարվել: Կամաց-կամաց ես նրանց խառնեցի, և աշխատանքն ավելի զվարճալի դարձավ։ Զրուցարանում շփումն ավելի աշխույժ դարձավ, ուսանողներն առաջարկեցին իրենց լրացումները:

Ես հավատում եմ, որ նպատակը իրականացվել է։ Նախագիծն ավարտված է, տղաները թիմում աշխատելու փոքր փորձ ստացան։ Կա տեսանելի, շոշափելի արդյունք, որը կարելի է ցույց տալ ընկերներին և հետագայում զարգացնել:

Արդյունքները

Սովորելը հետաքրքիր է։

Յուրաքանչյուր դասից հետո ես վերադառնում էի էմոցիոնալ գրգռված: Փորձում եմ յուրաքանչյուր զույգը յուրահատուկ դարձնել և հնարավորինս շատ գիտելիքներ փոխանցել:

Հաճելի է, երբ իմ դասավանդած խումբը հասնում է եզրափակիչ: Հատկապես հաճելի է, երբ տղաները գրում են «Ես աշխատանք գտա, ամեն ինչ լավ է, շնորհակալություն»: Նույնիսկ եթե դա կրտսեր է, նույնիսկ եթե սկզբում դա ամենամեծ գումարը չէ: Բայց ամենակարեւորն այն է, որ նրանք քայլ արեցին դեպի իրենց ցանկությունները, և դա նրանց հաջողվեց։

Թեեւ հոդվածը բավականին ծավալուն է ստացվել, սակայն, իհարկե, հնարավոր չի եղել անդրադառնալ բոլոր կետերին։ Ուստի ձեր հարցերը գրեք մեկնաբանություններում։

Source: www.habr.com

Добавить комментарий