Е-Добавки - веб-услуга за пребарување на адитиви за храна во Java и Spring Boot, напишана од моите студенти

Вовед

Така се случи во последните речиси две години да предавам програмирање во едно од ИТ училиштата во Киев. Почнав да го правам ова Само за забава. Еднаш напишав блог за програмирање, а потоа се откажав од него. Но, желбата да им се кажуваат корисни работи на заинтересираните не исчезнала.

Мојот главен јазик е Java. На него пишував игри за мобилни телефони, софтвер за радио комуникации и разни веб сервиси. И јас предавам Јава.

Овде сакам да ја раскажам приказната за тренингот на мојата последна група. Како поминаа од започнување со обука до пишување работен веб сервис. Корисна веб-услуга за наоѓање додатоци во исхраната. Бесплатно, без рекламирање, регистрација и СМС.

Самата услуга е тука - E-Dobavki.com.

Е-Добавки - веб-услуга за пребарување на адитиви за храна во Java и Spring Boot, напишана од моите студенти

Проектот е едукативен и не содржи никаква реклама. Како што разбрав од оваа публикација, можете да обезбедите линкови до такви проекти.

Пред да го опишам самиот проект, ќе ви кажам малку за процесот на учење на групата; без ова, сликата ќе биде нецелосна.

9 месеци обука

Во училиштето каде што предавам, курсот Јава е поделен на 2 дела. Севкупно, курсот трае приближно 9 месеци, со сите паузи (новогодишни празници, време за пишување средно проекти).

Првиот дел ги запознава учениците со основните поими на јазикот. Променливи, методи, основи на OOP и сите тие работи.

Вториот дел од курсот предвидува дека студентот веќе повеќе или помалку разбира како да пишува во Java и може да му се даде технолошки стек за „возрасни“. Сè започнува со SQL, потоа JDBC, Hibernate. Потоа HTTP, сервлети. Следна е пролетта, малку за git и maven. А учениците пишуваат финални проекти.

Целата обука е поделена на модули. Водев часови двапати неделно. Времетраењето на еден час е два часа.

Мојот пристап кон учењето

Издадов 5 групи. Изгледа како многу за две години, но речиси секогаш водев 2 групи паралелно.

Пробав различни пристапи.

Првата опција е еден пар да биде распределен за презентација со теорија. Вториот пар е чиста пракса. Овој пристап некако функционираше, но според мене не беше многу ефикасен.

Втората опција до која дојдов и на која работам сега е да не посветам цел пар на теорија. Наместо тоа, мешам кратки делови од теоријата 5-10 минути и веднаш ги зајакнувам со практични примери. Овој пристап функционира подобро.

Ако има доволно време, ги повикувам студентите кај мене, ги седнувам на мојот лаптоп и тие самите прават практични примери. Работи одлично, но за жал е потребно многу време.

Не секој оди до крај

Откровение за мене беше фактот што целата група не стигнува до крајот на курсот.

Според моите согледувања, само половина од учениците го пишуваат финалниот проект. Повеќето од нив се елиминираат во текот на првиот дел од курсот. И оние кои стигнале до вториот дел обично не паѓаат.

Тие заминуваат од различни причини.

Првиот е комплексноста. Што и да велат, Java не е наједноставниот јазик. За да напишете дури и наједноставна програма, треба да го разберете концептот на класа, метод. И за да разберете зошто треба да пишувате јавна статична празнина главна (Низа[] arg) Има уште неколку концепти за разбирање.

Споредете го ова со Турбо Паскал, со што започнаа многу луѓе, вклучувајќи ме и мене:

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

Колку што знам, училиштето ќе го реши овој проблем со воведување на дополнително тестирање. Сега не секој може да учи Јава. Ова е сè уште во фаза на концепт, но чекорот е очигледно вистинскиот.

А втората причина е како на сликата подолу:

Е-Добавки - веб-услуга за пребарување на адитиви за храна во Java и Spring Boot, напишана од моите студенти

Луѓето често мислат дека програмирањето е да пишувате многу текст и да добиете многу пари за тоа. Како копирајтер, само повеќе пари.

Реалноста е малку поинаква. Многу рутински код, неочигледни грешки, постојан процес на учење. Интересно е, но не за секого.

Ова се статистиките. Отпрвин ме вознемири, мислев дека можеби правам нешто погрешно. Сега разбирам дека статистиката е приближно иста за повеќето курсеви. Сега не се грижам за тоа, туку научете ги оние луѓе кои се заинтересирани за тоа.

Идеја за услуга

Откако студентите го завршија целиот курс, дојде време да се напише финалниот проект. Имаше различни идеи. Тие понудија листови ToDo, проекти за управување со проекти и нешто друго.

Сакав да направам нешто едноставно, но корисно. Мојот критериум беше едноставен - дали јас и моите пријатели можеме да го искористиме. Веб-услугата за пребарување на адитиви за храна ги исполни овие барања.

Идејата е едноставна. Кога купувате производ во продавница, гледате некој вид Е-адитив во составот. Од кодот не е јасно колку е опасно или не (а има и опасни адитиви кои се забранети во многу земји).

Ја отворате веб-страницата, го внесувате името на додатокот (број, едно од алтернативните имиња) и добивате резиме на додатокот:

Е-Добавки - веб-услуга за пребарување на адитиви за храна во Java и Spring Boot, напишана од моите студенти

Има слични проекти. Можете исто така едноставно да го напишете додатокот во Google, иако не секогаш правилно ги прикажува информациите.

Но, бидејќи проектот е едукативен, тешкотиите погоре не не спречија :)

Реализация

Сите пишуваа на Јава, изворниот код на проектот на Github.

Бевме 7, меѓу кои и јас. Сите направија барање за повлекување, а јас или друго лице од групата го прифативме ова барање за повлекување.

Имплементацијата на проектот траеше околу еден месец - од искажување на идејата до состојбата што ја гледате сега.

Адитиви за парсирање

Првото нешто што еден од студентите го направи, покрај основното креирање рамка околу базата на податоци (ентитети, складишта, итн.), беше парсирање на додатоци од постоечка информативна локација.

Ова беше неопходно за да се тестираат преостанатите точки. Не е потребен дополнителен код за пополнување на базата на податоци. Откако брзо анализиравме неколку адитиви, можевме дополнително да го тестираме корисничкиот интерфејс, сортирањето и филтрирањето.

Spring Boot ви овозможува да креирате повеќе профили. Профилот е датотека со поставки.

За околината на dev, користевме профил со локален H2 DBMS и стандардна HTTP порта (8080). Така, секој пат кога апликацијата беше лансирана, базата на податоци беше исчистена. Парсерот во овој случај беше она што не спаси.

Пребарување и филтрирање

Важна точка е пребарувањето и филтрирањето. Едно лице во продавница мора брзо да кликне на кодот на додатокот, или едно од имињата и да го добие резултатот.

Затоа, ентитетот Адитив има неколку полиња. Ова е кодот за додаток, алтернативни имиња, опис. Пребарувањето се врши со користење Like во сите полиња истовремено. И ако внесете [123] или [амарант], ќе го добиете истиот резултат.

Сето ова го направивме врз основа на Спецификациите. Ова е дел од Spring кој ви овозможува да ги опишете основните услови за пребарување (како некое поле, на пример), а потоа да ги комбинирате овие услови (ИЛИ или И).

Откако напишавте десетина спецификации, можете да поставите сложени прашања како „сите опасни адитиви за боење што го имаат зборот [црвено] во описот“.

Во однос на работата со пролетната база на податоци, сметам дека е многу погодно. Ова е особено точно кога работите со сложени прашања. Разбирам дека ова има свои трошоци, а рачно напишаното и оптимизирано SQL барање ќе работи побрзо.

Но, јас исто така се придржувам до гледиштето дека нема потреба да се оптимизира сè однапред. Првата верзија мора да започне, да работи и да дозволи замена на поединечни делови. И ако има оптоварување, овие поединечни делови треба да се препишат.

Безбедност

Едноставно е. Има корисници со улога АДМИН - тие можат да уредуваат додатоци, да ги бришат и да додаваат нови.

А има и други корисници (регистрирани или не). Тие можат само да ја прелистуваат листата на адитиви и да ги бараат оние што им се потребни.

Spring Security се користеше за одвојување на правата. Корисничките податоци се чуваат во база на податоци.

Корисниците можат да се регистрираат. Сега ништо не дава. Ако учениците продолжат да ја развиваат услугата и да воведат некои персонализирани функции, тогаш регистрацијата ќе ви помогне.

Одговорност и Bootstrap

Следната точка е приспособливоста. Во случајот со нашата услуга (барем онака како што го видовме), најголемиот дел од корисниците ќе бидат со мобилни телефони. И треба брзо да го прегледате додатокот од вашиот мобилен телефон.

За да не страдаме со CSS, земавме Bootstrap. Евтино, весело и изгледа пристојно.

Не можам да го наречам интерфејсот идеален. Главната страница е уште помалку, а страницата за детален опис на адитивот е тесна, на мобилните телефони треба да се направи поширока.

Можам само да кажам дека се трудев што помалку да се мешам во работата. Ова е сè уште студентски проект. И секако, момците подоцна ќе можат да ги поправат таквите моменти.

Една минута оптимизација на оптимизација

Бидејќи повеќе од две години сум тесно вклучен во веб-страниците и сè што е поврзано со SEO, не можев да издадам проект без барем основна оптимизација на SEO.

Всушност, направив генерација на шаблони на наслов и опис за секој додаток. URL-то е речиси CNC, иако може да се направи пократко.

Додадов и бројачи за присуство. Додадена е страницата на Yandex Webmaster и Google Search Console за следење на предупредувањата од пребарувачите.

тоа не е доволно. Исто така, треба да додадете robots.txt и sitemap.xml за целосно индексирање. Но, повторно, ова е студентски проект. Ќе им кажам што треба да се направи, а ако сакаат ќе го направат.

Треба да прикачите SSL сертификат. Ќе работи и бесплатниот Let's Encrypt. Го направив ова за пролетна чизма. Не е тешко да се направи, а довербата на ПС се зголемува.

Што е следно за проектот?

Тогаш, всушност, изборот е на момците. Оригиналната идеја на проектот вклучуваше и база на податоци за производи со линкови до адитиви.

Внесете „Snickers“ и видете какви нутритивни адитиви содржи.

Уште на почетокот на проектот знаев дека нема да имаме никакви производи :) Затоа почнавме само со адитиви.

Сега можете да додавате производи и да воведете дополнителни. лепчиња. Ако е обемна база на податоци, ќе има корисници.

Распоредување

Проектот беше распореден на VPS, Aruba Cloud. Ова е најевтиниот VPS што можевме да го најдеме. Го користам овој провајдер повеќе од една година за моите проекти и сум пријатно задоволен од него.

Карактеристики на VPS: 1 GB RAM, 1 процесор (не знам за фреквенцијата), 20 GB SSD. За нашиот проект ова е доволно.

Проектот е изграден со користење на вообичаениот mvn clean пакет. Резултатот е дебела тегла - извршна датотека со сите зависности.

За да го автоматизирам сето ова малку, напишав неколку баш скрипти.

Првата скрипта ја брише старата датотека jar и гради нова.

Втората скрипта ја лансира собраната тегла, пренесувајќи му го името на потребниот профил. Овој профил содржи информации за поврзување со базата на податоци.

DB - MySQL на истиот VPS.

Вкупното рестартирање на проектот вклучува:

  • најавете се во VPS преку SSH
  • преземете ги најновите промени во git
  • трчаат локално-тегла.ш
  • убие апликација која работи
  • работи лансирање-продукција.ш

Оваа постапка трае три минути. Ова ми изгледа како паметен избор за толку мал проект.

Тешкотии

Главните тешкотии при креирањето на проектот беа од организациона природа.

Има група на луѓе кои се чини дека знаат да програмираат, но не многу добро. Тие знаат нешто, но сè уште не можат навистина да го применат. И сега треба да го завршат проектот за еден месец.

Идентификував условен лидер на тимот во оваа група. Водел Google Doc со список на задачи, дистрибуирал задачи и го контролирал нивното прифаќање. Тој исто така ги прифати барањата за повлекување.

Исто така, побарав од учениците секоја вечер да напишат краток извештај за работата што ја направиле на проектот. Ако не сте направиле ништо, ок, само напишете „не направи ништо“. Ова е одлична практика и ве прави малку напнати. Не сите го следеа ова правило, за жал.

Целта на сето ова движење беше едноставна. Формирајте тим, макар и на кратко, за да работите заедно.

Сакав момците да почувствуваат дека нивната работа е важна. Разберете дека тие не пишуваат сферичен код во вакуум. И она што тие го прават заедно е проект што луѓето потоа ќе го користат.

Првата недела или две беше надополнување. Ентитетите и малите обврски беа направени бавно. Малку по малку ги разбранував, а работата стана позабавна. Комуникацијата во разговорот стана пожива, студентите ги понудија своите додатоци.

Верувам дека целта е постигната. Проектот е готов, момците добија мало искуство работејќи во тим. Има видлив, опиплив резултат што може да им се покаже на пријателите и понатаму да се развива.

Наоди

Учењето е интересно.

После секој час се враќав емотивно вознемирен. Се трудам секој пар да го направам уникатен и да пренесам што е можно повеќе знаење.

Убаво е кога групата на која учам ќе стигне до финалето. Особено е убаво кога момците пишуваат „Најдов работа, сè е во ред, благодарам“. Дури и ако е помлад, дури и ако на почетокот не се најголемите пари. Но, најважно е што направија чекор кон своите желби и успеаја.

Иако написот се покажа доста обемен, секако не беше можно да се опфатат сите точки. Затоа, напишете ги вашите прашања во коментарите.

Извор: www.habr.com

Додадете коментар