Pozdrawiam, koledzy. Dzisiaj porozmawiamy o rodzajach prac przygotowawczych, które należy wykonać, zanim zaczniesz dziko kodować. A dokładniej o planowaniu i tworzeniu architektury aplikacji. Ale od czego zacząć? Jak zbudować taką architekturę? Jak ze wszystkim, trzeba zacząć od początku. Mianowicie - z IDEA. Ideą naszego projektu było stworzenie użytecznego bota telegramowego z podstawową funkcjonalnością. Powtórzmy dokładnie co: „Ja, jako użytkownik, chcę mieć możliwość otrzymywania powiadomień, gdy w interesujących mnie grupach na JavaRush pojawią się nowe artykuły”. Kierując się zasadą YAGNI, zbudujemy naszą aplikację. Oznacza to, że zabierzemy tylko tyle, ile potrzebujemy. Nie będziemy tworzyć funkcjonalności z góry i z rezerwą tylko dlatego, że chcemy i kiedyś może nam się ona przydać. Tak, stworzymy czytelną i rozszerzalną aplikację, ale to nie znaczy, że stworzymy schemat bazy danych „na rozwój”. Aby nie wspierać tego „wzrostu”, stwierdziłem, że lepiej będzie z niego w ogóle zrezygnować. Pomoże nam to uniknąć niepotrzebnego wsparcia podczas rozwoju i niepotrzebnych testów. Później, gdy nasz projekt wejdzie do produkcji (znowu anglicyzm, od skrótu prod – produkcja), będziemy mogli zrobić coś więcej. Kiedy już zdecydujesz się na pomysł, musisz trochę się zbuntować i narysować. Co narysować? Przyda nam się możliwość zapisywania danych o subskrypcjach grupom różnych użytkowników. Wiem, że w Telegramie możesz użyć identyfikatora użytkownika w postaci identyfikatora czatu. I istnieje pomysł, jak faktycznie będzie przebiegać wyszukiwanie nowych artykułów: przeszukamy wszystkie grupy, które mają subskrypcje nowych artykułów i wyślemy je na czaty. Na tej podstawie w pierwszym przybliżeniu otrzymujemy co następuje (tutaj rozwinięcie bez ozdobników): Nie mam nadzieję, że zrozumiecie mój charakter pisma: Chcę dokładnie pokazać, jak i gdzie zaczyna się rozwój. Pierwszy etap został zakończony: w jakiś sposób zdecydowaliśmy, co się stanie. Modele/tabele znajdujące się w bazie zostały opisane powyżej. Ale to jest szkic: można i należy go dopracować i nadać mu bardziej czytelną formę. Podczas polerowania przypomniałem sobie, że chciałem też uzyskać statystyki dotyczące pracy bota. Dodałem to. Na tym rysunku jest więcej niż jasne, co i jak zostanie ułożone. Czyli jakie będą w nich tabele i pola, jakie będą nazwy encji dla tabel. Zdecydowano, że będzie ich kilka:
- Użytkownik - informacja o użytkowniku telegramu, który będzie korzystał z naszego bota. Jak widać, zapisujemy tylko identyfikator czatu i flagę, niezależnie od tego, czy użytkownik jest aktywny, czy nie. Dlaczego? Ponieważ naszym celem nie jest zbieranie informacji o użytkownikach, ale przynoszenie im korzyści;
- GroupSub - tutaj znajdą się informacje o grupie, do której masz subskrypcję oraz najnowszy artykuł, który został wysłany do subskrybentów;
- Statystyki – nie stworzyłem dla tego schematu – zrobimy to później. Nie to jest głównym celem w MVP projektu.
Utwórz repozytorium do pracy
Na koniec możesz utworzyć repozytorium do pracy z botem telegramowym.- Wypełniamy znane nam już elementy - nazwę repozytorium, jego krótki opis.
- Dodaj licencję - Apache 2.0 (możesz wybrać licencję według własnego uznania).
- Nasz projekt jest już dostępny - oto link do niego: JavaRush Telegrambot .
Utwórz projekt w repozytorium
Do pracy z projektem dobrze byłoby skorzystać z narzędzi GitHuba takich jak Project. Co to jest? To miejsce, w którym możesz tworzyć zadania, śledzić ich realizację i zapisywać status zadań. Ustal, kto będzie je wykonywał i nie tylko. Aby to zrobić, w utworzonym projekcie znajdziemy przycisk Projekty i tam utworzymy nowy: Jak widać, tutaj wskazałem nazwę projektu, opisałem go i wybrałem szablon, na którym będziemy pracować - Zautomatyzowany Kanban. Dla nas nie jest teraz tak ważne, co to oznacza. Najważniejsze, że będziemy mieli tablicę z zadaniami podzieloną na kolumny, gdzie każda kolumna będzie zawierać status zadania:- Do zrobienia - wszystkie zadania, które są zaplanowane do wykonania;
- W toku – zadania, nad którymi aktualnie pracujemy;
- Gotowe – zadania, które zostały już zrealizowane w ramach tego projektu.
Pisanie zagadnień (zagadnień) do projektu
Aby zrozumieć, jakie zadania napisać, zdecydujmy, co będziemy mieli w projekcie. Potrzebujemy aplikacji, którą można łatwo i szybko uruchomić, dzięki której będziemy mogli uzyskać dostęp do bazy danych, abyśmy mogli zarządzać i zmieniać schemat bazy danych, abyśmy mogli wykonywać żądania REST w JavaRush w celu uzyskania danych o artykułach. Na tej podstawie możesz wybrać następujące technologie:- SpringBoot – jako framework dla naszej aplikacji,
- Spring Data - do pracy z bazą danych,
- Flyway - do pracy z migracjami baz danych,
- MySQL – jako baza danych dla projektu,
- Telegrambot StringBoot starter - biblioteka do pracy z botem telegramowym,
- Unirest to biblioteka do pracy z żądaniami REST.
Szablon tworzenia zadania
Zadania stworzymy według następującego szablonu:- Nazwa zadania będzie wyglądać następująco: JRTB-{IssueNumber}:{IssueDescription} , gdzie:
- {IssueNumber} to numer seryjny problemu. Weźmy to jeszcze raz od ostatniego problemu;
- {IssueDescription} – krótki opis problemu.
- W treści zadania dokonamy jego bardziej szczegółowego opisu (czasami może on pokrywać się z opisem w nazwie zadania).
- Kryteria akceptacji to lista wymagań, po spełnieniu której zadanie można uznać za zakończone. Że tak powiem, kryteria przyjęcia zadania. Za ich pomocą recenzent (z języka angielskiego recenzent – recenzent – osoba, która patrzy na sposób wykonania zadania) może zrozumieć, czy zadanie zostało całkowicie ukończone, czy nie.
- [FEATURE] JRTB-0: utwórz projekt startowy Skeleton Spring - tutaj wszystko jest jasne: musisz wykonać pierwszą część tego, co zrobiliśmy w poprzednim artykule.
- [FEATURE] JRTB-2: dodaj bota telegramowego do projektu - dodaj pustego bota, który po prostu odpowie i powie, że żyje i ma się dobrze.
- [FEATURE] JRTB-3: Zaimplementuj wzorzec poleceń dla telegrambota - ustalmy prawidłowe podejście do pracy z poleceniami w bocie telegramowym. Na razie dla kilku zespołów.
- [FEATURE] JRTB-1: Dodaj warstwę repozytorium - to jedno z największych zadań - łączy w sobie wszystko, co jest potrzebne do pracy z bazą danych.
- [FEATURE] JRTB-5: Jako użytkownik chcę dodać grupę do subskrypcji - to już pierwsza User Story w rozumieniu Agile. Będzie to realna korzyść dla naszych użytkowników: do bota będzie można dodawać subskrypcje grupowe.
- [FEATURE] JRTB-12: Zaimplementowano harmonogram wysyłania powiadomień o nowych artykułach - tutaj zostanie zaimplementowana funkcja wyszukiwania nowych artykułów, jeśli zostaną one opublikowane dla każdej z grup i wysłane do wszystkich użytkowników zapisanych do grup.
- [FEATURE] JRTB-6: Jako użytkownik chcę zobaczyć listę subskrypcji moich grup - tutaj wszystko jest proste: dodajemy polecenie, które wyświetla listę wszystkich grup, do których subskrybowany jest użytkownik.
- [FEATURE] JRTB-7: Jako użytkownik chcę usunąć subskrypcję grupową z moich subskrypcji - tutaj musisz usunąć subskrypcję użytkownika na aktualizacje w grupie.
- [FEATURE] JRTB-8: Jako użytkownik chcę ustawić nieaktywność przy użyciu bota - zaimplementuj zatrzymanie bota. Czyli wszystko co trzeba zrobić w naszym systemie, żeby praca się zatrzymała. Dodaj polecenie /stop do przetwarzania.
- [FEATURE] JRTB-9: Jako użytkownik chcę rozpocząć pracę z botem LUB ustawić go jako aktywnego, jeśli używałem go wcześniej - dodać przetwarzanie komendy /start. Dokładnie tak, jak tego chcemy.
- [FEATURE] JRTB-10: Jako administrator chcę zobaczyć statystyki botów - tworząc kolekcję statystyk botów. Dodanie możliwości administratora.
- [FEATURE] JRTB-11: Jako użytkownik chcę zobaczyć dokumentację tego bota telegramowego - pisać dokumentację. Tak, tak, przyjaciele, nie możesz bez tego żyć, a im szybciej się tego nauczysz, tym lepiej dla ciebie))
Wypełnianie repozytorium
Co jeszcze należy zrobić ZANIM zaczniemy kodować? - Autorze, ile tych akapitów możesz dodać, czy wyciągasz je z otchłani?? — Nie, jakość pracy widać w szczegółach. I to one mają sens. Dodajmy więc jeszcze jeden szczegół. Aby projekt stał się popularny i zrozumiały dla innych programistów, należy go wypełnić. Co powinienem dodać? Pełną listę tego, co można zrobić, opisałem w artykule Optymalizacja pracy z projektami na GitHubie: poznanie repozytorium szablonów Github . Gorąco polecam przeczytać. Ważne jest, abyśmy mieli jasne wersje i jasne zrozumienie tego, co robimy. Dlatego dodałem plik RELEASE_NOTES, w którym będą zapisywane zmiany w naszym projekcie. Jako przykład możesz spojrzeć na RELEASE_NOTES z mojego projektu (tak, dlaczego by nie pokazać w co wkładam swoją energię i kreatywność). Opisane są tam zmiany dla każdej nowej wersji. Dodałem także szablony do tworzenia nowych zadań, które mają 4 opcje:- Raport o błędach to zadanie tworzone przez użytkowników/testerów, którzy znajdą błąd w swojej pracy. To bardzo ważna rzecz: pomaga zarządzać poprawkami błędów;
- Żądanie funkcji to zadanie polegające na dodaniu nowej funkcjonalności. Wszystkie pierwsze zadania w projekcie są zadaniami z żądaniem funkcji;
- Prośba o ulepszenie – zadanie mające na celu poprawę działania aplikacji. Na przykład, aby zmienić odpowiedzi testowe podczas pracy z botem. Nie jestem pisarzem technicznym i mogę wymyślić nie do końca poprawne odpowiedzi. Jeśli więc masz chęć i możliwości to oferuj :)
- Pytanie to pytanie do programistów dotyczące działania aplikacji. Bardzo przydatna rzecz. Powiedzmy, że nie ma zrozumienia dzieła lub są wątpliwości co do jakiegoś pytania – możesz w ten sposób zadać pytanie i uzyskać odpowiedź z pierwszej ręki.
GO TO FULL VERSION