E-Dobavki - tələbələrim tərəfindən yazılmış Java və Spring Boot-da qida əlavələrinin axtarışı üçün veb xidməti

Giriş

Elə oldu ki, son iki ilə yaxındır mən Kiyevdəki İT məktəblərindən birində proqramlaşdırmadan dərs deyirəm. Mən bunu Əyləncə üçün etməyə başladım. Bir dəfə proqramlaşdırma bloqu yazdım, sonra ondan imtina etdim. Amma maraqlanan insanlara faydalı şeylər söyləmək istəyi sönməyib.

Mənim əsas dilim Java dilidir. Onun üzərində mobil telefonlar üçün oyunlar, radio rabitəsi üçün proqramlar və müxtəlif veb-servislər yazdım. Mən isə Java dilini öyrədirəm.

Burada mən sonuncu qrupumun məşq hekayəsini danışmaq istəyirəm. Təlimə başlamaqdan işləyən veb xidməti yazmağa necə keçdilər. Qida əlavələrini tapmaq üçün faydalı veb xidməti. Pulsuz, heç bir reklam, qeydiyyat və SMS.

Xidmətin özü burada - E-Dobavki.com.

E-Dobavki - tələbələrim tərəfindən yazılmış Java və Spring Boot-da qida əlavələrinin axtarışı üçün veb xidməti

Layihə maarifləndirici xarakter daşıyır və heç bir reklam yoxdur. Anladığım kimi bu nəşrin, bu cür layihələrə keçidlər verə bilərsiniz.

Layihənin özünü təsvir etməzdən əvvəl sizə qrupun öyrənmə prosesi haqqında bir az məlumat verəcəyəm, onsuz şəkil natamam olacaq.

9 aylıq təlim

Dərs dediyim məktəbdə Java kursu 2 hissəyə bölünür. Ümumilikdə kurs bütün fasilələrlə (Yeni il bayramları, ara layihələrin yazılması vaxtı) təxminən 9 ay davam edir.

Birinci hissə tələbələri dilin əsas anlayışları ilə tanış edir. Dəyişənlər, metodlar, OOP əsasları və bütün bunlar.

Kursun ikinci hissəsi tələbənin Java-da necə yazmağı az-çox başa düşməsini təmin edir və ona “böyüklər” texnologiya yığını verilə bilər. Hamısı SQL, sonra JDBC, Hibernate ilə başlayır. Sonra HTTP, servletlər. Sonrakı Bahar, bir az git və maven haqqında. Və tələbələr yekun layihələr yazır.

Bütün təlimlər modullara bölünür. Həftədə iki dəfə dərs keçirdim. Bir dərsin müddəti iki saatdır.

Mənim öyrənməyə yanaşmam

5 qrup buraxdım. İki il ərzində çox şey kimi görünür, amma mən demək olar ki, həmişə paralel olaraq 2 qrupa rəhbərlik edirdim.

Fərqli yanaşmaları sınamışam.

Birinci seçim, nəzəriyyə ilə təqdimat üçün bir cütün ayrılmasıdır. İkinci cüt təmiz təcrübədir. Bu yanaşma nədənsə işə yaradı, amma mənim fikrimcə, o qədər də təsirli olmadı.

Gəldiyim və hazırda üzərində işlədiyim ikinci variant nəzəriyyəyə bütöv bir cüt həsr etmək deyil. Əvəzində mən 5-10 dəqiqəlik qısa nəzəriyyə bölmələrini qarışdırıram və dərhal onları praktiki nümunələrlə möhkəmləndirirəm. Bu yanaşma daha yaxşı işləyir.

Əgər kifayət qədər vaxt olarsa, tələbələri öz yerimə çağırıram, noutbukumun başına oturdururam və onlar özləri praktiki nümunələr edirlər. Əla işləyir, amma təəssüf ki, çox vaxt aparır.

Hər kəs bunu sona çatdıra bilmir

Mənim üçün bir vəhy bütün qrupun kursun sonuna çatmaması idi.

Müşahidələrimə görə, şagirdlərin yalnız yarısı yekun layihəsini yazır. Onların əksəriyyəti kursun birinci hissəsində aradan qaldırılır. İkinci hissəyə çatanlar isə ümumiyyətlə düşmürlər.

Müxtəlif səbəblərdən ayrılırlar.

Birincisi mürəkkəblikdir. Nə desələr də, Java ən sadə dil deyil. Ən sadə proqramı belə yazmaq üçün sinif, metod anlayışını başa düşmək lazımdır. Və niyə yazmağınız lazım olduğunu başa düşmək üçün ictimai statik boşluq əsas(String[] arg) Anlamaq üçün daha bir neçə anlayış var.

Bunu Turbo Paskal ilə müqayisə edin, mən də daxil olmaqla, bir çox insanın başladığı budur:

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

Bildiyimə görə, məktəb əlavə testlər tətbiq etməklə bu problemi həll edəcək. İndi hər kəs Java dilini öyrənə bilmir. Bu hələ konsepsiya mərhələsindədir, lakin addım aydındır ki, doğru addımdır.

İkinci səbəb isə aşağıdakı şəkildəki kimidir:

E-Dobavki - tələbələrim tərəfindən yazılmış Java və Spring Boot-da qida əlavələrinin axtarışı üçün veb xidməti

İnsanlar çox vaxt proqramlaşdırmanın çoxlu mətn yazmaq və bunun üçün çoxlu pul qazanmaq olduğunu düşünürlər. Kopirayter kimi, yalnız daha çox pul.

Reallıq bir az fərqlidir. Bir çox rutin kod, aşkar olmayan səhvlər, daimi öyrənmə prosesi. Maraqlıdır, amma hamı üçün deyil.

Bunlar statistikadır. Əvvəlcə məni əsəbləşdirdi, düşündüm ki, bəlkə nəyisə səhv edirəm. İndi başa düşürəm ki, statistika əksər kurslar üçün təxminən eynidir. İndi mən bundan narahat deyiləm, amma maraqlanan insanlara öyrədirəm.

Xidmət ideyası

Tələbələr bütün kursu bitirdikdən sonra yekun layihəni yazmaq vaxtı gəldi. Müxtəlif fikirlər var idi. Onlar ToDo vərəqləri, layihə idarəetmə layihələri və başqa bir şey təklif etdilər.

Sadə, lakin faydalı bir şey etmək istədim. Mənim kriteriyam sadə idi - dostlarım və mən bundan istifadə edə bildikmi. Qida əlavələrinin axtarışı üçün veb-servis bu tələblərə cavab verdi.

Fikir sadədir. Mağazada bir məhsul alarkən, tərkibində bir növ E-aşqar görürsən. Kodeksdən bunun nə dərəcədə təhlükəli olub-olmaması aydın deyil (bir çox ölkələrdə qadağan olunmuş təhlükəli əlavələr də var).

Siz veb-saytı açırsınız, əlavənin adını (nömrə, alternativ adlardan biri) daxil edin və əlavənin xülasəsini əldə edirsiniz:

E-Dobavki - tələbələrim tərəfindən yazılmış Java və Spring Boot-da qida əlavələrinin axtarışı üçün veb xidməti

Oxşar layihələr var. Həmişə məlumatları düzgün göstərməsə də, əlavəni Google-a sadəcə olaraq yaza bilərsiniz.

Amma layihə maarifləndirici olduğu üçün yuxarıdakı çətinliklər bizə mane olmadı :)

Tətbiq

Hər kəs Java-da yazdı, Github-da layihənin mənbə kodu.

Mən də daxil olmaqla 7 nəfər idik. Hər kəs çəkilmə tələbi etdi və mən və ya qrupdan başqa bir şəxs bu çəkmə tələbini qəbul etdik.

Layihənin icrası təxminən bir ay çəkdi - ideyanın səsləndirilməsindən tutmuş indi gördüyünüz vəziyyətə qədər.

Tərkibli əlavələr

Şagirdlərdən birinin etdiyi ilk iş verilənlər bazası (obyektlər, depolar və s.) ətrafında əsas çərçivənin yaradılmasından başqa, mövcud məlumat saytından əlavələri təhlil etmək idi.

Bu, qalan xalları yoxlamaq üçün lazım idi. Verilənlər bazasını doldurmaq üçün əlavə kod tələb olunmur. Bir neçə əlavəni tez təhlil etdikdən sonra biz istifadəçi interfeysini, çeşidləmə və filtrləməni daha da sınaqdan keçirə bildik.

Spring Boot birdən çox profil yaratmağa imkan verir. Profil parametrləri olan bir fayldır.

İnkişaf mühiti üçün yerli H2 DBMS və standart HTTP portu (8080) olan profildən istifadə etdik. Beləliklə, proqram hər dəfə işə salındıqda məlumat bazası təmizlənirdi. Bu vəziyyətdə analizator bizi xilas edən şey idi.

Axtarış və filtrləmə

Əhəmiyyətli bir məqam axtarış və filtrləmədir. Mağazada olan şəxs tez bir zamanda əlavənin kodunu və ya adlardan birini vurmalı və nəticəni almalıdır.

Buna görə də, Əlavə obyekti bir neçə sahəyə malikdir. Bu əlavə kod, alternativ adlar, təsvirdir. Axtarış eyni vaxtda bütün sahələrdə Like istifadə etməklə həyata keçirilir. Əgər [123] və ya [amaranth] daxil etsəniz, eyni nəticəni alacaqsınız.

Bütün bunları Spesifikasiyalara əsasən etdik. Bu, əsas axtarış şərtlərini (məsələn, bəzi sahələr kimi) təsvir etməyə və sonra bu şərtləri (YA və ya AND) birləşdirməyə imkan verən Baharın bir hissəsidir.

Bir çox spesifikasiyanı yazdıqdan sonra "təsvirində [qırmızı] sözü olan bütün təhlükəli rəngləndirici əlavələr" kimi mürəkkəb sorğular verə bilərsiniz.

Spring verilənlər bazası ilə işləmək baxımından mən bunu çox rahat hesab edirəm. Bu, xüsusilə mürəkkəb sorğularla işləyərkən doğrudur. Mən başa düşürəm ki, bunun özünəməxsus yükü var və əl ilə yazılmış və optimallaşdırılmış SQL sorğusu daha sürətli işləyəcək.

Amma mən həm də bu fikirdəyəm ki, hər şeyi əvvəlcədən optimallaşdırmağa ehtiyac yoxdur. Birinci versiya işə başlamalı, işləməli və fərdi hissələrin dəyişdirilməsinə icazə verməlidir. Və bir yük varsa, bu fərdi hissələrin yenidən yazılması lazımdır.

təhlükəsizlik

Bu sadədir. ADMIN rolu olan istifadəçilər var - onlar əlavələri redaktə edə, silə və yenilərini əlavə edə bilərlər.

Digər istifadəçilər də var (qeydiyyatdan keçmiş və ya olmayan). Onlar yalnız əlavələrin siyahısına baxa və onlara lazım olanları axtara bilərlər.

Spring Security hüquqları ayırmaq üçün istifadə edildi. İstifadəçi məlumatları verilənlər bazasında saxlanılır.

İstifadəçilər qeydiyyatdan keçə bilərlər. İndi heç nə vermir. Tələbələr xidməti inkişaf etdirməyə və bəzi fərdiləşdirilmiş funksiyaları təqdim etməyə davam edərlərsə, qeydiyyatdan keçmək faydalı olacaq.

Həssaslıq və Bootstrap

Növbəti məqam uyğunlaşmadır. Xidmətimizdə (ən azı bizim gördüyümüz kimi) istifadəçilərin əksəriyyəti mobil telefonlarla olacaq. Və mobil telefonunuzdan əlavəyə tez baxmaq lazımdır.

CSS ilə əziyyət çəkməmək üçün Bootstrap aldıq. Ucuz, şən və layiqli görünür.

Mən interfeysi ideal adlandıra bilmərəm. Əsas səhifə daha da azdır və əlavənin ətraflı təsviri üçün səhifə dardır, mobil telefonlarda onu daha da genişləndirmək lazımdır.

Sadəcə onu deyə bilərəm ki, mümkün qədər az işlərə müdaxilə etməyə çalışmışam. Bu hələ tələbə layihəsidir. Və təbii ki, uşaqlar belə məqamları sonradan düzəldə biləcəklər.

Bir dəqiqəlik SEO optimallaşdırması

İki ildən artıqdır ki, vebsaytlarda və SEO ilə əlaqəli hər şeydə yaxından iştirak etdiyim üçün ən azı əsas SEO optimallaşdırması olmadan bir layihə buraxa bilməzdim.

Əslində, mən hər bir əlavə üçün Başlıq və Təsvir şablonu yaratdım. URL, demək olar ki, CNC-dir, baxmayaraq ki, daha qısa edilə bilər.

Davamiyyət sayğaclarını da əlavə etdim. Axtarış motorlarından gələn xəbərdarlıqları izləmək üçün sayt Yandex Webmaster və Google Search Console-a əlavə edildi.

Bu kifayət deyil. Tam indeksləşdirmə üçün robots.txt və sitemap.xml əlavə etməlisiniz. Amma yenə deyirəm, bu tələbə layihəsidir. Mən onlara nə etmək lazım olduğunu söyləyəcəyəm, istəsələr, edəcəklər.

SSL sertifikatı əlavə etməlisiniz. Pulsuz Let's Encrypt də işləyəcək. Bunu Spring Boot üçün etdim. Bunu etmək çətin deyil və PS-nin etibarı artır.

Layihə üçün növbəti nə var?

Onda, əslində, seçim oğlanların ixtiyarındadır. Layihənin orijinal ideyasına əlavələrə keçidləri olan məhsulların məlumat bazası da daxildir.

"Snickers" daxil edin və onun tərkibində hansı qida əlavələri olduğuna baxın.

Layihə başlayanda da bilirdim ki, bizdə heç bir məhsul olmayacaq :) Ona görə də biz ancaq əlavələrlə başladıq.

İndi məhsullar əlavə edə və əlavələrini təqdim edə bilərsiniz. bulka. Geniş məlumat bazasıdırsa, istifadəçilər olacaq.

Yerləşdirmə

Layihə VPS, Aruba Cloud-da yerləşdirilib. Bu, tapa biləcəyimiz ən ucuz VPS-dir. Mən bir ildən artıqdır ki, bu provayderdən layihələrim üçün istifadə edirəm və bundan çox məmnunam.

VPS xüsusiyyətləri: 1 GB RAM, 1 CPU (tezliyi bilmirəm), 20 GB SSD. Layihəmiz üçün bu kifayətdir.

Layihə adi mvn təmiz paketindən istifadə etməklə qurulur. Nəticə yağlı bir bankadır - bütün asılılıqları olan icra edilə bilən bir fayl.

Bütün bunları bir az avtomatlaşdırmaq üçün bir neçə bash skripti yazdım.

Birinci skript köhnə jar faylını silir və yenisini qurur.

İkinci skript yığılmış kavanozu işə salır, ona tələb olunan profilin adını verir. Bu profil verilənlər bazası əlaqə məlumatlarını ehtiva edir.

DB - eyni VPS-də MySQL.

Layihənin ümumi yenidən başlamasına aşağıdakılar daxildir:

  • SSH vasitəsilə VPS-ə daxil olun
  • ən son git dəyişikliklərini yükləyin
  • local-jar.sh-i işlədin
  • işləyən proqramı öldürün
  • launch-production.sh-i işə salın

Bu prosedur üç dəqiqə çəkir. Bu, belə kiçik bir layihə üçün mənə ağıllı seçim kimi görünür.

Çətinliklər

Layihənin yaradılmasında əsas çətinliklər təşkilati xarakter daşıyırdı.

Bir qrup insan var ki, proqramlaşdırmağı bilir, amma çox yaxşı deyil. Onlar bir şey bilirlər, lakin hələ də onu real şəkildə tətbiq edə bilmirlər. İndi isə layihəni bir aya başa çatdırmalıdırlar.

Bu qrupda şərti komanda lideri müəyyən etdim. O, tapşırıqların siyahısı ilə Google Sənədi saxlayır, tapşırıqları paylayır və onların qəbuluna nəzarət edirdi. O, çəkilmə tələblərini də qəbul etdi.

Mən də tələbələrdən layihə üzərində gördükləri işlər haqqında hər axşam qısa hesabat yazmağı xahiş etdim. Heç nə etməmisinizsə, sadəcə olaraq “heç nə etmədiniz” yazın. Bu əla məşqdir və sizi bir az gərginləşdirir. Təəssüf ki, hamı bu qaydaya əməl etməyib.

Bütün bu hərəkatın məqsədi sadə idi. Qısa müddətə də olsa, birlikdə işləmək üçün bir komanda yaradın.

Mən istədim ki, uşaqlar öz işlərinin vacib olduğunu hiss etsinlər. Anlayın ki, onlar vakuumda sferik kod yazmırlar. Birlikdə etdikləri isə insanların daha sonra istifadə edəcəyi bir layihədir.

İlk bir və ya iki həftə yığılma idi. Müəssisələr və kiçik öhdəliklər ləng aparılırdı. Yavaş-yavaş onları qarışdırdım və iş daha əyləncəli oldu. Çatda ünsiyyət daha canlı oldu, tələbələr əlavələrini təklif etdilər.

İnanıram ki, məqsədə nail olunub. Layihə tamamlandı, uşaqlar komandada işləmək üçün bir az təcrübə qazandılar. Dostlara göstərilə və daha da inkişaf etdirilə bilən görünən, nəzərə çarpan bir nəticə var.

Tapıntılar

Öyrənmək maraqlıdır.

Hər dərsdən sonra emosional həyəcanla qayıdırdım. Hər bir cütü unikal etməyə və mümkün qədər çox məlumat ötürməyə çalışıram.

Dərs verdiyim qrup finala çıxanda çox xoşdur. Uşaqların “iş tapdım, hər şey yaxşıdır, təşəkkür edirəm” yazması xüsusilə gözəldir. Kiçik olsa belə, ilk başda ən böyük pul olmasa belə. Amma ən əsası odur ki, istəklərinə doğru bir addım atdılar və buna nail oldular.

Məqalə kifayət qədər həcmli olsa da, əlbəttə ki, bütün məqamları əhatə etmək mümkün deyildi. Odur ki, suallarınızı şərhlərdə yazın.

Mənbə: www.habr.com

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