Rolland Garos錦標賽是國際網球錦標賽。
在Rolland Garos錦標賽中開發一個比賽的網絡管理。
該項目的功能作用該應用程序應該可以計劃比賽和計劃參與者將參加的比賽和計劃,裁判將監督它。然後,您必須能夠告知比賽結果(每個團隊的得分)。訪客應該能夠諮詢完成比賽的結果。
在進行項目時,我們對應用程序的操作做出了幾個假設,以確保後者的一致性:
假設1:
一個組織者在比賽中得分時定義了雙重比賽是男性,女性還是混合比賽。也就是說,如果他在同一支球隊中的男人和一個女人的雙打比賽中得分,比賽就會好壞參半。對於簡單的比賽,一個男人不可能面對女人,但是他並沒有被兩人組成的兩名男子麵對兩個女人的團隊而被禁止雙打。
假設2:
我們只有一個針對記者和組織者的應用程序,而不是兩個單獨的應用程序。因此,我們有一個主頁以及一個頁面,可以讓您查看匹配項,並且僅在連接後才能訪問其他操作(例如添加玩家,計劃匹配項等)(以了解有關使用的安全性的更多信息,請參閱報告的安全部分)。
假設3:
我們假設比賽最多可以持續4個小時。我們添加了一項功能,該功能可以檢查課程是免費的,然後才能為新比賽選擇它。因此,我們可以確保在同一課程中不能同時玩兩個不同的遊戲。 4小時的最大持續時間使我們能夠限制以便能夠選擇一門課程,即使計劃了比賽,但尚未在新比賽開始前4小時完成。
為了執行這個項目,我們使用敏捷方法組織了自己。
在項目開始時,我們編寫了以下應用程序的用戶帳戶:
這對應於以下用例圖:
然後,我們將這些用戶故事分為開發任務。
每個會話都與一個衝刺相對應:我們在會議開始時進行了會議,以確定哪些任務應成為項目的一部分。為了促進任務,我們使用了與Github集成的項目管理工具:插座,請求毛衣和看板桌。
任務由結果表示,可以分配給合作者。任務的進度之後是在看板上有插座。當員工完成任務後,他們創建了一件關聯的請求毛衣,並提交了代碼審查。
工作流量如下:


JSTL:JEE平台的一個組件,是通過為當前任務(例如假釋,循環和國際化工作)添加信標庫來擴展JSP規範。
MariaDB : Implémentation Open Source du Système de Gestion de
Base de Données Relationnel MySQL.
Jakartaee:Java EE的開源規範。我們特別使用JSP,servlet容器,EJB和JPA。
Bootstrap est un framework CSS permettant de facilement implémenter des styles
prédéfinis
Wildfly(以前是JBOSS)是實施Java EE / Jakarta EE規範的開源應用程序服務器。
EJB / Enterprise JavaBeans est une API de composants logiciels coté serveur
permettant d’encapsuler la logique métier des applications d’entreprise.
JPA(規格) / Hibernate(實現)是一個ORM,它允許您在關係數據庫管理系統中序列化和pearialize Java(EJB Entity)對象。
我們使用了由SO所謂的“乾淨體系結構”體系結構,也稱為“洋蔥”體系結構,由不同的層組成,由接口描述的服務合同相互脫鉤。當請求到達時,它首先由控制器處理,以從數據構建對象,然後通過包含業務邏輯的服務層。服務層要求使用包含與數據庫的交互的RESTORITY層。 RESTORITY層使用數據模型實體的類別。
在我們的應用程序中,每個層都對應以下組件:
我們使用了界面編程以及Java Beans公司允許的依賴項注入機制,以便在應用程序組件之間保持較低的耦合。
我們一直小心,不要將用戶密碼存儲在數據庫中。因此,如果要黑客入侵,攻擊者將無法訪問密碼。我們選擇使用bcrypt鹽的哈希算法切碎密碼,因為它是此問題的標準。為此,我們在項目(通過Maven)中導入了JBCrypt庫,該庫在Java中實現了算法。
在應用程序中,大多數道路應僅由身份驗證的用戶可以使用。因此,我們設置了一個身份驗證頁面來驗證用戶。我們使用HTTP會話來存儲已驗證的用戶配置文件。
為了允許在受保護的道路上使用用戶,我們已經設置了授權HTTP過濾器,該過濾器檢查當前的HTTP會話是否包含身份驗證的用戶配置文件。如果是這樣,則過濾器允許用戶,否則將其重定向到連接頁面。
我們通過在建模過程中定義了項目階層(我們的項目軟件包的實體)來開始實施項目。然後,我們創建了類和接口,使我們可以訪問數據庫(Restitories軟件包)。最後,我們已經實施了與我們的應用程序一起識別的可能性,以便同意某些協議以保持我們的項目相干。一旦完成這些步驟,我們通過給所有人提供一定數量的用戶故事來分配工作,然後完成工作,直到所有用戶故事都進行為止。
大多數用戶故事都很容易製作,除了用戶故事:準備比賽。在最初的申請模型中,我們代表了將玩家與比賽聯繫起來的“許多到許多”鏈接,我們並不對代表團隊的班級著迷(我們項目的參與課程)。因此,當我們嘗試在準備階段將玩家添加到遊戲中時,啟動了一個例外,並且沒有完成比賽準備。在更詳細地查看“許多與許多關係”關係的功能之後,我們意識到,在相同的兩個類別(在這裡有兩個將玩家連接到遊戲連接的關係)之間建立這種類型的兩種關係,因為總會有兩個團隊),而無需參加中級班級(這裡參與),以便能夠將比賽正確地將比賽與比賽聯繫起來。因此,我們必須修改我們的課程圖,以便能夠正確建模我們的新實現,並修改比賽和玩家商務類並添加參與類,以使我們的應用程序完美地工作。
遇到的第二個困難並不特別涉及用戶故事,而是一個數據編碼問題。在完成所有用戶故事的過程中,在我們的各種測試中,在我們的改進期間,我們注意到通常由UTF8支持的重音未正確存儲在數據庫中。確實,基礎上的所有重音字符都以另一種格式替換。在查看了互聯網之後,我們了解到問題來自Wildfly,為了解決該問題,我們只需要在Wildfly配置中更改Servlet容器的編碼即可。為此,我們只需要轉到Wildfly配置並通過UTF-8修改Servlet容器的默認編碼設置。
我們還遇到了日期格式的管理問題。我們在商務艙中使用LocalDate類型(Java中的最新日期API),以存儲匹配的預定日期。現在,JSTL沒有格式化此類日期的函數,因為它仍然使用舊的Java Date API。因此,我們必須在顯示日期的JSP頁面中執行手工格式化(例如,您可以在Consultmatches.jsp頁面中查看此格式)。
一旦克服了這些困難,我們就可以專注於改善應用程序並調整次要錯誤。
在此項目中,我們與Jakarta EE一起介紹了業務應用程序開發。儘管其中一些已經在服務器端的服務器上有經驗,但該項目是為了適應我們的平台開發標準
我們特別能夠在ORM JPA技術上建立技能,該技術提供非常豐富的API具有強大的功能。某些機制(例如“多到許多”關係)給了我們困難,但我們必須克服它們。
最後,該項目的協作方面是其優勢之一。確實,相互動機是一種強大的引擎,可讓您克服任何類型的難度。這也使我們有機會應用在其他模塊中獲得的敏捷項目管理技能,以便以最有效的方式進行協作。