1
Département Génie Informatique
IAGI-2
Atelier - Design Patterns –Strategy
Partie 1
1. Créer un nouveau projet :
a. Name: strategy-design-pattern-project,
b. Language: java,
c. Build System: Maven.
2. Dans le fichier [Link] ajouter la dépendance lombok :
[Link]
3. Créer les packages suivants :
a. database
b. dao
c. business
d. representation
4. Dans le package database créer une interface DatabaseFacade en ajoutant le prototype de la
méthode getDatabase. Dans le même package créer la classe CollectionDatabase qui implémente
l’interface DatabaseFacade.
5. Dans le package dao créer une interface EtudiantDAO en ajoutant les prototypes des méthodes
suivantes :
a. save(Etudiant etudiant)
b. update(Etudiant etudiant)
c. delete(Etudiant etudiant)
d. findAll()
e. findById(Long id)
f. findByEmail(String email)
g. …
6. Dans le même package créer 2 sous packages :
a. Dans le premier sous package (entities) créer l’entité Etudiant [Long id, String
name, String email, String password … ] en ajoutant les annotations suivantes :
i. @Data
ii. @NoArgsConstructor
iii. @AllArgsConstructor
iv. @Builder
b. Dans le deuxième sous package (repositories) créer la classe
EtudiantDAOCollection qui implémente l’interface EtudiantDAO.
7. Dans le package business créer une interface EtudiantManagerFacade en ajoutant les prototypes
des méthodes suivantes :
a. checkEmail(String email)
b. save(Etudiant etudiant)
c. update(Etudiant etudiant)
d. delete(Etudiant etudiant)
e. getAll()
f. getById(Long id)
g. getByEmail(String email)
h. …
8. Dans le même package créer la classe EtudiantManager qui implémente l’interface
EtudiantManagerFacade et redéfini les différentes méthodes.
9. Dans le package representation créer la classe de test.
10. Tester les différents services de l’application (utiliser le builder pour créer les différents objects).
BADR HIRCHOUA ([Link]@[Link])
2
Partie II
Dans la deuxième partie, nous voulons changer la base de données Collection par MySQL
1. Dans le package database créer la classe MySQLDatabase qui implémente l’interface
DatabaseFacade.
2. Dans le fichier [Link] ajouter la dépendance de mysql-connector :
[Link]
3. Redéfinir la méthode getDataBase comme suit :
public class MySQLDatabase implements DatabaseFacade {
private String driver = "[Link]";
private String bridge = "jdbc:mysql:";
private String host = "localhost:3306";
private String source = "studentmanager";
private String username = "root";
private String password = "votre-mot-de-passe";
private String url;
@Override
public Object databaseLayer() {
url = bridge + "//" + host + "/" + source;
Connection connection;
try {
connection = [Link](url, username, password);
if (connection!= null) {
[Link]("Connected");
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return connection;
}
}
4. Dans le package repositories créer la classe EtudiantDAOMySQL qui implémente l’interface
EtudiantDAO et redéfinie les différentes méthodes.
a. Commencer par injecter la dépendance suivante : private DatabaseFacade database
b. Ajouter un attribut de type connection : private Connection connection;
c. Créer en suite le constructeur avec le paramètre DatabaseFacade database:
public EtudiantDAOMySQL(DatabaseFacade databaseFacade) {
[Link] = databaseFacade;
[Link] = (Connection) [Link]();
}
d. La redéfinition de la méthode save(Etudiant etudiant) est la suivante :
@Override
public Etudiant save(Etudiant etudiant) {
String query = "INSERT INTO student VALUES (" + [Link]() + ",'" + [Link]() … )";
try {
Statement sql = [Link]();
int rs = [Link](query);
return etudiant;
} catch (Exception e) {
[Link]("Erreur d'inscription: " + [Link]());
return null;
}
}
BADR HIRCHOUA ([Link]@[Link])
3
5. Créer une base de données avec le nom studentmanager, et créer la table student comme
suit :
• Create database studentmanager ;
• CREATE TABLE `studentmanager`.`student` ( `idStudent` DOUBLE NOT NULL,
`name` VARCHAR(45) NOT NULL, `email` VARCHAR(45) NOT NULL, `password`
VARCHAR(45) NOT NULL, UNIQUE INDEX `email_UNIQUE` (`email` ASC)
VISIBLE, PRIMARY KEY (`idStudent`));
6. Dans la classe de test changer la stratégie de base de données collection par MySQL, et tester
l’application.
BADR HIRCHOUA ([Link]@[Link])