Heim > Java > javaLernprogramm > Hauptteil

Eintauchen in ein Java-Projekt

Patricia Arquette
Freigeben: 2024-11-03 09:05:30
Original
150 Leute haben es durchsucht

Für meinen letzten Hacktoberfest-Beitrag habe ich an einem Projekt namens Bytechef gearbeitet. Bytechef ist eine Low-Code-API-Integrations- und Workflow-Automatisierungsplattform. Sie können mit einer großen Liste unterstützter Dienste über deren APIs interagieren, indem Sie verschiedene Komponenten hinzufügen und verbinden, um Kontrollflüsse zu erstellen, die die Antworten der APIs verwenden können.

Dipping Into a Java Project bytechefhq / Bytechef

Open-Source-Plattform für erweiterbare API-Integration und Workflow-Automatisierung mit geringem Codeaufwand. Integrieren Sie Ihre Organisationen oder Ihr SaaS-Produkt mit einer beliebigen Drittanbieter-API

Dipping Into a Java Project

API-Integrations- und Workflow-Automatisierungsplattform

Website – Dokumentation – Discord – Twitter

Dipping Into a Java Project Dipping Into a Java Project

UPDATE: ByteChef befindet sich in der aktiven Entwicklung. Wir befinden uns in der Alpha-Phase und einige Funktionen fehlen möglicherweise oder sind deaktiviert.

Dipping Into a Java Project

Was ist ByteChef?

ByteChef ist eine Open-Source-, Low-Code- und erweiterbare API-Integrations- und Workflow-Automatisierungsplattform. ByteChef kann Ihnen helfen als:

  • Eine Automatisierungslösung, mit der Sie Automatisierungsworkflows in Ihre SaaS-Apps, internen APIs und Datenbanken integrieren und erstellen können.
  • Eine eingebettete Lösung, die speziell auf SaaS-Produkte ausgerichtet ist und es Ihren Kunden ermöglicht, von ihnen verwendete Anwendungen in Ihr Produkt zu integrieren.

Hauptfunktionen

  • Intuitiver UI-Workflow-Editor: Erstellen und visualisieren Sie Workflows über den UI-Editor, indem Sie Komponenten per Drag-and-Drop verschieben und ihre Beziehungen definieren.
  • Ereignisgesteuerte und geplante Arbeitsabläufe: Automatisieren Sie geplante und ereignisgesteuerte Arbeitsabläufe in Echtzeit über eine einfache Triggerdefinition.
  • Mehrere Flusskontrollen: Nutzen Sie die Palette verschiedener Flusskontrollen wie Bedingung, Schalter, Schleife, jeweils, parallel usw.
  • Eingebauter Code…
Auf GitHub ansehen

Meine Aufgabe bestand darin, einer Komponente für einen Datenbankdienst namens Baserow eine neue Funktion hinzuzufügen. Die Funktion, an der ich arbeiten musste, war eine „Aktion“ (d. h. eine Funktion der Komponente), die es der Komponente ermöglichte, eine Zeile in der Datenbank zu aktualisieren.

Baserow – Aktion „Zeile aktualisieren“. #1645

Dipping Into a Java Project
monikakuster veröffentlicht am

Implementieren Sie die Aktion „Zeile aktualisieren“ für die Baserow-Komponente, um Benutzern das Ändern bestimmter Zeilen innerhalb einer Tabelle in ihrer Baserow-Datenbank zu ermöglichen.

Aktionseigenschaften:

  • Tabellen-ID – ID der Tabelle, für die Sie eine Zeile aktualisieren möchten
  • Zeilen-ID – ID der Zeile, die Sie aktualisieren möchten
  • user_field_names – Ein boolescher Wert, der angibt, ob die von diesem Endpunkt zurückgegebenen Feldnamen die tatsächlichen Namen der Felder sein sollen
  • Felder – eine Karte der Felder und ihrer neuen Werte für die Tabelle. Diese Eigenschaft gibt die in der Zeile zu aktualisierenden Daten an, sodass Benutzer mehrere Felder in einem einzigen Vorgang ändern können.

Ausgabe:

  • Zeile – aktualisiertes Zeilenobjekt, das alle Datenfelder und Werte enthält, die der Zeile in der angegebenen Tabelle zugeordnet sind

Dokumentationsreferenz: https://baserow.io/api-docs

</div>
<div class="gh-btn-container"><a class="gh-btn" href="https://github.com/bytechefhq/bytechef/issues/1645">View on GitHub</a></div>
Nach dem Login kopieren


Ich habe Java nur sehr wenig verwendet, bevor ich mich für dieses Problem angemeldet habe. Ich habe im Rahmen eines Schulkurses bisher nur kleine JavaFX-Programme erstellt, wollte aber schon immer mehr lernen. Ich hatte in meiner Freizeit ein wenig davon gelernt, sodass ich mit Konzepten wie Paketen, Zugriffsmodifikatoren, Abhängigkeiten und Gradle, dem vom Projekt verwendeten Build-Tool, einigermaßen vertraut war. Das Wissen darüber machte es definitiv viel weniger einschüchternd, in dieses Projekt einzusteigen. Ich habe die Projektstruktur verstanden, weil ich gelernt hatte, wie Gradle-Projekte aus Unterprojekten und Unterpaketen mit jeweils unterschiedlichen Build-Konfigurationen bestehen.

Meine Klassenkameradin Arina bemerkte, dass wir beide am selben Projekt arbeiteten, und sie war so freundlich, mir einige Hinweise zu geben, indem sie auf die Entwicklerdokumentation zum Hinzufügen einer Komponente und auf eine Aktion verlinkte, die bereits für die Komponente definiert worden war. Das bedeutete, dass ich das Repository nicht selbst durchsuchen musste, um die relevanten Dateien/Verzeichnisse zu finden. Aber wenn ich müsste, hätte ich Git Grep, die Codesuche von GitHub oder die Suche von IntelliJ verwendet. Ich habe Git Blame verwendet, um den Verlauf der Komponente zu überprüfen, an der ich arbeiten wollte, und habe festgestellt, dass alles in einem Commit entwickelt wurde.

Die beitragenden Dokumente des Projekts waren sehr einfach zu befolgen und enthielten detaillierte Schritt-für-Schritt-Anweisungen. Aber das Projekt schien noch sehr jung zu sein – mir sind ein paar README-Dateien aufgefallen, in denen nur //TODO.

stand

Ich habe versucht, das Programm zu kompilieren und auszuführen, bevor ich meine Änderungen vorgenommen habe, um zu sehen, wie es funktioniert, aber es war ein schwieriger Prozess. Hier ist ein Blick auf die Notizen, die ich gemacht habe:

Dipping Into a Java Project

Nachdem die Kompilierung abgeschlossen war (was über eine Stunde gedauert hat), habe ich sie ausgeführt, damit ich die vorhandene Komponente überprüfen konnte. Ich habe versucht, ein Konto für die Verwendung des Clients zu erstellen, aber das ließ sich nicht zulassen. Also ging ich zurück zum beitragenden Dokument und stellte fest, dass es ein Administratorkonto enthält, das für die Entwicklung verwendet werden kann und das meiner Meinung nach erstellt wird, wenn Sie Docker ausführen -komponieren.

Sobald ich angemeldet war, habe ich versucht, eine Baserow-Komponente zu erstellen, aber der Client war etwas langsam, sodass ich versehentlich ein Duplikat erstellt habe. Als ich versuchte, es zu löschen, fror der Client ein, also klickte ich auf „Aktualisieren“ und bekam Serverfehler und eine Zeitüberschreitung des Clients. Ich habe versucht, den Server und den Client neu zu starten, aber es hat lange gedauert – es schien mir, als würde es wieder eine Stunde dauern. Nachdem ich ungefähr 16 Minuten gewartet hatte, gab ich Schluss und beschloss, später daran zu arbeiten.

4 Tage später

Ich fürchtete mich davor, zu diesem Projekt zurückzukehren und mich mit der einstündigen Kompilierungszeit auseinandersetzen zu müssen, aber da sich das Hacktoberfest seinem Ende näherte, hatte ich keine große Wahl. Stellen Sie sich also meine Überraschung vor, als das Projekt ohne Fehler erstellt wurde und in weniger als fünf Minuten betriebsbereit war. Was hat sich geändert? Ich habe keine Ahnung.

Also bin ich auf den Client gesprungen und habe die Baserow-Komponente gefunden.

Dipping Into a Java Project
Abbildung – Die Baserow-Komponente und die darauf vorhandenen Aktionen

Um die Aktion „Zeile erstellen“ hinzuzufügen, musste ich mir die Baserow-API-Dokumentation ansehen, die mir vom Betreuer verlinkt wurde. Ich musste ein Baserow-Konto erstellen, um die Dokumente anzuzeigen, was ich etwas seltsam fand, aber es war auch keine große Sache.

Also habe ich die vorhandene Aktion „Zeile erstellen“ getestet und bin auf einen Fehler gestoßen, bei dem auf der gesamten Seite eine Fehlermeldung angezeigt wurde. Ich dachte, ich hätte einen unerwarteten Wert eingegeben, aber später stellte ich fest, dass dieser Fehler bereits von einem separaten Problem verfolgt wurde, das nichts mit meinem zu tun hatte.

Bei einem anschließenden Testversuch war die Aktion „Zeile erstellen“ erfolgreich, daher entschied ich, dass es sich gut eignet, sie zu untersuchen, um zu verstehen, wie Aktionen erstellt werden. Anschließend habe ich Querverweise auf das Problem, die bestehende Maßnahme und die beitragenden Dokumente erstellt.

Ich habe gelernt, dass Aktionen durch die Definition der erforderlichen Eingabeparameter, des Ausgabeschemas und einer Methode erstellt werden, die den tatsächlichen Prozess definiert, den die Aktion ausführt.

In der Aktion „Zeile erstellen“ habe ich gesehen, dass es eine Methode zum Abrufen der Felder für eine Zeile der Tabelle gibt, die zum Definieren der Eingabeparameter verwendet wurde. Mir wurde klar, dass ich dies in meiner Aktion verwenden könnte, aber der Name war so, als ob er nur für die Aktion „Zeile erstellen“ gedacht wäre. Ich hielt es für sinnvoll, es zu verwenden, also nutzte ich es und beschloss, es den Betreuern mitzuteilen.

Beim Lesen der Baserow-API-Dokumente habe ich erfahren, dass man zum Aktualisieren einer Zeile eine HTTP-Methode namens „PATCH“ verwendet, von der ich nicht einmal wusste, dass sie existiert. Ein PATCH ist wie ein PUT, aber anstatt die Ressource zu ersetzen, verändert er sie teilweise. Interessantes Zeug.

Also begann ich tatsächlich, meine Aktion zu schreiben, und konnte so ziemlich den gesamten Code aus der vorhandenen Aktion übernehmen. Ich musste nur geringfügige Anpassungen an den akzeptierten Parametern vornehmen (ich habe eine Zeilen-ID hinzugefügt, um die zu aktualisierende Zeile zu identifizieren), dem Ausgabeschema und der aufgerufenen Methode (Endpunkt und HTTP-Methode geändert). Um die Zeilen-ID zu berücksichtigen, musste ich einer Datei im Unterverzeichnis „constant/“ eine Konstante hinzufügen, die alle mit der Baserow-Komponente verbundenen Konstanten enthielt.

Mir ist aufgefallen, dass alle vorhandenen Quellcodedateien einen Lizenzheader hatten, also habe ich ihn auch in meine kopiert. Ich habe meine Importe organisiert, meinen Code formatiert und es war Zeit, ihn manuell zu testen.

An diesem Punkt ist mir aufgefallen, dass die Beschreibung für die Aktion „Zeile erstellen“ (die bereits existierte) falsch war – es hieß, sie erstelle eine Zeile in einer Beispieldatenbank in Baserow, auf die sie namentlich verwies, anstatt nur zu sagen, dass man sie erstellen könne eine Reihe. Ich habe mir vorgenommen, dies auch den Betreuern mitzuteilen:

Dipping Into a Java Project
Abbildung – Falsche Beschreibung für die Komponente „Zeile erstellen“

Meine Aktion wurde im Client angezeigt und optisch sah alles gut aus:

Der Titel und die Beschreibung wurden angezeigt:
Dipping Into a Java Project

Die Eigenschaften (d. h. Eingabeparameter) wurden angezeigt:

Dipping Into a Java Project

Der Workflow wurde erfolgreich ausgeführt und ich habe eine erfolgreiche Antwort erhalten:

Dipping Into a Java Project

Und die Tabelle wurde in meinem Baserow-Konto aktualisiert:

Dipping Into a Java Project

Ich war mit meinen Änderungen zufrieden, also habe ich das Formatierungsprogramm und die Tests ausgeführt, aber die Tests schlugen fehl, weil bei einem der Tests erwartet wurde, dass die Baserow-Komponente nur eine Aktion ausführen würde. Ich habe den Test aktualisiert, um ihn an meine neue Aktion anzupassen, und ein Skript ausgeführt, das automatisch eine Dokumentation für die Komponente generierte. Als ich die Tests erneut durchführte, wurden sie bestanden, ich musste jedoch noch einen Komponententest für meine Aktion hinzufügen. Ich habe mir den Komponententest für die vorhandene Komponente angesehen und war ratlos. Ich kam zu dem Schluss, dass ich gute Fortschritte gemacht hatte, also machte ich Schluss, erstellte einen PR-Entwurf und informierte den Betreuer über die Probleme, die mir aufgefallen waren.

Am nächsten Tag

Obwohl der vorhandene Test beängstigend aussah, blieb mir nicht viel anderes übrig, als auch einen für meine Aktion hinzuzufügen, also ging ich zurück und versuchte zu verstehen, was im vorhandenen Test vor sich ging. Ich habe mir die verwendeten Testbibliotheken ein wenig angesehen – JUnit Jupiter und Mockito. Ich habe versucht, es Stück für Stück aufzuschlüsseln, und habe ein LLM verwendet, um zu verstehen, was in jeder Zeile vor sich ging. Aber um ehrlich zu sein, hatte ich immer noch nur eine vage Vorstellung davon, was vor sich ging. Ich wusste, dass ich mich über die Baserow-API lustig machte und die Methode meiner Aktion darauf aufrief, aber das war auch schon der Rahmen meines Verständnisses.

Anscheinend war es aber gut genug. Ich habe meine PR als zur Überprüfung bereit markiert und der Betreuer hat meine Änderungen akzeptiert! Sie gaben einige Rückmeldungen – ich habe einige Teile des Beitragsflusses vergessen, obwohl ich sie gelesen hatte. Beim nächsten Mal sollte ich die beitragenden Dokumente überprüfen, bevor ich die Pull-Anfrage erstelle.

Erstellen Sie die Aktion „Zeile aktualisieren“ für die Baserow-Komponente #1656

Dipping Into a Java Project
uday-rana veröffentlicht am

Beschreibung

Behebt #1645

Art der Änderung

  • Neue Funktion (nicht unterbrechende Änderung, die Funktionalität hinzufügt)
  • Diese Änderung erfordert eine Aktualisierung der Dokumentation

Wie wurde das getestet?

  • Getestet mit dem BaserowComponentHandler-Definitionstest, der aktualisiert wurde, um die neue Aktion zu berücksichtigen.
  • Manuell getestete Aktion durch den Kunden:

Dipping Into a Java Project

Dipping Into a Java Project

Dipping Into a Java Project

Checkliste:

  • [x] Mein Code folgt den Stilrichtlinien dieses Projekts
  • [x] Ich habe eine Selbstüberprüfung meines eigenen Codes durchgeführt
  • [ ] Ich habe meinen Code kommentiert, insbesondere in schwer verständlichen Bereichen
    • Keine Kommentare als notwendig erachtet, da die bestehende Aktion auch keine Kommentare enthält
  • [x] Ich habe entsprechende Änderungen an der Dokumentation vorgenommen
  • [x] Meine Änderungen generieren keine neuen Warnungen
  • [x] Ich habe Tests hinzugefügt, die beweisen, dass mein Fix effektiv ist oder dass meine Funktion funktioniert
  • [x] Neue und bestehende Unit-Tests werden lokal mit meinen Änderungen bestanden
Auf GitHub ansehen

Ich empfand die anfängliche Einrichtung und das Schreiben des Tests als die einschüchterndsten Teile dieses Problems. Das Hinzufügen der Funktion war im Vergleich dazu ein Kinderspiel. Aber was ich an diesem Problem wirklich cool fand, war, dass ich dank der gut gepflegten Dokumentation und des leicht verständlichen Codes zu einem Projekt in einer Sprache beitragen konnte, die ich nicht so gut kannte.

Und das war meine letzte PR für das Hacktoberfest 2024! Zusammenfassungsbeitrag folgt bald!

Das obige ist der detaillierte Inhalt vonEintauchen in ein Java-Projekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!