Salam, həmkarlar. Bu gün biz çılğın kodlaşdırmaya başlamazdan əvvəl etməli olduğunuz hazırlıq işləri haqqında danışacağıq. Daha dəqiq desək, proqram arxitekturasının planlaşdırılması və yaradılması haqqında. Bəs haradan başlamaq lazımdır? Bu memarlığı necə qurmaq olar? Hər şeydə olduğu kimi, əvvəldən başlamaq lazımdır. Məhz - IDEA ilə. Layihəmizin ideyası əsas funksionallığı olan faydalı teleqram bot yaratmaq idi. Gəlin dəqiq nəyi təkrarlayaq: “Mən bir istifadəçi kimi məni maraqlandıran JavaRush qruplarında yeni məqalələr dərc edildikdə bildirişlər almaq istəyirəm.” YAGNI prinsipinə əsasən, biz tətbiqimizi quracağıq. Bu o deməkdir ki, biz ancaq ehtiyacımız olanı alacağıq. İstədiyimizə görə əvvəlcədən və ehtiyatda funksionallıq yaratmayacağıq və nə vaxtsa o, həqiqətən faydalı ola bilər. Bəli, biz oxuna bilən və genişləndirilə bilən bir proqram yaradacağıq, lakin bu, "böyümək üçün" verilənlər bazası sxemini yaradacağımız anlamına gəlmir. Bu “artım”ı dəstəkləməmək üçün qərara gəldim ki, ondan tamamilə imtina etmək daha yaxşıdır. Bu, inkişaf zamanı lazımsız dəstəkdən və lazımsız sınaqlardan qaçmağa kömək edəcək. Daha sonra, layihəmiz istehsala keçəndə (yenə bir Anglisizm, prod abbreviaturasından - istehsal) daha çox şey edə biləcəyik. Bir fikrə qərar verdikdən sonra, bir az yaramazlıq etmək və çəkmək lazımdır . Nə çəkmək lazımdır? Fərqli istifadəçi qruplarına abunəliklər haqqında məlumat saxlamaq imkanına ehtiyacımız olacaq. Bilirəm ki, Telegram-da chat ID şəklində istifadəçi ID-dən istifadə edə bilərsiniz. Və yeni məqalələrin axtarışının əslində necə davam edəcəyi barədə bir fikir var: biz yeni məqalələrə abunə olan bütün qruplarda axtarış aparacağıq və onları söhbətlərə göndərəcəyik. Buna əsaslanaraq, ilk təqribi olaraq aşağıdakıları əldə edirik (bəzəksiz inkişaf budur): Ümid etmirəm ki, mənim əl yazımı başa düşəcəksiniz: inkişafın necə və haradan başladığını dəqiq göstərmək istəyirəm. Birinci mərhələ başa çatdı: nə olacağına birtəhər qərar verdik. Verilənlər bazasındakı modellər/cədvəllər yuxarıda təsvir edilmişdir. Ancaq bu bir qaralamadır: onu cilalamaq və daha oxunaqlı bir forma gətirmək olar və edilməlidir. Cilalayarkən yadıma düşdü ki, mən də botun işi ilə bağlı statistika əldə etmək istəyirəm. Bunu əlavə etdi. Bu rəsmdə nəyin və necə qurulacağı daha aydındır. Yəni onlarda hansı cədvəllər və sahələr olacaq, cədvəllər üçün hansı obyekt adları olacaq. Onlardan bir neçəsinin olacağı qərara alındı:
- İstifadəçi - botumuzdan istifadə edəcək teleqram istifadəçisi haqqında məlumat. Gördüyünüz kimi, istifadəçinin aktiv olub-olmamasından asılı olmayaraq biz yalnız söhbət ID-sini və bayrağı saxlayırıq. Niyə? Çünki bizim məqsədimiz istifadəçilər haqqında məlumat toplamaq deyil, onlara fayda verməkdir;
- GroupSub - burada abunə olduğunuz qrup və abunəçilərə göndərilmiş ən son məqalə haqqında məlumat olacaq;
- Statistika - Mən bunun üçün sxem yaratmamışam - bunu sonra edəcəyik. Layihənin MVP-də əsas məqsəd bu deyil.
İş üçün bir anbar yaradın
Nəhayət, teleqram botu ilə işləmək üçün repozitoriya yarada bilərsiniz.- Bizə artıq tanış olan maddələri - deponun adını, onun qısa təsvirini doldururuq.
- Lisenziya əlavə edin - Apache 2.0 (siz öz istəyinizlə lisenziyanı seçə bilərsiniz).
- Layihəmiz artıq əlçatandır - burada ona keçid var: JavaRush Telegrambot .
Repozitoriyada bir layihə yaradın
Layihə ilə işləmək üçün layihə kimi GitHub alətlərindən istifadə etmək yaxşı olardı. Bu nədir? Bu, tapşırıqlar yarada, onların tamamlanmasını izləyə və tapşırıq statusunu saxlaya biləcəyiniz yerdir. Onları kimin həyata keçirəcəyini və daha çoxunu müəyyənləşdirin. Bunu etmək üçün yaradılmış layihədə biz Layihələr düyməsini tapacağıq və orada yenisini yaradacağıq: Gördüyünüz kimi, burada layihənin adını qeyd etdim, təsvir etdim və işləyəcəyimiz şablonu seçdim - Avtomatlaşdırılmış Kanban. İndi bizim üçün bunun nə demək olduğu o qədər də vacib deyil. Əsas odur ki, sütunlara bölünmüş tapşırıqları olan bir lövhəmiz olacaq, burada hər bir sütun tapşırığın statusu olacaq:- Ediləcək - görülməsi planlaşdırılan bütün tapşırıqlar;
- Davam edir - hazırda üzərində işlənilən vəzifələr;
- Tamamlandı - bu layihə çərçivəsində artıq tamamlanmış vəzifələr.
Layihə üçün məsələlər (məsələlər) yazırıq
Hansı tapşırıqları yazacağımızı başa düşmək üçün layihədə nələrə sahib olacağımıza qərar verək. Bizə asanlıqla və tez işə salına bilən proqram lazımdır ki, verilənlər bazasına daxil ola bilək, verilənlər bazası sxemini idarə edə və dəyişə bilək, məqalələr haqqında məlumat əldə etmək üçün JavaRush-da REST sorğuları edə bilək. Buna əsaslanaraq, aşağıdakı texnologiyaları seçə bilərsiniz:- SpringBoot - tətbiqimiz üçün bir çərçivə olaraq,
- Spring Data - verilənlər bazası ilə işləmək üçün,
- Flyway - verilənlər bazası miqrasiyaları ilə işləmək üçün,
- MySQL - layihə üçün verilənlər bazası kimi,
- Telegrambot StringBoot starter - telegram botu ilə işləmək üçün kitabxana,
- Unirest REST sorğuları ilə işləmək üçün kitabxanadır.
Tapşırıq yaratmaq şablonu
Aşağıdakı şablondan istifadə edərək tapşırıqlar yaradacağıq:- Tapşırıq adı belə görünəcək: JRTB-{IssueNumber}:{IssueDescription} , burada:
- {IssueNumber} məsələnin seriya nömrəsidir. Son məsələdən bir də götürək;
- {IssueDescription} - məsələnin qısa təsviri.
- Tapşırığın mətnində biz onun daha ətraflı təsvirini verəcəyik (bəzən bu, tapşırıq adındakı təsvirlə üst-üstə düşə bilər).
- Qəbul meyarları tələblərin siyahısıdır, ondan sonra tapşırığı tamamlanmış hesab etmək olar. Belə desək, tapşırığı qəbul etmək üçün meyarlar. Onlardan istifadə edərək rəyçi (ingilis dilindən rəyçi - rəyçi - tapşırığın necə yerinə yetirilməsinə baxan şəxs) tapşırığın tam yerinə yetirilib-yetirilmədiyini anlaya bilər.
- [XÜSUSİYYƏTLƏR] JRTB-0: Skeleton Spring açılış layihəsi yaradın - burada hər şey aydındır: əvvəlki məqalədə gördüyümüz işin birinci hissəsini etməlisiniz.
- [XÜSUSİYYƏTLƏR] JRTB-2: layihəyə teleqram bot əlavə edin - sadəcə cavab verəcək və onun canlı və yaxşı olduğunu söyləyəcək boş bir bot əlavə edin.
- [XÜSUSİYYƏTLƏR] JRTB-3: Telegrambot üçün Əmr nümunəsini tətbiq edin - gəlin teleqram botunda əmrlərlə işləmək üçün düzgün yanaşma quraq. İndiyə qədər bir neçə komanda üçün.
- [XÜSUSİYYƏTLƏR] JRTB-1: Repozitor təbəqəsi əlavə edin - bu, ən böyük vəzifələrdən biridir - verilənlər bazası ilə işləmək üçün görülməli olan hər şeyi özündə birləşdirir.
- [XÜSUSİYYƏTLƏR] JRTB-5: Bir istifadəçi olaraq, mən qrupu abunəliyə əlavə etmək istəyirəm - bu, artıq Çevik anlayışda ilk İstifadəçi Hekayəsidir. Bu, istifadəçilərimiz üçün əsl fayda olacaq: bota qrup abunəlikləri əlavə etmək mümkün olacaq.
- [XÜSUSİYYƏTLƏR] JRTB-12: Yeni məqalələr haqqında bildiriş göndərmək üçün planlaşdırmanı həyata keçirin - burada yeni məqalələr qrupların hər biri üçün dərc olunarsa və qruplara abunə olan bütün istifadəçilərə göndərilərsə, onların axtarışı həyata keçiriləcəkdir.
- [XÜSUSİYYƏTLƏR] JRTB-6: Bir istifadəçi kimi mən qrup abunələrimin siyahısını görmək istəyirəm - burada hər şey sadədir: biz istifadəçinin abunə olduğu bütün qrupların siyahısını göstərən əmr əlavə edirik.
- [XÜSUSİYYƏTLƏR] JRTB-7: İstifadəçi kimi mən qrup abunəliyini abunələrimdən silmək istəyirəm - burada siz istifadəçinin qrupdakı yeniləmələrə abunəliyini silməlisiniz.
- [XÜSUSİYYƏTLƏR] JRTB-8: İstifadəçi kimi mən botdan istifadə edərək qeyri-aktiv təyin etmək istəyirəm - botun dayandırılmasını həyata keçirin. Yəni işin dayanması üçün bizim sistemdə edilməsi lazım olan hər şey. Emal üçün / stop əmrini əlavə edin.
- [XÜSUSİYYƏTLƏR] JRTB-9: İstifadəçi kimi mən botla işə başlamaq və ya əvvəllər istifadə etmişəmsə, aktiv set ilə işləmək istəyirəm - /start əmrinin işlənməsini əlavə edin. Tam bizim istədiyimiz kimi.
- [XÜSUSİYYƏTLƏR] JRTB-10: Bir idarəçi kimi mən bot statistikasını görmək istəyirəm - bot statistikası toplusunu yaratmaq. Administrator imkanlarının əlavə edilməsi.
- [XÜSUSİYYƏTLƏR] JRTB-11: Bir istifadəçi kimi mən bu teleqram botu üçün sənədləri görmək istəyirəm - yazı sənədləri. Bəli, bəli, dostlar, onsuz yaşaya bilməzsiniz və bunu nə qədər tez öyrənsəniz, sizin üçün bir o qədər yaxşı olar))
Anbarın doldurulması
Kodlaşdırmaya başlamazdan əvvəl başqa nə etməliyik? - Müəllif, bu bəndlərdən neçəsini əlavə edə bilərsən, onları uçurumdan çıxarırsan?? — Xeyr, işin keyfiyyəti detallarda göstərilir. Və onlar məntiqli olanlardır. Beləliklə, daha bir detal əlavə edək. Layihənin populyar olması və digər tərtibatçılar üçün başa düşülməsi üçün onu doldurmaq lazımdır. Nə əlavə etməliyəm? GitHub-da layihələrinizlə işin optimallaşdırılması: Github Şablon Repository ilə tanışlıq məqaləsində nə edilə biləcəyinin tam siyahısını təsvir etdim . Onu oxumağı çox tövsiyə edirəm. Bizim üçün aydın versiyaya malik olmaq, nə etdiyimizi aydın başa düşmək vacibdir. Buna görə də, layihəmizə dəyişikliklərin qeydə alınacağı RELEASE_NOTES faylı əlavə etdim. Nümunə olaraq layihəmdən RELEASE_NOTES-ə baxa bilərsiniz (bəli, niyə enerjimi və yaradıcılığımı nəyə sərf etdiyimi göstərməyək). Hər yeni versiya üçün dəyişikliklər orada təsvir edilmişdir. Mən həmçinin 4 variantı olan yeni tapşırıqlar yaratmaq üçün şablonlar əlavə etdim:- Baq Hesabatı işlərində səhv tapan istifadəçilər/testçilər tərəfindən yaradılan tapşırıqdır. Bu, çox vacib bir şeydir: səhvlərin aradan qaldırılmasına kömək edir;
- Xüsusiyyət sorğusu yeni funksionallıq əlavə etmək vəzifəsidir. Layihədəki bütün ilk tapşırıqlar xüsusiyyət sorğusu tapşırıqlarıdır;
- Təkmilləşdirmə tələbi - tətbiqin işini yaxşılaşdırmaq üçün bir tapşırıq. Məsələn, botla işləyərkən test cavablarını dəyişmək. Mən texniki yazıçı deyiləm və tamamilə düzgün olmayan cavablar tapa bilərəm. Odur ki, istəyiniz və bacarığınız varsa, təklif edin :)
- Sual proqramın işləməsi ilə bağlı tərtibatçılar üçün bir sualdır. Çox faydalı bir şey. Deyək ki, iş haqqında heç bir anlayış yoxdur və ya hansısa sualla bağlı şübhələr var - bu şəkildə sual verə və birinci əldən cavab ala bilərsiniz.
GO TO FULL VERSION