Architecture

Introduction

Vue physique

Dépendances

Nous avons utilisé :

  • Serveur

    • Java 11

    • Maven v3.9.1

    • Junit v4.11

    • Mockito v1.10.19

    • Jacoco v0.8.5

  • Client

    • Node 14

    • React 17

Besoins matériels

  • 3 à 7 navigateurs internet pour les Clients

  • 1 Serveur pour héberger notre serveur de jeu

Diagrammes

diagram
Figure 1. Exemple d’un diagramme de déploiement (niveau spécification)
diagram
Figure 2. Exemple d’un diagramme de déploiement (niveau instance)

Vue du développement

diagram
Figure 3. Organisation des modules coté Serveur
diagram
Figure 4. Organisation des modules coté Client

Organisation des modules en Java

Server

core

coreArchi

game-server

gameserverArchi

middleware

middlewareArchi

CLient

components

componentsArchi

pages

pagesArchi

utils

utilsArchi

Vue logique

Pour la vue logique les composants qui jouent un role communs sont le Core coté serveur et le components coté client.

Le Core défini toute la logique du jeu, il gere à la fois le GameManager, Card et les Player.

Le components permet de concentrer des plus petits composants que des pages entières, tout en permettant aussi la réutilisation entre différentes pages.

Vue technique : traduction de UML en code source

Règles de traduction des types de base

Table 1. Traduction des types de base
UML Java TypeScript

Integer

Integer

number

Boolean

Boolean

boolean

String

String

string

Real

float

number

Conventions de codage

Coté Java :

  • Les classes et les interfaces utilisent le PascalCase

  • Tous les noms de méthode et de variable utilisent le camelCase

  • Les variables sont en camelCase

Coté Typescript :

  • Les classes et les interfaces utilisent le PascalCase

  • Les noms de fichiers, qui sont des composants, utilisent le PascalCase

  • Les pages étant aussi des composants, utilisent le PascalCase

  • Les dossiers sont en hyphen-case

  • Les variables sont en camelCase

Conclusion

Coté server nous avons utilisé une structure modulable et non cyclique. Il n’y a aucune interdépendance et chaque package peut être remplacé facilement.

Coté client la même chose fut effectuée pour les composants et pour les classes et interfaces.