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具有强大的功能。某些机制(例如“多到许多”关系)给了我们困难,但我们必须克服它们。
最后,该项目的协作方面是其优势之一。确实,相互动机是一种强大的引擎,可让您克服任何类型的难度。这也使我们有机会应用在其他模块中获得的敏捷项目管理技能,以便以最有效的方式进行协作。