J'ai deux objets qui représentent un «Bar / Club» (un endroit où vous buvez / socialisez).
Dans un scénario, j'ai besoin du nom de la barre, de l'adresse, de la distance, du slogon
Dans un autre scénario, j'ai besoin du nom de la barre, de l'adresse, de l'URL du site Web, du logo
J'ai donc deux objets représentant la même chose mais avec des champs différents.
J'aime utiliser des objets immuables, donc tous les champs sont définis à partir du constructeur .
Une option consiste à avoir deux constructeurs et à annuler les autres champs, à savoir:
class Bar {
private final String name;
private final Distance distance;
private final Url url;
public Bar(String name, Distance distance){
this.name = name;
this.distance = distance;
this.url = null;
}
public Bar(String name, Url url){
this.name = name;
this.distance = null;
this.url = url;
}
// getters
}
Je n'aime pas ça car il faudrait vérifier la valeur nulle lorsque vous utilisez les getters
Dans mon exemple réel, le premier scénario a 3 champs et le deuxième scénario a environ 10, donc ce serait vraiment difficile d'avoir deux constructeurs , la quantité de champs que je devrais déclarer nulle et puis quand l'objet est en cours d'utilisation, vous ne le feriez pas. Bar
Je ne sais pas où vous utilisez et quels champs seraient nuls et lesquels ne le seraient pas.
Quelles autres options ai-je?
Deux classes appelées BarPreview
et Bar
?
Un type d'héritage / interface?
Quelque chose d'autre qui est génial?
You should only ask practical, answerable questions based on actual problems that you face.
et c'est exactement ce qui se passe ici
Bar
comme identifiant!