Les entités
Dans cette section, nous allons revisiter les classes que nous avons écrites lors du jour 1.
Info
Nous appelons généralement Entité, une classe de domaine qui est la représentation classe d'une table dans la base de données. Dans ce cas, chaque ligne de ladite table est une instance d'objet de ladite classe.
Correspondance entre les types SQL et Java :
Types SQL | Types Java |
---|---|
BIGSERIAL : BIGINT auto-incrementé |
long |
CHAR(n) |
String |
VARCHAR : CHAR(n) avec une longueur variable |
String |
DOUBLE PRECISION |
double |
INT |
int |
Builder pattern
Partons du principe que, lorsque l'on crée un voyage, on ne connaît pas toutes les informations dès le départ. On voudrait donc pouvoir créer un objet voyage en se passant de certains attributs, pour les préciser dans un second temps.
Pour créer un Travel
avec uniquement un nom, nombre de places, aéroport de départ et d'arrivée, on doit appeler le
constructeur avec des valeurs nulles.
// Create
Travel travel = new Travel(
1,
"Voyage vers les montagnes",
20,
Airport.PARIS_CHARLES_DE_GAULLE,
Airport.TOKYO_HANEDA,
Instant.now(),
Instant.now().plusSeconds(86400),
"France",
0.0, //null
null, //disocunts
null, //participants
null; //waitList
Le constructeur ci-dessus n'est pas très pratique, car il nécessite un grand nombre de paramètres dans un ordre très spécifique. Le design pattern Builder est une bonne solution pour contourner ce problème.
Travel.Builder
- Créez une nouvelle classe statique
Builder
à l'intérieur de la classeTravel
.
Travel.Builder
public class Travel {
// ...
public static Builder builder() {
return new Builder();
}
public static Builder builder(Travel travel) {
return new Builder(travel);
}
public static final class Builder {
private Long id;
private String name;
private Airport departureAirport;
private Airport arrivalAirport;
private Instant departureDate;
private Instant arrivalDate;
private String destination;
private int capacity;
private double price;
private List<Discount> discounts;
private Set<User> participants;
private Queue<User> waitingParticipants;
public Builder() {
}
public Builder(Travel travel) {
this.id = travel.id;
this.name = travel.name;
this.departureAirport = travel.departureAirport;
this.arrivalAirport = travel.arrivalAirport;
this.departureDate = travel.departureDate;
this.arrivalDate = travel.arrivalDate;
this.destination = travel.destination;
this.capacity = travel.capacity;
this.price = travel.price;
this.discounts = travel.discounts;
this.participants = travel.participants;
this.waitingParticipants = travel.waitingParticipants;
}
public Builder id(Long id) {
this.id = id;
return this;
}
public Builder name(String name) {
this.name = name;
return this;
}
public Builder departureAirport(Airport departureAirport) {
this.departureAirport = departureAirport;
return this;
}
public Builder arrivalAirport(Airport arrivalAirport) {
this.arrivalAirport = arrivalAirport;
return this;
}
public Builder departureDate(Instant departureDate) {
this.departureDate = departureDate;
return this;
}
public Builder arrivalDate(Instant arrivalDate) {
this.arrivalDate = arrivalDate;
return this;
}
public Builder destination(String destination) {
this.destination = destination;
return this;
}
public Builder capacity(int capacity) {
this.capacity = capacity;
return this;
}
public Builder price(double price) {
this.price = price;
return this;
}
public Builder disocunts(List<Discount> discounts) {
this.discounts = discounts;
return this;
}
public Builder participants(List<User> participants) {
this.participants = participants;
return this;
}
public Builder waitingParticipants(List<User> waitingParticipants) {
this.waitingParticipants = waitingParticipants;
return this;
}
public Travel build() {
return new Travel(id, name, departureAirport, arrivalAirport, departureDate, arrivalDate,
destination, capacity, price, discounts, participants, waitingParticipants);
}
}
}
On pourra utiliser ce builder afin de créer des Travel
comme suit :
À vous de jouer
Maintenant, c'est à vous de réaliser le User.Builder
.
Fichiers modifiés
src/main/java/io/takima/agencymanagement/App.java
src/main/java/io/takima/agencymanagement/model/Travel.java
src/main/java/io/takima/agencymanagement/model/User.java
N'oubliez pas de Commit
votre travail !