Das Rolland Garos -Turnier ist ein internationales Tennis -Turnier.
Entwickeln Sie ein Webmanagement von Spielen im Rolland Garos -Turnier.
Funktionelle Rolle des Projekts Die Anwendung sollte es ermöglichen, die Übereinstimmungen zu planen und zu planen, an denen die Spieler teilnehmen werden, an denen Schiedsrichter sie überwachen wird. Dann müssen Sie in der Lage sein, die Ergebnisse des Spiels (die Punktzahlen jedes Teams) zu informieren. Besucher sollten in der Lage sein, die Ergebnisse der fertigen Spiele zu konsultieren.
Bei der Durchführung unseres Projekts haben wir mehrere Annahmen über die Operation getroffen, die wir uns für unsere Anwendung vorgestellt haben, und um die Konsistenz des letzteren zu gewährleisten:
Hypothese 1:
Ein Organisator definiert sich, wenn die Doppelspiele männliche, weibliche oder gemischte Spiele sind, als er die Spieler in einem Spiel erzielte. Das heißt, wenn er im doppelten Spiel einen Mann und eine Frau im selben Team erzielt hat, ist das Match gemischt. Für einfache Spiele ist es für einen Mann nicht möglich, sich einer Frau zu stellen, aber es ist ihm nicht verboten, dass ein Team von zwei Männern einem Team von zwei Frauen ausgesetzt ist.
Hypothese 2:
Wir haben nur eine Bewerbung für Journalisten und Organisatoren und nicht für zwei separate Anwendungen. Wir haben also eine Homepage sowie eine Seite, auf der Sie die abgeschlossenen Übereinstimmungen sehen können, und die anderen Aktionen (z. B. Hinzufügen von Spielern, Planungsübereinstimmungen usw.) sind erst nach einer Verbindung zugänglich (um mehr über die verwendete Sicherheit zu erfahren, siehe Sicherheitsteil des Berichts).
Hypothese 3:
Wir stellten die Hypothese auf, dass die Übereinstimmungen maximal 4 Stunden dauern könnten. Wir haben eine Funktion hinzugefügt, die überprüft, ob ein Kurs kostenlos ist, bevor wir ihn für eine neue Übereinstimmung auswählen können. Wir können daher sicherstellen, dass zwei verschiedene Spiele auf demselben Kurs nicht gleichzeitig gespielt werden können. Die maximale Dauer von 4 Stunden ermöglicht es uns, ein Limit einzulegen, um einen Kurs auszuwählen, auch wenn ein Match geplant ist, aber noch nicht 4 Stunden vor Beginn des neuen Spiels abgeschlossen ist.
Um dieses Projekt durchzuführen, haben wir uns mit der agilen Methode organisiert.
Zu Beginn des Projekts haben wir Benutzerkonten der folgenden Anwendung geschrieben:
Dies entspricht dem folgenden Anwendungsfalldiagramm:
Wir haben diese Benutzergeschichten dann in Entwicklungsaufgaben unterteilt.
Jede Sitzung entsprach einem Sprint: Wir haben zu Beginn der Sitzung ein Treffen durchgeführt, um festzustellen, welche Aufgaben Teil des Projekts sein sollten. Um die Aufgabe zu erleichtern, haben wir die in GitHub integrierten Projektmanagement -Tools verwendet: die Outlets, den Anforderungspullover und die Kanban -Tabelle.
Die Aufgaben wurden durch das Ergebnis dargestellt, die einem Mitarbeiter zugeordnet werden können. Auf den Fortschritt der Aufgaben folgte die Verkaufsstellen auf dem Kanban -Tisch. Als ein Mitarbeiter eine Aufgabe beendet hatte, erstellten sie einen zugehörigen Anforderungspullover und haben sie für eine Codeüberprüfung eingereicht.
Der Workflow war wie folgt:


JSTL: Eine Komponente der JEE -Plattform, um die JSP -Spezifikation zu erweitern, indem eine Bibliothek von Beacons für aktuelle Aufgaben hinzugefügt wird, z. B. Arbeiten zu Bewährung, Schleifen und Internationalisierung.
MariaDB : Implémentation Open Source du Système de Gestion de
Base de Données Relationnel MySQL.
Jakartaee: Open Source -Spezifikation von Java ee. Wir verwenden insbesondere JSP, die Servlet Container, die EJB und JPA.
Bootstrap est un framework CSS permettant de facilement implémenter des styles
prédéfinis
Wildfly (ehemals JBoss) ist ein Open -Source -Anwendungsserver, der die Spezifikation von Java EE / Jakarta EE implementiert.
EJB / Enterprise JavaBeans est une API de composants logiciels coté serveur
permettant d’encapsuler la logique métier des applications d’entreprise.
JPA (Spezifikation) / Hibernate (Implementierung) ist ein ORM, mit dem Sie Java -Objekte (EJB -Entität) in einem relationalen Datenbankverwaltungssystem serialisieren und lieb sind.
Wir verwendeten die sogenannte SO -Architektur „Clean Architecture“, auch als „Zwiebel“ -Scharchitektur, die aus verschiedenen Schichten bestanden und durch Serviceverträge, die von Schnittstellen beschrieben wurden, entkoppelt. Wenn eine Anfrage eintrifft, wird sie zunächst vom Controller verarbeitet, um Objekte aus den Daten zu erstellen. Dann wird sie über die Serviceschicht geleitet, die die Geschäftslogik enthält. Die Serviceschicht fordert die Restaurantschicht, die Interaktionen mit der Datenbank enthält. Die Restaurantschicht verwendet die Klassen der Entitäten des Datenmodells.
In unserer unserer Anwendung entspricht jede Schicht den folgenden Komponenten:
Wir haben die Interface -Programmierung sowie den Abhängigkeitsinjektionsmechanismus verwendet, der von Java Beans -Unternehmen zulässig ist, um eine geringe Kopplung zwischen den Anwendungskomponenten zu haben.
Wir haben darauf geachtet, Benutzerkennwörter in der Datenbank nicht zu speichern. Wenn letztere gehackt werden würden, hätten die Angreifer keinen Zugriff auf Passwörter. Wir haben uns entschieden, Passkennwörter mit dem Salzenhash -Algorithmus von Bcrypt zu hacken, da dies der Standard in dieser Angelegenheit ist. Zu diesem Zweck haben wir die JBCrypt -Bibliothek in unser Projekt (über Maven) importiert, das den Algorithmus in Java implementiert.
In der Anwendung sollten die meisten Straßen nur von einem authentifizierten Benutzer zugänglich sein. Wir haben daher eine Authentifizierungsseite eingerichtet, um den Benutzer zu authentifizieren. Wir verwenden die HTTP -Sitzung, um das authentifizierte Benutzerprofil zu speichern.
Um einem Benutzer auf den geschützten Straßen zuzulassen, haben wir einen HTTP -Filter eingerichtet, der überprüft, ob die aktuelle HTTP -Sitzung ein authentifiziertes Benutzerprofil enthält. In diesem Fall erlaubt der Filter den Benutzer, andernfalls leitet er ihn auf die Verbindungsseite um.
Wir haben die Implementierung des Projekts begonnen, indem wir die Business -Klassen (Unternehmen unseres Projektpakets) erstellt haben, wie wir sie während der Modellierung definiert hatten. Anschließend haben wir die Klassen und die Schnittstellen erstellt, sodass wir auf die Datenbank zugreifen können (Restitories -Pakete). Schließlich haben wir die Möglichkeit implementiert, mit unserer Bewerbung alle zusammen zu identifizieren, um sich auf bestimmte Vereinbarungen zu einigen, um unser Projekt kohärent zu halten. Sobald diese Schritte abgeschlossen waren, haben wir die Arbeiten geteilt, indem wir jedem eine bestimmte Anzahl von Benutzergeschichten gegeben haben, die Arbeiten erledigt wurden, bis alle Benutzergeschichten durchgeführt wurden.
Die meisten Benutzergeschichten waren leicht zu erstellen, außer als Benutzergeschichte: Vorbereiten eines Übereinstimmung. Während unserer ersten Anwendungsmodellierung hatten wir die „vielen zu vielen“ Links, die die Spieler mit den Spielen verbinden, schlecht dargestellt. Wir sind nicht fasziniert von einer Klasse, die die Teams darstellt (Teilnahmekurse in unserem Projekt). Als wir versuchen, während der Vorbereitungsphase Spieler zu Spielen hinzuzufügen, wurde eine Ausnahme gestartet und die Vorbereitung des Spiels wurde nicht durchgeführt. Nachdem wir die Funktionsweise der „vielen zu vielen“ Beziehungen ausführlicher angesehen hatten, stellten wir fest, dass es unmöglich war, zwei Beziehungen dieser Art zwischen denselben zwei Klassen (hier zwei Beziehungen zu verbinden, die die Spieler mit den Spielen verbanden, da es immer zwei Teams gibt), ohne eine Zwischenklasse (hier Teilnahme) durchzugehen (hier Teilnahme), um die Spieler richtig mit den Spielen zu assoziieren. Wir mussten daher unser Klassendiagramm ändern, um unsere neue Implementierung ordnungsgemäß modellieren zu können, sowie die Business -Klassen für Match- und Spieler zu ändern und die Teilnahmeklasse hinzuzufügen, um unsere Anwendung perfekt zu gestalten.
Die zweite Schwierigkeit, die aufgetreten ist, betrifft nicht insbesondere eine Benutzergeschichte, sondern ein Datencodierungsproblem. Nachdem wir alle unsere Benutzergeschichten, während unserer verschiedenen Tests und während unserer Verbesserungen beendet hatten, bemerkten wir, dass die Akzente, die normalerweise vom UTF8 unterstützt wurden, in der Datenbank nicht ordnungsgemäß gespeichert wurden. In der Tat wurden alle Akzentzeichen in der Basis in einem anderen Format ersetzt. Nachdem wir uns das Internet angesehen hatten, verstanden wir, dass das Problem von Wildfly stammte, und um es zu lösen, mussten wir daher einfach die Codierung des Servlet -Containers in der Wildfly -Konfiguration ändern. Dazu mussten wir nur zur Wildfly-Konfiguration gehen und die Standard-Codierungseinstellungen des Servlet-Containers durch UTF-8 ändern.
Wir haben auch Probleme mit der Verwaltung des Datenformates gestoßen. Wir verwenden den LocalDate -Typ (letztes Datums -API in Java) in unserer Business -Klasse, um das geplante Datum einer Spiele beispielsweise zu speichern. Jetzt hat JSTL keine Funktion, um diese Art von Daten zu formatieren, da sie die alte Java -Datum -API immer noch verwendet. Wir mussten daher eine Handformatierung auf den JSP -Seiten ausführen, auf denen Daten angezeigt wurden (Sie können diese Formatierung beispielsweise auf der Seite "ConsultMatches.jsp) sehen).
Sobald diese Schwierigkeiten überwunden wurden, konnten wir uns darauf konzentrieren, unsere Anwendung zu verbessern und kleinere Fehler anzupassen.
Während dieses Projekts wurden wir mit Jakarta EE in die Entwicklung der Geschäftsanwendungen eingeführt. Obwohl einige von ihnen bereits Erfahrung auf der Server auf der Serverseite hatten, war dieses Projekt für den Anlass, uns die Plattformentwicklungsstandards zu angemessen
Wir konnten in der ORM -JPA -Technologie, die eine sehr reiche API bieten, mächtig an. Bestimmte Mechanismen wie die "vielen zu vielen" Beziehungen haben uns Schwierigkeiten gegeben, aber wir müssen sie überwinden.
Schließlich ist der kollaborative Aspekt dieses Projekts eine ihrer Stärken. In der Tat ist die gegenseitige Motivation ein leistungsstarker Motor, der es Ihnen ermöglicht, jede Art von Schwierigkeit zu überwinden. Dies hat uns auch die Möglichkeit gegeben, agile Projektmanagementfähigkeiten anzuwenden, die in anderen Modulen erworben wurden, um auf die effizienteste Weise zusammenzuarbeiten.