Grüße, Kollegen. Heute werden wir über die Art der Vorbereitungsarbeit sprechen, die Sie erledigen müssen, bevor Sie mit dem Codieren beginnen. Genauer gesagt geht es um die Planung und Erstellung einer Anwendungsarchitektur. Aber wo soll ich anfangen? Wie baut man diese Architektur auf? Wie bei allem müssen Sie von vorne beginnen. Nämlich – mit IDEA. Die Idee unseres Projekts bestand darin, einen nützlichen Telegram-Bot mit grundlegender Funktionalität zu erstellen. Wiederholen wir genau das: „Ich als Benutzer möchte Benachrichtigungen erhalten, wenn in den Gruppen auf JavaRush, die mich interessieren, neue Artikel veröffentlicht werden.“ Nach dem YAGNI-Prinzip werden wir unsere Anwendung erstellen. Das bedeutet, dass wir nur das mitnehmen, was wir brauchen. Wir werden keine Funktionalität im Voraus und in Reserve erstellen, nur weil wir es wollen und sie sich eines Tages tatsächlich als nützlich erweisen könnte. Ja, wir werden eine lesbare und erweiterbare Anwendung erstellen, aber das bedeutet nicht, dass wir ein Datenbankschema „für Wachstum“ erstellen werden. Um dieses „Wachstum“ nicht zu unterstützen, entschied ich, dass es besser wäre, ganz darauf zu verzichten. Dies hilft uns, unnötigen Support während der Entwicklung und unnötige Tests zu vermeiden. Später, wenn unser Projekt in Produktion geht (ebenfalls ein Anglizismus, von der Abkürzung prod – Produktion), werden wir in der Lage sein, noch etwas mehr zu tun. Sobald Sie sich für eine Idee entschieden haben, müssen Sie ein wenig frech werden und zeichnen. Was zeichnen? Wir benötigen die Möglichkeit, Daten zu Abonnements für Gruppen verschiedener Benutzer zu speichern. Ich weiß, dass man in Telegram eine Benutzer-ID in Form einer Chat-ID verwenden kann. Und es gibt eine Vorstellung davon, wie die Suche nach neuen Artikeln tatsächlich ablaufen wird: Wir werden in allen Gruppen, die Abonnements haben, nach neuen Artikeln suchen und diese an Chats senden. Daraus ergibt sich in erster Näherung Folgendes (hier die Entwicklung ohne Schnörkel): Ich hoffe nicht, dass Sie meine Handschrift verstehen: Ich möchte genau zeigen, wie und wo die Entwicklung beginnt. Die erste Phase ist abgeschlossen: Wir haben uns irgendwie entschieden, was passieren wird. Die Modelle/Tabellen in der Datenbank sind oben beschrieben. Aber das ist ein Entwurf: Er kann und sollte überarbeitet und in eine besser lesbare Form gebracht werden. Beim Polieren fiel mir ein, dass ich auch Statistiken über die Arbeit des Bots erhalten wollte. Dies wurde hinzugefügt. In dieser Zeichnung ist mehr als klar, was und wie es angeordnet wird. Das heißt, welche Tabellen und Felder darin enthalten sein werden und welche Entitätsnamen die Tabellen haben werden. Es wurde beschlossen, dass es mehrere davon geben würde:
- Benutzer – Informationen über den Telegram-Benutzer, der unseren Bot verwenden wird. Wie Sie sehen, speichern wir nur die Chat-ID und die Markierung, ob der Benutzer aktiv ist oder nicht. Warum? Denn unser Ziel ist es nicht, Informationen über Benutzer zu sammeln, sondern ihnen zu helfen;
- GroupSub – hier finden Sie Informationen über die Gruppe, für die Sie ein Abonnement haben, und den neuesten Artikel, der an Abonnenten gesendet wurde;
- Statistiken – ich habe kein Schema dafür erstellt – das machen wir später. Dies ist nicht das Hauptziel im MVP des Projekts.
Erstellen Sie ein Repository für die Arbeit
Schließlich können Sie ein Repository für die Arbeit mit einem Telegram-Bot erstellen.- Wir tragen die uns bereits bekannten Elemente ein – den Namen des Repositorys, seine Kurzbeschreibung.
- Fügen Sie eine Lizenz hinzu – Apache 2.0 (Sie können die Lizenz nach Ihrem Ermessen auswählen).
- Unser Projekt ist jetzt verfügbar – hier ist der Link dazu: JavaRush Telegrambot .
Erstellen Sie ein Projekt im Repository
Um mit dem Projekt zu arbeiten, wäre es gut, GitHub-Tools wie project zu verwenden. Was ist das? Hier können Sie Aufgaben erstellen, deren Abschluss verfolgen und den Aufgabenstatus speichern. Bestimmen Sie, wer sie ausführt und vieles mehr. Dazu finden wir im erstellten Projekt die Schaltfläche „Projekte“ und erstellen dort ein neues: Wie Sie sehen, habe ich hier den Namen des Projekts angegeben, es beschrieben und die Vorlage ausgewählt, an der wir arbeiten werden – Automatisiertes Kanban. Für uns ist es jetzt nicht so wichtig, was das bedeutet. Die Hauptsache ist, dass wir eine Tafel mit Aufgaben haben, die in Spalten unterteilt ist, wobei jede Spalte den Status der Aufgabe darstellt:- Zu erledigen – alle Aufgaben, die erledigt werden sollen;
- In Bearbeitung – Aufgaben, an denen gerade gearbeitet wird;
- Erledigt – Aufgaben, die in diesem Projekt bereits erledigt wurden.
Wir schreiben Issues (Issues) für das Projekt
Um zu verstehen, welche Aufgaben geschrieben werden sollen, entscheiden wir, was wir im Projekt haben wollen. Wir benötigen eine Anwendung, die einfach und schnell gestartet werden kann, damit wir auf die Datenbank zugreifen können, damit wir das Datenbankschema verwalten und ändern können, damit wir REST-Anfragen in JavaRush stellen können, um Daten zu Artikeln zu erhalten. Auf dieser Grundlage können Sie zwischen folgenden Technologien wählen:- SpringBoot – als Framework für unsere Anwendung,
- Spring Data – für die Arbeit mit einer Datenbank,
- Flyway – für die Arbeit mit Datenbankmigrationen,
- MySQL – als Datenbank für das Projekt,
- Telegrambot StringBoot Starter – eine Bibliothek für die Arbeit mit einem Telegram-Bot,
- Unirest ist eine Bibliothek zum Arbeiten mit REST-Anfragen.
Vorlage zur Aufgabenerstellung
Wir erstellen Aufgaben anhand der folgenden Vorlage:- Der Aufgabenname sieht folgendermaßen aus: JRTB-{IssueNumber}:{IssueDescription} , wobei:
- {IssueNumber} ist die Seriennummer der Ausgabe. Nehmen wir noch einmal das letzte Problem.
- {IssueDescription} – eine kurze Beschreibung des Problems.
- Im Hauptteil der Aufgabe werden wir sie ausführlicher beschreiben (manchmal kann es sein, dass sie mit der Beschreibung im Aufgabennamen übereinstimmt).
- Akzeptanzkriterien sind eine Liste von Anforderungen, nach deren Erfüllung die Aufgabe als abgeschlossen betrachtet werden kann. Sozusagen die Kriterien für die Annahme der Aufgabe. Mit ihnen kann ein Prüfer (vom englischen Reviewer – Reviewer – eine Person, die sich ansieht, wie eine Aufgabe erledigt wird) nachvollziehen, ob die Aufgabe vollständig erledigt ist oder nicht.
- [FEATURE] JRTB-0: Skeleton Spring Boot-Projekt erstellen – hier ist alles klar: Sie müssen den ersten Teil dessen tun, was wir im vorherigen Artikel getan haben.
- [FEATURE] JRTB-2: Fügen Sie dem Projekt einen Telegram-Bot hinzu – fügen Sie einen leeren Bot hinzu, der einfach antwortet und sagt, dass es ihm gut geht.
- [FEATURE] JRTB-3: Befehlsmuster für Telegrambot implementieren – richten wir den richtigen Ansatz für die Arbeit mit Befehlen in einem Telegrambot ein. Bisher für mehrere Teams.
- [FEATURE] JRTB-1: Repository-Ebene hinzufügen – das ist eine der größten Aufgaben – sie vereint alles, was für die Arbeit mit der Datenbank getan werden muss.
- [FEATURE] JRTB-5: Als Benutzer möchte ich die Gruppe zum Abonnement hinzufügen – dies ist bereits die erste User Story im Agile-Verständnis. Dies wird ein echter Vorteil für unsere Benutzer sein: Es wird möglich sein, dem Bot Gruppenabonnements hinzuzufügen.
- [FEATURE] JRTB-12: Implementieren Sie die Planung für das Senden von Benachrichtigungen über neue Artikel . Hier wird die Suche nach neuen Artikeln implementiert, wenn diese für jede der Gruppen veröffentlicht und an alle Benutzer gesendet werden, die die Gruppen abonniert haben.
- [FEATURE] JRTB-6: Als Benutzer möchte ich eine Liste meiner Gruppenabonnements sehen – hier ist alles ganz einfach: Wir fügen einen Befehl hinzu, der eine Liste aller Gruppen anzeigt, bei denen der Benutzer abonniert ist.
- [FEATURE] JRTB-7: Als Benutzer möchte ich das Gruppenabonnement aus meinen Abonnements entfernen – hier müssen Sie das Abonnement des Benutzers für Updates in der Gruppe entfernen.
- [FEATURE] JRTB-8: Als Benutzer möchte ich den Bot inaktiv setzen – implementieren, um den Bot zu stoppen. Das heißt, alles, was in unserem System getan werden muss, damit die Arbeit zum Stillstand kommt. Fügen Sie den Befehl /stop zur Verarbeitung hinzu.
- [FUNKTION] JRTB-9: Als Benutzer möchte ich mit der Arbeit mit dem Bot beginnen ODER ihn aktivieren, wenn ich ihn zuvor verwendet habe – Verarbeitung des /start-Befehls hinzufügen. Genau so, wie wir es wollen.
- [FEATURE] JRTB-10: Als Administrator möchte ich Bot-Statistiken sehen und eine Sammlung von Bot-Statistiken erstellen. Hinzufügen von Administratorfunktionen.
- [FEATURE] JRTB-11: Als Benutzer möchte ich die Dokumentation für diesen Telegram-Bot sehen – Dokumentation schreiben. Ja, ja, Freunde, ohne sie könnt ihr nicht leben, und je früher ihr das lernt, desto besser wird es für euch sein))
Ausfüllen des Repositorys
Was muss noch getan werden, BEVOR wir mit dem Codieren beginnen? - Autor, wie viele dieser Absätze können Sie hinzufügen? Ziehen Sie sie aus dem Abgrund? — Nein, die Qualität der Arbeit zeigt sich im Detail. Und sie sind diejenigen, die Sinn ergeben. Fügen wir also noch ein Detail hinzu. Damit das Projekt für andere Entwickler beliebt und verständlich wird, muss es ausgefüllt werden. Was soll ich hinzufügen? Eine vollständige Liste dessen, was getan werden kann, habe ich im Artikel Optimieren der Arbeit mit Ihren Projekten auf GitHub: Kennenlernen des Github Template Repository beschrieben . Ich empfehle dringend, es zu lesen. Für uns ist eine klare Versionierung wichtig, ein klares Verständnis dessen, was wir tun. Deshalb habe ich eine RELEASE_NOTES-Datei hinzugefügt, in der Änderungen an unserem Projekt aufgezeichnet werden. Als Beispiel können Sie sich RELEASE_NOTES aus meinem Projekt ansehen (ja, warum nicht zeigen, in was ich meine Energie und Kreativität gesteckt habe). Dort sind die Änderungen für jede neue Version beschrieben. Ich habe auch Vorlagen zum Erstellen neuer Aufgaben hinzugefügt, die vier Optionen bieten:- Bug Report ist eine Aufgabe, die von Benutzern/Testern erstellt wird, die einen Fehler in ihrer Arbeit finden. Das ist eine sehr wichtige Sache: Es hilft bei der Verwaltung von Fehlerbehebungen;
- Eine Funktionsanfrage ist eine Aufgabe zum Hinzufügen neuer Funktionen. Alle ersten Aufgaben im Projekt sind Funktionsanforderungsaufgaben.
- Verbesserungsanfrage – eine Aufgabe zur Verbesserung der Funktionsweise der Anwendung. Zum Beispiel, um Testantworten bei der Arbeit mit einem Bot zu ändern. Ich bin kein technischer Redakteur und kann nicht ganz richtige Antworten finden. Wenn Sie also den Wunsch und die Fähigkeit haben, bieten Sie es an :)
- Bei der Frage handelt es sich um eine Frage an die Entwickler zur Funktionsweise der Anwendung. Eine sehr nützliche Sache. Nehmen wir an, es besteht kein Verständnis für die Arbeit oder es bestehen Zweifel an einer Frage – auf diese Weise können Sie eine Frage stellen und eine Antwort aus erster Hand erhalten.
GO TO FULL VERSION